Flector

Как заставить WordPress искать только по заголовкам записей?

Не секрет, что "родной" поиск в WordPress сделан из рук вон плохо. По этой причине многие используют сторонние плагины для поиска вроде Relevanssi. Нельзя с помощью какого-то небольшого сниппета кода улучшить качество поиска, но зато можно заставить движок искать только по заголовкам записей. Это может быть полезно, если у вас сайт с большим количеством записей и вы при этом по каким-то причинам не хотите использовать сторонние плагины поиска (например, при использовании плагинов автонаполнения сайта, которые могут добавлять статьи сотнями в день - в этом случае построение поискового индекса плагинами поиска может вызвать заметные нагрузки на сервер). Для включения поиска по заголовкам вам необходимо добавить в файл functions.php вашей темы следующий код:

//поиск только по заголовкам записей start
function wph_search_by_title($search, &$wp_query) {
    global $wpdb;
    if (empty($search)) return $search;
 
    $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}($wpdb->posts.post_title LIKE '{$n}{$term}{$n}')";
       $searchand = ' AND ';
    }
 
    if (!empty($search)) {
        $search = " AND ({$search}) ";
        if (!is_user_logged_in())
            $search .= " AND ($wpdb->posts.post_password = '') ";
    }
    return $search;
}
add_filter('posts_search', 'wph_search_by_title', 500, 2);
//поиск только по заголовкам записей end

С этим кодом поиск движком будет выполняться только по заголовкам записей.


Комментарии (3 комментария)
  1. Yuriy:

    Thank you very much, that is what do I need

  2. Явер:
    1
    
    like_escape

    - уже устаревшая функция. Её можно заменить на

    1
    
    $wpdb->esc_like

    .
    Кстати, есть ещё классный сниппет для поиска, если пользователь ввёл запрос на неправильной раскладке: вариант 7.

  3. Сергей:

    Спасибо. Помогло. И заменил устаревшую функцию тоже.

Написать комментарий

Для вставки кода воспользуйтесь кнопкой "Код". Используйте предпросмотр!