Домой Wp-Recall WP-Recall: Проблемы и решения Поиск по полям чекбоксов на бирже
3ответ(ов) в теме
glocc
не в сети 8 лет
На сайте с 23.05.2014
Участник
1
15:22

Снова, здравствуйте!

Организовываю поиск по дополнительным полям формы публикации задания на бирже. Всё хорошо ищет, кроме поля чекбоксов. Проблема в том, что они хранятся в виде строки в одном поле, и получить их можно только через $meta_query[] каждого отдельного значения чекбокса через LIKE (поправьте, если не прав), например:

$meta_query[] = array(
                                                    'value' => $_GET['nazvanie_checkboksa_78'][0],
                                                    'key' => 'nazvanie_checkboksa_78',
                                                    'compare' => 'LIKE'
                                                );
$meta_query[] = array(
                                                    'value' => $_GET['nazvanie_checkboksa_78'][1],
                                                    'key' => 'nazvanie_checkboksa_78',
                                                    'compare' => 'LIKE'
                                                );
// и так далее...

У меня 44 чекбокса, что создаёт большое количество запросов на сервер. Можно ли как-то оптимизировать поиск? Может есть лучший способ?

Поиск формирую в functions.php своей темы (переименовал функцию get_freelance_task_filter на свою и добавил туда все значения из /wp-content/wp-recall/add-on/freelance/index.php, а также созданные мной дополнительные поля).

0
Андрей CS
не в сети 3 часа
На сайте с 30.11.-0001
Администратор
Тем 71
Сообщения 16929
2
15:37

суть верна.
Данные поля типа чекбокс храняться в массиве, поэтому придется искать соотвествие через like.
Если значение value нельзя передавать как массив, то придется делать так как вы и указали, только лучше все таки перед добавлением очередного массива в meta_query делать проверку на присутствие $_GET['nazvanie_checkboksa_78'][], например:
if(isset[$_GET['nazvanie_checkboksa_78'][0]]){
$meta_query[] = array(
'value' => $_GET['nazvanie_checkboksa_78'][0],
'key' => 'nazvanie_checkboksa_78',
'compare' => 'LIKE'
);
}
А вообще данный массив можно формировать через цикл, чтобы не прописывать добавление каждого элемента вручную.

1
glocc
не в сети 8 лет
На сайте с 23.05.2014
Участник
3
13:45

У меня получилось что-то в этом роде и, вроде, всё работает:

$nazvanie_checkboksa = $_GET['nazvanie_checkboksa_78'];
                                    if(isset($nazvanie_checkboksa) && is_array($nazvanie_checkboksa)) {
                                        foreach($nazvanie_checkboksa as $value) {
                                         $meta_query[] = array(
                                            'value' => $value,
                                            'key' => 'nazvanie_checkboksa_78',
                                            'compare' => 'LIKE'
                                        );
                                    }
                                }

Спасибо за помощь. 🙂

1
Тема закрыта. Публикация новых сообщений запрещена.