Поиск элементов таксономии get_terms
В файле taxonomy.php есть функция get_terms()
Где находятся параметры поля search
if ( ! empty( $args['search'] ) ) { $like = '%' . $wpdb->esc_like( $args['search'] ) . '%'; $where .= $wpdb->prepare( ' AND ((t.name LIKE %s) OR (t.slug LIKE %s))', $like, $like ); }
То есть через функцию get_terms можно настроить фильтр и поиск по таксономии
Через поле search осуществляется поиск по названию и ярлыку такс.
Хочу сделать чтобы поиск осуществлялся по названию и указанному произвольному полю, которое дополнительно было добавлено для таксономии.
Я знаю что можно настроить meta_query, но мне не особо подходит этот вариант.
Для класса WP_Term_Query есть хук terms_clauses.
Можно чуть подробней, как осуществить задуманное? Тут главное вывести имя нужного поля в переменную, таким образом чтобы поиск по этому полю осуществлялся из БД. как мне кажется..
Мета поля это отдельная таблица, нужно использовать join
Примерно так (не проверял)
при использовании get_terms добавить
'add_myfunc' => true
, чтобы везде не применялся фильтрНе работает. Думаю можно делать даже не хук, а просто правку в самом файле taxonomy.php
Код рабочий
"имя поля" - это заменили на свое?
заменил, код добавил в свой function
Оказалось, что действительно работает, но немного некорректно.
К примеру по произвольному полю может выдавать нужный результат, а вот по имени может задублировать эту же метку несколько раз. Я предполагаю, что результат дублируется от количества других заполненных полей.
Попробуй в предложенном коде заменить:
Спасибо код работает. Еще вопрос можно.
Сейчас я через обычную форму поиска передаю поисковый запрос и получаю результат, но если в конце запроса к примеру поставить пробел, то ничего уже не находит.
Можно сделать так чтобы пробелы в конце и к примеру двойные пробелы между словами не учитывались? (при обычном поиске записей, лишние пробелы не учитываются)
Вот так выглядит мой поиск:
Попробуй
В конце и в начале лишние пробелы убирает, но если между словами поставить два пробела тогда результатов нет. Спасибо за помощь.