Искать все (сообщения, страницы, теги, cpt, мета)


Я хотел бы знать, как использовать встроенный поиск wordpress для возврата результатов со всего контента на моем сайте. В частности, я хочу выполнить поиск;

  • сообщения
  • страницы
  • теги
  • пользовательский тип публикации (портфолио)
  • пользовательская таксономия, используемая в пользовательском типе записи (навык, клиент)
  • метабоксы, используемые в пользовательском типе записи (portfolio_caption, portfolio_excerpt, portfolio_credits, portfolio_линки)

Я хотел бы получить одну форму поиска и не нужно ограничивать поиск определенными типами записей или категориями. Просто введите поисковый запрос > нажмите поиск > посмотреть совпадения со всем контентом на моем сайте. Просто;)

Обновление: Предпочтительно, я бы достиг этого с помощью функции или пользовательского запроса к базе данных, а не с помощью плагина. Это связано с тем, что я разрабатываю тему и хочу, чтобы эта функциональность была включена из коробки, а не требовала от пользователя загрузки плагина. (название изменено)

Author: robflate, 2012-02-09

3 answers

DeluxeBlogTips.com 1) есть статья о том, как выполнять комбинированный поиск как в сообщениях, так и в метаданных. В основном, это включает в себя два запроса через объект $wpdb; один для поиска в мета-таблице, чтобы получить список post_ids, а другой - запрос сообщений, чтобы получить post_ids. Затем вы объединяете массивы и используете их для выполнения запроса с WP_Query, используя аргумент posts__in.

Использование тегов может быть немного сложным, потому что 1. теги предназначены для группировки сообщений вместе и 2. теги и таксономии включают 3 различные таблицы.

1) Связанная статья не совсем верна. Это должно быть $keyword = "%".like_escape( $keyword )."%";.

 2
Author: Manny Fleurmond, 2012-11-26 02:47:19

Используя ссылку, опубликованную @Wyck, проверьте http://wordpress.org/extend/plugins/search-everything /. Учитывая сложность задачи, плагин действительно является вашим лучшим выбором для ее выполнения.

 0
Author: Matthew Boynes, 2012-02-13 07:08:14

Если вы действительно против плагина и знаете немного SQL, вы можете сделать это с помощью глобальной переменной $wpdb.

Например, чтобы запросить все сообщения, содержащие "sample_text" в заголовке, вы должны сделать что-то вроде:

global $wpdb;    
$post = $wpdb->get_results("SELECT * FROM $wpdb->wp_posts WHERE post_title LIKE '%sample_text%' ");

Затем вы бы сделали аналогичные действия для каждой из других таблиц.

 0
Author: karllhughes, 2012-11-26 01:09:43