Синонимы для 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',
		)
	);
}
Заметки к вопросу:
kolshix 1.5 года назад

Результат

Решено:

Код ищет точное совпадение, если значение поля имее больше символов, поиск не срабатывает, проблема вхождения и сравнения строки, ищу дальше
решение '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'
													)
												)
							)
						);      
	}
compare может быть:

= - равно.
!= - не равно.
> - больше.
>= - больше или равно.
< - меньше.
<= - меньше или равно.
LIKE - указанная в value подстрока имеется в строке. Как '%значение%' в sql запросе.
NOT LIKE - тоже что LIKE только наоборот.
IN - в value указываются несколько значений в массиве и поиск идет хотя бы по одному из значений.
NOT IN - любое значение, кроме тех что указанны в виде массива в value.
BETWEEN - в value указываются 2 значения в массиве: большее и меньшее и поиск идет между этих значений. , например: 'value' => array(5, 25) - от 5 до 25 (включительно).
NOT BETWEEN - любое значение, за пределами диапазона указанного в value, например: 'value' => array(5, 25) - меньше 5 и больше 25.
EXISTS - выведет всё где существует указанный в 'key' ключ. 'value' не указывается в этом случае. (с версии 3.5)
NOT EXISTS - выведет всё где указанный в 'key' ключ не существует. 'value' не указывается в этом случае. (с версии 3.5)
REGEXP - в value указывается регулярное выражение для поиска, например: 'value' => '^bar', (найдет строку: 'bar is'). (с версии 3.7)
NOT REGEXP - в value указывается регулярное выражение для поиска, найдет все что не входит в это выражение. (с версии 3.7)
RLIKE - синоним REGEXP. (с версии 3.7)
kolshix 1.3 года назад

Пока что юзаю так , а то вбивать ручками в движок стало лень

    /* ФИЛЬТР ДЛЯ СИНОНИМОВ
	 * Добавляем поиск по синонимам для нужной таксономии, чтоб не грузить запросами 
	 * фильтр сработает только если стандартный запрос по имени не дал результатов, 
	 * так же установлено ограничение фильтра по таксономии, так как для всех не нужно.
	 * 
	 * Для работы фильтра нужно добавить произвольное поле для таксономии где  '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();
	 }