Хук post_search_columns
в WordPress позволяет изменять столбцы базы данных, по которым осуществляется поиск при использовании параметра search
в WP_Query
. Этот хук предоставляет разработчикам возможность тонкой настройки поиска, исключая ненужные поля из поиска, что может повысить производительность, или добавляя новые поля в будущих версиях WordPress.
apply_filters( 'post_search_columns', string[] $search_columns, string $search, WP_Query $query );
Параметры
$search_columns
(array): Массив столбцов, по которым будет производиться поиск. По умолчанию в этот массив входят три столбца:post_title
,post_excerpt
иpost_content
.$search
(string): Строка поиска, которая передается в запрос.$query
(WP_Query): Текущий объект запросаWP_Query
.
Этот хук позволяет фильтровать массив столбцов, по которым будет производиться поиск в базе данных, изменяя их при необходимости.
Пример 1: Исключение поля post_excerpt
из поиска
В некоторых случаях, например, при большом объеме контента в поле post_excerpt
, может быть полезно исключить его из поиска, чтобы ускорить процесс поиска. В следующем примере показано, как это сделать:
add_filter( 'post_search_columns', 'exclude_post_excerpt_from_search', 10, 3 );
function exclude_post_excerpt_from_search( $search_columns, $search, $query ) {
// Удаляем post_excerpt из массива столбцов поиска
$search_columns = array_diff( $search_columns, [ 'post_excerpt' ] );
return $search_columns;
}
В этом примере мы используем функцию array_diff()
, чтобы исключить столбец post_excerpt
из списка столбцов для поиска. Теперь поиск будет производиться только по полям post_title
и post_content
.
Пример 2: Добавление нового столбца для поиска
Хотя WordPress по умолчанию ищет только в трех столбцах, можно добавить новые столбцы для поиска. Например, если вам нужно искать по меткам или пользовательским полям, вы можете расширить массив столбцов:
add_filter( 'post_search_columns', 'add_custom_column_to_search', 10, 3 );
function add_custom_column_to_search( $search_columns, $search, $query ) {
// Добавляем метки (tags) в список столбцов для поиска
$search_columns[] = 'post_tag';
return $search_columns;
}
Этот код добавляет столбец post_tag
(метки) в список столбцов, по которым будет осуществляться поиск. Теперь поиск будет также охватывать метки, прикрепленные к записям.
Пример 3: Демонстрация передаваемых параметров
Иногда полезно просмотреть параметры, которые передаются в фильтр, чтобы лучше понять, как работает хук. В следующем примере выводятся содержимое массива столбцов, строка поиска и объект WP_Query
:
add_filter( 'post_search_columns', 'demo_post_search_columns', 10, 3 );
function demo_post_search_columns( $search_columns, $search, $query ) {
// Выводим массив столбцов для поиска
print_r( $search_columns );
/*
Array (
[0] => post_title
[1] => post_excerpt
[2] => post_content
)
*/
// Выводим строку поиска
var_dump( $search ); // string(15) "search for text"
// Выводим объект WP_Query
print_r( $query ); // WP_Query Object
}
get_posts( [ 's' => 'search for text' ] );
Этот пример выводит массив столбцов, строку поиска и объект запроса, что может быть полезно для отладки и понимания того, как работает фильтр.
Пример 4: Использование фильтра для изменения поиска на странице определенной категории
Если вы хотите изменить поиск только на страницах определенной категории, вы можете добавить условие в обработчик фильтра:
add_filter( 'post_search_columns', 'custom_category_search_columns', 10, 3 );
function custom_category_search_columns( $search_columns, $search, $query ) {
// Изменяем столбцы поиска только для категории "news"
if ( $query->is_category( 'news' ) ) {
// Добавляем поле custom_field в поиск
$search_columns[] = 'custom_field';
}
return $search_columns;
}
Этот код добавляет поле custom_field
в список столбцов для поиска, но только на страницах категории с ярлыком «news».
Заключение
Хук post_search_columns
предоставляет возможность гибкой настройки поиска в WordPress. Он позволяет разработчикам оптимизировать поисковые запросы, исключать ненужные столбцы для повышения производительности или добавлять новые столбцы для поиска. Это делает поиск более точным и эффективным в зависимости от потребностей сайта.