(WordPress + Автозаполнение) Поиск тегов и получить список всех сообщений для поиска тега?

Я пытаюсь создать поиск WordPress с настроенным автозаполнения список предложений. Я хочу ограничить поиск только тегами, и если пользователь вводит в поисковый запрос, который соответствует любому из тегов или нескольких тегов, список автозаполнения должен возвращать все сообщения, связанные с этим / этими тегами.

Например, набрав «Джаз», можно получить:

Jazz
Post 1
Post 2
Post 3
Post 4
Post 5

Jazz House
Post 1
Post 2
Post 3

Great Jazz Trio
Post 1

…

Есть одно автозаполнение пример работы с категориями. Это может привести в правильном направлении, но здесь поисковые запросы — это «сообщения», которые будут перечислены под их категориями. Мне нужно, чтобы пользователь искал категории (теги), чтобы вывести список всех сообщений, связанных с ними.

Я подумал, что возможно создать массив объектов всех тегов. И каждый объект (тег) может содержать все связанные посты. Этот массив может служить источником данных для автозаполнения.

Я был бы рад любым предложениям о том, как подойти к этому.

0

Решение

global $wpdb;

// search term provided by user
$s = 'jazz';

$query = '
SELECT wp.post_title AS label, wt.name AS category
FROM `wp_posts` wp
INNER JOIN `wp_term_relationships` wtr ON (wp.`ID` = wtr.`object_id`)
INNER JOIN `wp_term_taxonomy` wtt ON (wtr.`term_taxonomy_id` = wtt.`term_taxonomy_id`)
INNER JOIN `wp_terms` wt ON (wt.`term_id` = wtt.`term_id`)
WHERE wp.post_type="post" AND wp.post_status="publish" AND wtt.taxonomy = "post_tag" AND wt.name LIKE "%%%s%%"ORDER BY wt.name, wp.post_date DESC';

$posts = $wpdb->get_results( $wpdb->prepare( $query, $s ) );

Если я не ошибаюсь, ваша цель — предоставить массив данных для плагина автозаполнения пользовательского интерфейса jQuery, как в этот пример. Самый быстрый способ (с точки зрения производительности) сделать это — создать собственный запрос, который присоединится к wp_posts а также wp_terms таблицы, в зависимости от условия поиска, предоставленного пользователем. Результат запроса, после преобразования в json ( json_encode ($ posts) ), будет в формате, подходящем для автозаполнения плагина:

[
{ label: "Post 1", category: "Great Jazz Trio" },
{ label: "Post 1", category: "Jazz" },
{ label: "Post 2", category: "Jazz" },
{ label: "Post 3", category: "Jazz" },
{ label: "Post 4", category: "Jazz" },
{ label: "Post 5", category: "Jazz" },
{ label: "Post 1", category: "Jazz House" },
{ label: "Post 2", category: "Jazz House" },
{ label: "Post 3", category: "Jazz House" }
]
0

Другие решения

Сэр,

Вы можете использовать этот плагин

https://wordpress.org/plugins/search-autocomplete/

Он также будет поддерживать пользовательские типы сообщений. сделано с помощью jquery ui

0

По вопросам рекламы [email protected]