post_search_columns │ хук-фильтр │ WP 6.2.0

post_search_columns │ хук-фильтр │ WP 6.2.0
Click here to view original web page at wp-kama.ru

Позволяет изменять список столбцов, по которым будет осуществляться поиск при использовании 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.

Примеры

// Добавляем фильтр на поиск по произвольному полю "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 и настроить его под нужды вашего проекта.

Внутри колбэка для хука вы можете изменять список столбцов для поиска по своему усмотрению и возвращать измененный список. Например, вы можете исключить столбец 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Введена.

Где вызывается хук

WP_Query::parse_search()

post_search_columns

wp_query_search_exclusion_prefix

wp-includes/class-wp-query.php 1435

$search_columns = (array) apply_filters( 'post_search_columns', $search_columns, $q['s'], $this );

Где используется хук в WordPress

Использование не найдено.