Стандартный поиск WordPress, хоть и удобен для базового использования, часто не удовлетворяет требованиям сайтов с большим количеством контента. Он медленно работает при больших объемах данных и не всегда выдает релевантные результаты. В этой статье мы рассмотрим, как заменить или улучшить стандартный поиск WordPress, чтобы получить более производительный и точный поиск, подходящий для реальных проектов.
Почему стандартный поиск WordPress работает плохо: причины и ограничения
Поиск в ядре WordPress основан на простом SQL-запросе, который ищет совпадения в заголовках и содержимом постов. Такой подход имеет ряд недостатков:
- Отсутствие полнотекстового поиска на уровне базы данных — MySQL полнотекстовый поиск работает не всегда и не во всех конфигурациях;
- Нет ранжирования результатов по релевантности — слова в заголовках не учитываются выше, чем в теле;
- Поиск по метаданным и кастомным полям не происходит по умолчанию;
- При большом количестве данных запросы становятся медленными и нагружают сервер.
Поэтому для сайтов с большим объемом контента или сложной структурой поиска стандартный поиск нужно либо заменить, либо значительно доработать.
Обзор популярных плагинов для замены поиска в WordPress
Существуют готовые решения, которые позволяют быстро и эффективно улучшить поиск. Вот несколько популярных вариантов:
1. Relevanssi
Relevanssi — один из самых популярных плагинов, заменяющих стандартный поиск. Он делает полнотекстовый поиск по контенту, заголовкам, метаданным и комментариям, поддерживает операторные запросы, синонимы, подсветку результатов.
Преимущества:
- Индексация данных для быстрого поиска;
- Настройка веса для различных элементов (заголовок, контент, категория);
- Поддержка кастомных типов записей и таксономий.
Установка и базовая настройка:
install_plugin('relevanssi');
// Включаем индексирование через настройки плагина
2. SearchWP
SearchWP — коммерческий плагин с расширенными возможностями для профессионального поиска. Позволяет создавать свои алгоритмы ранжирования, искать по PDF и другим документам, интегрируется с WooCommerce и другими плагинами.
Минус — платный, но если нужен полный контроль и мощь — отличный выбор.
3. ElasticPress
ElasticPress — интеграция WordPress с Elasticsearch. Использует внешнюю систему поиска, что обеспечивает мгновенный отклик и масштабируемость.
Подходит для больших проектов с высокими требованиями к производительности.
Как улучшить стандартный поиск WordPress с помощью кода
Если вы хотите обойтись без сторонних плагинов или сделать кастомное решение, можно улучшить стандартный поиск с помощью фильтров и функций WordPress.
Добавление поиска по кастомным полям
По умолчанию WordPress не ищет по метаданным. Добавим такую возможность через фильтр posts_search.
function wpskills_posts_search_meta( $search, \WP_Query $query ) {
global $wpdb;
if ( ! $query->is_search() || empty( $search ) ) {
return $search;
}
$search_term = $query->get( 's' );
$search = " AND ( $wpdb->posts.post_title LIKE '%" . esc_sql( $wpdb->esc_like( $search_term ) ) . "%'"
. " OR $wpdb->posts.post_content LIKE '%" . esc_sql( $wpdb->esc_like( $search_term ) ) . "%'"
. " OR EXISTS ( SELECT 1 FROM $wpdb->postmeta WHERE post_id = $wpdb->posts.ID AND meta_value LIKE '%" . esc_sql( $wpdb->esc_like( $search_term ) ) . "%' ) ) ";
return $search;
}
add_filter( 'posts_search', 'wpskills_posts_search_meta', 10, 2 );Этот код расширяет поиск, добавляя проверку по значениям метаполей. Это полезно, если вы храните важные данные в кастомных полях.
Оптимизация производительности запроса
Чтобы ускорить поиск, можно ограничить возвращаемые поля и исключить лишние JOINы, например, так:
function wpskills_search_query_args( $query ) {
if ( $query->is_search() && ! is_admin() && $query->is_main_query() ) {
$query->set( 'fields', 'ids' ); // возвращать только ID постов
$query->set( 'posts_per_page', 20 );
}
}
add_action( 'pre_get_posts', 'wpskills_search_query_args' );Возвращение только ID уменьшает объем данных, что ускоряет работу, особенно на больших сайтах.
Пример интеграции плагина Clearfy Pro для улучшения поиска
Плагин Clearfy Pro предлагает комплекс оптимизаций, в том числе улучшение поиска за счет отключения ненужных функций и оптимизации запросов.
Для включения улучшенного поиска в Clearfy:
- Установите и активируйте Clearfy Pro;
- В разделе оптимизации включите опции, связанные с поиском;
- Настройте индексацию и фильтры для поиска.
Этот подход подойдет, если вы хотите комплексную оптимизацию без глубоких технических правок.
Заключение: какой способ выбрать для улучшения поиска
Если у вас небольшой сайт, и нужен простой поиск по метаданным, достаточно добавить пару строк кода, как показано выше. Для средних и крупных проектов с большим объемом контента рекомендуем использовать плагин Relevanssi — он бесплатен, мощный и гибкий.
Для очень больших профессиональных проектов стоит рассмотреть интеграцию с ElasticPress и Elasticsearch, или платный SearchWP для максимального контроля.
Улучшение поиска — это всегда баланс между сложностью внедрения и качеством результата. Начинайте с простых шагов, тестируйте и масштабируйте по мере необходимости.