Синонимы для TERMS — поиск по имени в дополнительных meta полях
Результат читать в заметке, ГЛАВНОЕ, теперь кириллица и латиница, а так же порядок Имени и фамилии при поиске, ведет к одному термину ))
https://wp-kama.ru/function/wp_ajax_ajax_tag_search
конструкция поиска термина по словам Майк Тайсон
$results = get_terms( array( 'taxonomy' => $taxonomy, 'name__like' => $search, // к примеру Майк Тайсон 'fields' => 'names' // это возврат значения для выбора ) );
хочу добавить мета поле с массивом синонимов array("Железный Майк", "Mike Tyson","и тд " )
как добавить поиск, как будет выглядеть запрос ??
name__like(строка)
Показать термины, в названии которых есть указанная строка. Поиск по строке.
Как выполнить поиск в метаполе terms_synonyms??
if ( $results == "не нашел "){
$results = get_terms(
array(
'taxonomy' => $taxonomy,
'name__like' => $search, // к примеру Майк Тайсон
'fields' => 'names',
)
);
}
Пока что юзаю так , а то вбивать ручками в движок стало лень
/* ФИЛЬТР ДЛЯ СИНОНИМОВ
* Добавляем поиск по синонимам для нужной таксономии, чтоб не грузить запросами
* фильтр сработает только если стандартный запрос по имени не дал результатов,
* так же установлено ограничение фильтра по таксономии, так как для всех не нужно.
*
* Для работы фильтра нужно добавить произвольное поле для таксономии где 'key' = 'term_synonyms'
* @param 'compare' '=' поиск сработает при точном совпадении
* @param 'compare' 'LIKE' поиск сработает если в строке есть совпадение
* @author Kolshix (https://paxtoy.com/)
* @version 1.0
*/
add_filter( 'ajax_term_search_results', 'kolshix_term_search_results', 10, 3 );
// apply_filters( 'ajax_term_search_results', $results, $taxonomy_object, $search );
function kolshix_term_search_results( $results, $taxonomy_object, $search ) {
$taxonomy = sanitize_key( $_GET['tax'] );
if ( $taxonomy == "pax_actors_characters" && empty( $results ) ){ // подставляем свою таксономию
$s_new = $search;
// сколько слов, а так же кириллица
if ( str_word_count( $search , 0, "АаБбВвГгДдЕеЁёЖжЗзИиЙйКкЛлМмНнОоПпРрСсТтУуФфХхЦцЧчШшЩщЪъЫыЬьЭэЮюЯя" ) == 2 ) {
// реверс имени, только для двух слов
$s_new = explode(' ', $search);
$s_new = $s_new[1] . ' ' . $s_new[0];
}
$results = get_terms(
array(
'taxonomy' => "pax_actors_characters",
// 'name__like' => "найди меня", // к примеру Майк Тайсон
'fields' => 'names', // возвращать данные из поля 'names'
'hide_empty' => false,
'meta_query' => array(
'relation' => 'OR',
array(
'key' => 'term_synonyms',
'value' => $search,
'compare' => 'LIKE'
),
// реверс имени, только для двух слов
array(
'key' => 'term_synonyms',
'value' => $s_new,
'compare' => 'LIKE'
)
)
)
);
}
echo implode( "\n", $results );
wp_die();
} 
Результат
Решено:
Код ищет точное совпадение, если значение поля имее больше символов, поиск не срабатывает, проблема вхождения и сравнения строки, ищу дальше
решение 'compare' => 'LIKE'
история вопроса
https://wp-kama.ru/question/filtr-sinonimov
правим тут
wp-admin/includes/ajax-actions.php
function wp_ajax_ajax_tag_search() {
Поиск будет в мета поле term_synonyms, а вот name__like отключаем.
в валуе помещаем запрос\фразу
if ( $taxonomy == "pax_actors_characters" && empty( $results ) ){ $s_new = ""; if ( str_word_count( $search , 0, "АаБбВвГгДдЕеЁёЖжЗзИиЙйКкЛлМмНнОоПпРрСсТтУуФфХхЦцЧчШшЩщЪъЫыЬьЭэЮюЯя" ) == 2 ) { // реверс имени, только для двух слов $s_new = explode(' ', $search); $s_new = $s_new[1] . ' ' . $s_new[0]; } $results = get_terms( array( 'taxonomy' => "pax_actors_characters", // 'name__like' => "найди меня", // к примеру Майк Тайсон 'fields' => 'names', // возвращать данные из поля names 'hide_empty' => false, 'meta_query' => array( 'relation' => 'OR', array( 'key' => 'term_synonyms', 'value' => $search, // в старых версиях $s 'compare' => 'LIKE' ), // реверс имени, только для двух слов array( 'key' => 'term_synonyms', 'value' => $s_new, 'compare' => 'LIKE' ) ) ) ); }