Поиск термина произвольной таксономии по названию
У меня есть произвольная таксономия под названием albums.
Мне нужно иметь возможность искать по текстовому названию термина таксономии, очевидно, это не стандартный поиск WordPress. Интересует, как лучше всего это реализовать?
Допустим, есть альбом под названием 'Football Hits',
Я начинаю вводить 'foot' и выполняю поиск, мне нужно только получить название альбома и его постоянную ссылку.
Спасибо!

// Получаем список таксономий для поисковой строки
function get_tax_by_search($search_text){
$args = array(
'taxonomy' => array( 'my_tax' ), // название таксономии
'orderby' => 'id',
'order' => 'ASC',
'hide_empty' => true,
'fields' => 'all',
'name__like' => $search_text
);
$terms = get_terms( $args );
$count = count($terms);
if($count > 0){
echo "<ul>";
foreach ($terms as $term) {
echo "<li><a href='".get_term_link( $term )."'>".$term->name."</a></li>";
}
echo "</ul>";
}
}
// пример использования
get_tax_by_search('Foo');

Итак, вы действительно можете искать записи по названию таксономии — как пользовательской, так и стандартной. Ответ кроется в части "tax_query" WP_Query. Вот пример из Codex, адаптированный под ваши нужды:
<ul>
<?php
global $post;
$album_title = $_GET['album-title'];
$args = array(
'post_type' => 'post',
'posts_per_page' => 5,
'tax_query' => array( // ВАЖНО: массив массивов!
array(
'taxonomy' => 'albums',
'field' => 'name',
'terms' => $album_title
)
)
);
$myposts = get_posts( $args );
foreach ( $myposts as $post ) : setup_postdata( $post ); ?>
<li>
<a href="<?php the_permalink(); ?>"><?php the_title(); ?></a>
</li>
<?php endforeach;
wp_reset_postdata();?>
</ul>
ОБНОВЛЕНИЕ
Я не тестировал этот вариант, но теоретически он должен работать. Для поиска любых записей, содержащих «foot»:
<ul>
<?php
global $post;
$album_title = $_GET['album-title']; // предположим, пользователь ввёл 'foot'
$args = array(
'post_type' => 'post',
'posts_per_page' => 5,
'tax_query' => array( // ВАЖНО: массив массивов!
array(
'taxonomy' => 'albums',
'field' => 'name',
'terms' => $album_title,
'operator' => 'LIKE'
)
)
);
$myposts = get_posts( $args );
foreach ( $myposts as $post ) : setup_postdata( $post ); ?>
<li>
<a href="<?php the_permalink(); ?>"><?php the_title(); ?></a>
</li>
<?php endforeach;
wp_reset_postdata();?>
</ul>
Надеюсь, это поможет!

Спасибо! Хотя мне нужно, чтобы поиск был более ориентирован на пользователя. То есть пользователь вводит слово "foot", и система должна подтянуть соответствующий альбом Football Hits.

Конечно — просто замените жестко заданный заголовок на переменную... Как именно вы получите это значение поиска от пользователя — решать вам... Я обновил свой ответ с одним из вариантов в качестве примера...

Спасибо, MacPrawn, ценю вашу помощь. Хотя, конечно, вышеуказанный код не загрузит термин Football Hits, если поисковый запрос — это просто "foot". Возможно, я ошибаюсь.

Извините - я пропустил часть, где вы хотели частичные совпадения... Я обновил свой ответ.

Я проверил вышеуказанное, однако мне нужно, чтобы он просто выводил соответствующее название альбома, а не записи внутри этого альбома. То есть не записи, отнесенные к категории Football Hits, а буквально только постоянную ссылку на альбом.

А, понятно. Тогда, думаю, ответ от @TrubinE справится лучше в этом случае.
