Снова, здравствуйте!
Организовываю поиск по дополнительным полям формы публикации задания на бирже. Всё хорошо ищет, кроме поля чекбоксов. Проблема в том, что они хранятся в виде строки в одном поле, и получить их можно только через $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, а также созданные мной дополнительные поля).
суть верна.
Данные поля типа чекбокс храняться в массиве, поэтому придется искать соотвествие через 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'
);
}
А вообще данный массив можно формировать через цикл, чтобы не прописывать добавление каждого элемента вручную.
У меня получилось что-то в этом роде и, вроде, всё работает:
$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' ); } }
Спасибо за помощь. 🙂