Задать вопрос

Как сделать в Wordpress так чтобы поиск искал сначала по заголовкам, а если ничего не найдено, то по тексту статей?

Тут описано как сделать поиск только по заголовкам
ixmaster.net/nastroyka-wp/poisk-tolko-po-zagolovku...
Если изменить кусок кода $wpdb->posts.post_title на $wpdb->posts.post_content , то поиск будет искать только по тексту статьи.
Вопрос в том как объединить эти куски кода чтобы он искал сразу по заголовку (названию статьи), а если ничего не найдено, то по тексту статьи.
  • Вопрос задан
  • 1378 просмотров
Подписаться 3 Оценить Комментировать
Пригласить эксперта
Ответы на вопрос 2
@eavam
Можно вот так попробовать:
function __search_by_title_only( $search, &$wp_query ){
  global $wpdb;
  if ( empty( $search ) ) return $search;

  $searchTitle = $wpdb->posts.post_title;
  $searchContent = $wpdb->posts.post_content;

  $q = $wp_query->query_vars;
  $n = ! empty( $q['exact'] ) ? '' : '%';
  $search =
  $searchand = '';

  foreach ( (array) $q['search_terms'] as $term ) {
    $term = esc_sql( like_escape( $term ) );
    $search .= "{$searchand}($searchTitle LIKE '{$n}{$term}{$n}')";
    $searchand = ' AND ';
    $search .= "{$searchand}($searchContent LIKE '{$n}{$term}{$n}')";
  }

  if ( ! empty( $search ) ) {
    $search = " AND ({$search}) ";
  if ( ! is_user_logged_in() )
    $search .= " AND ($wpdb->posts.post_password = '') ";
  }
  return $search;
}
add_filter( 'posts_search', '__search_by_title_only', 500, 2 );
Ответ написан
@boarworm Автор вопроса
Наверное я плохо объяснил.
Поиск сначала ищет ТОЛЬКО по title ($wpdb->posts.post_title)
Если есть результаты — выводит их.
Если результатов нет, тогда поиск ищет в самих текстах статей ($wpdb->posts.post_content)
Если есть результаты — выводит их.
Если нет — выводит надпись «Ничего не найдено».
Не пойму как в этом случае сделать один запрос к базе (поиск по заголовку), проверить ответ на пустоту, и если ответ пустой, то сделать второй запрос (поиск по тексту)
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы