Описание posts_search
— Filter
Хук posts_search позволяет изменить SQL-запрос, который используется для выполнения поиска по записям в WordPress. Он срабатывает при выполнении поиска в админке или на сайте, позволяя кастомизировать логику поиска и добавлять дополнительные условия фильтрации
Примеры использования
Пример изменения запроса поиска для игнорирования регистра:
add_filter('posts_search', function($search, $wp_query) {
global $wpdb;
if(!empty($search)) {
$search = 'AND (UPPER(' . $wpdb->posts . '.post_title) LIKE UPPER('%' . esc_sql($search) . '%') OR UPPER(' . $wpdb->posts . '.post_content) LIKE UPPER('%' . esc_sql($search) . '%'))';
}
return $search;
}, 10, 2);
В этом примере мы изменяем SQL-запрос, чтобы поиск был нечувствителен к регистру.
Пример добавления условия для поиска только по определенным типам записей:
add_filter('posts_search', function($search, $wp_query) {
if($wp_query->get('post_type') === 'product') {
$search .= ' AND post_type = ''product''';
}
return $search;
}, 10, 2);
В этом примере мы добавляем условие, чтобы искать только среди товаров.
Пример изменения запроса для поиска по мета-полям:
add_filter('posts_search', function($search, $wp_query) {
global $wpdb;
if(!empty($search)) {
$search .= ' OR ' . $wpdb->postmeta . '.meta_value LIKE ''%' . esc_sql($search) . '%''';
$search .= ' AND ' . $wpdb->postmeta . '.meta_key = ''_custom_meta''';
}
return $search;
}, 10, 2);
Здесь мы добавляем возможность поиска по мета-полям с определенным ключом.
— Лучшие практики
– Использование
Используйте этот хук, когда необходимо изменить логику поиска по записям в WordPress
– Производительность
Следите за тем, чтобы изменения не ухудшали производительность запросов, особенно при больших объемах данных
– Предупреждения
Будьте осторожны с изменениями, чтобы не нарушить логику поиска, используемую по умолчанию
Альтернативы
Тип: action
Этот хук позволяет изменять параметры запроса перед его выполнением, включая условия поиска
Используйте его, если нужно изменить параметры запроса в более широком контексте, а не только для поиска