post_search_columns
Позволяет изменять список столбцов, по которым будет осуществляться поиск при использовании search в WP_Query.
По умолчанию WordPress ищет записи по трем полям: post_title
, post_excerpt
и post_content
.
Этот хук позволяет изменить этот список полей, так чтобы ВП искал посты по нужным вам полям.
Использование
add_filter( 'post_search_columns', 'wp_kama_post_search_columns_filter', 10, 3 ); /** * Function for `post_search_columns` filter-hook. * * @param string[] $search_columns Array of column names to be searched. * @param string $search Text being searched. * @param WP_Query $query The current WP_Query instance. * * @return string[] */ function wp_kama_post_search_columns_filter( $search_columns, $search, $query ){ // filter... return $search_columns; }
- $search_columns(string[])
- Массив названий столбцов по которым нужно производить поиск.
- $search(строка)
- Строка (запрос) поиска.
- $query(WP_Query)
- Текущий экземпляр WP_Query.
Примеры
#1 Добавим произвольное поле поста в поиск
// Добавляем фильтр на поиск по произвольному полю "my_custom_field" add_filter( 'post_search_columns', 'wp_kama_custom_search_fields' ); function wp_kama_custom_search_fields( $search_columns ) { $search_columns[] = 'my_custom_field'; return $search_columns; } $args = array( 's' => 'some search query', // поисковый запрос 'post_type' => 'post', // тип постов 'meta_key' => 'my_custom_field', // ключ произвольного поля 'meta_value' => 'some custom value', // значение произвольного поля 'post_status' => 'publish', // статус постов 'posts_per_page' => 10, // количество постов на странице ); $query = new WP_Query( $args );
Этот код добавляет произвольное поле my_custom_field
в список колонок, в которых будет производиться поиск при использовании WP_Query с параметром s
(поиск по словам). Также этот код включает условие meta_query
для поиска записей, которые имеют значение some custom value в поле my_custom_field
.
Таким образом, фильтр post_search_columns
позволяет изменить стандартное поведение поиска в WordPress и настроить его под нужды вашего проекта.
#2 Исключаем поле post_excerpt из поиска
Внутри колбэка для хука вы можете изменять список столбцов для поиска по своему усмотрению и возвращать измененный список. Например, вы можете исключить столбец post_excerpt
из списка для ускорения поискаю:
// Исключаем поле post_excerpt из поиска add_filter( 'post_search_columns', 'wp_kama_post_search_columns_filter', 10, 3 ); /** * Функция-обработчик фильтра `post_search_columns`. * * @param string[] $search_columns Массив имен столбцов, в которых искать. * @param string $search Строка, по которой осуществляется поиск. * @param WP_Query $query Текущий экземпляр WP_Query. * * @return string[] $search_columns Массив имен столбцов, в которых искать. */ function wp_kama_post_search_columns_filter( $search_columns, $search, $query ){ $search_columns = array_diff( $search_columns, [ 'post_excerpt' ] ); return $search_columns; }
В этом примере функция обратного вызова удаляет столбец post_excerpt
из списка столбцов для поиска, если он там есть.
В целом, с помощью фильтра post_search_columns
можно добавлять или удалять столбцы для поиска постов. Это может быть полезно, например, если вы хотите выполнить поиск только по заголовку статей или только по содержимому дополнительных полей.
#3 Демо: что содержат передаваемые в хук параметры
add_filter( 'post_search_columns', 'wp_kama_post_search_example', 10, 3 ); function wp_kama_post_search_example( $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" print_r( $query ); // WP_Query Object } get_posts( [ 's'=>'search for text'] );
Список изменений
С версии 6.2.0 | Введена. |
Где вызывается хук
$search_columns = (array) apply_filters( 'post_search_columns', $search_columns, $q['s'], $this );