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

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

Тут описано как сделать поиск только по заголовкам
ixmaster.net/nastroyka-wp/poisk-tolko-po-zagolovku...
Если изменить кусок кода $wpdb->posts.post_title на $wpdb->posts.post_content , то поиск будет искать только по тексту статьи.
Вопрос в том как объединить эти куски кода чтобы он искал сразу по заголовку (названию статьи), а если ничего не найдено, то по тексту статьи.
  • Вопрос задан
  • 1427 просмотров
Подписаться 3 Оценить Комментировать
Помогут разобраться в теме Все курсы
  • Skillbox
    Веб-разработчик на PHP
    9 месяцев
    Далее
  • Хекслет
    PHP-разработчик
    10 месяцев
    Далее
  • Нетология
    Веб-разработчик с нуля: профессия с выбором специализации
    14 месяцев
    Далее
Пригласить эксперта
Ответы на вопрос 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)
Если есть результаты — выводит их.
Если нет — выводит надпись «Ничего не найдено».
Не пойму как в этом случае сделать один запрос к базе (поиск по заголовку), проверить ответ на пустоту, и если ответ пустой, то сделать второй запрос (поиск по тексту)
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Похожие вопросы
FoodSoul Калининград
от 180 000 до 250 000 ₽
IT-Spirit Москва
от 230 000 до 320 000 ₽
IT ATLAS Москва
от 250 000 до 500 000 ₽