Фильтр query_vars в WordPress — мощный инструмент для работы с пользовательскими переменными (параметрами URL) в системе запросов. С его помощью можно добавлять собственные параметры в URL и затем использовать их для фильтрации или настройки контента на страницах сайта.
Как работает query_vars?
Когда WordPress обрабатывает URL-запрос, он разбирает его и преобразует в набор параметров для системы запросов (query). Эти параметры называются переменными запроса (query vars). По умолчанию WordPress поддерживает множество встроенных переменных (например, post_type, category_name, author и другие), которые влияют на то, какие записи и страницы будут показаны пользователю.
Фильтр query_vars позволяет добавлять пользовательские параметры в список допустимых, чтобы затем использовать их в своих шаблонах или плагинах для выполнения специфических задач.
Пример использования фильтра
Допустим, вы хотите добавить параметр my_param в URL и использовать его для фильтрации контента на сайте. Для этого нужно зарегистрировать этот параметр через фильтр query_vars.
Шаг 1: Добавляем параметр через фильтр query_vars
Чтобы WordPress распознал новый параметр в URL, нужно добавить его с помощью фильтра query_vars. Вот как это сделать:
function add_custom_query_var( $vars ) {
$vars[] = 'my_param'; // Добавляем нашу переменную в список
return $vars;
}
add_filter( 'query_vars', 'add_custom_query_var' );Здесь:
$vars— это массив всех допустимых переменных запроса в WordPress.- Мы добавляем в этот массив новую переменную
my_param, которую можно будет использовать в URL.
Шаг 2: Использование параметра в шаблонах
Теперь, когда my_param зарегистрирован, вы можете использовать его в коде. Например, получить значение этого параметра можно через объект запроса WP_Query или функцию get_query_var().
function display_custom_query_var() {
// Получаем значение переменной my_param из запроса
$my_param_value = get_query_var( 'my_param' );
// Если значение параметра существует, выводим его
if ( !empty( $my_param_value ) ) {
echo '<p>Значение параметра my_param: ' . esc_html( $my_param_value ) . '</p>';
}
}
add_action( 'wp_footer', 'display_custom_query_var' );Теперь, если вы добавите параметр в URL, например:
https://example.com/?my_param=testНа странице будет выведено:
Значение параметра my_param: test
Шаг 3: Применение пользовательского параметра в запросах
Допустим, вы хотите фильтровать посты в зависимости от значения my_param. Это можно сделать с помощью WP_Query в файле шаблона:
function filter_posts_by_custom_query_var( $query ) {
if ( $query->is_main_query() && !is_admin() && $query->is_home() ) {
$my_param_value = get_query_var( 'my_param' );
// Если параметр существует, фильтруем посты по определённому условию
if ( $my_param_value ) {
$query->set( 'meta_key', 'custom_field' );
$query->set( 'meta_value', $my_param_value );
}
}
}
add_action( 'pre_get_posts', 'filter_posts_by_custom_query_var' );В этом примере:
- Мы проверяем, что это основной запрос (
is_main_query), и что это не админка. - Затем получаем значение переменной
my_paramи используем его для фильтрации постов по пользовательскому полюcustom_field.
Как это работает
- Фильтр
query_varsдобавляет параметрmy_paramв список допустимых переменных для запросов. - WordPress распознает этот параметр, когда он появляется в URL, и сохраняет его как переменную запроса.
- Функция
get_query_var( 'my_param' )возвращает значение этого параметра, которое можно использовать для вывода или фильтрации контента.
Зачем использовать query_vars?
Фильтр query_vars полезен, когда нужно:
- Добавить пользовательские параметры в URL для передачи данных.
- Фильтровать контент на основе пользовательских значений (например, фильтрация товаров по цене или категории).
- Использовать переменные в кастомных запросах WordPress для более сложной логики отображения.
Фильтр query_vars расширяет возможности WordPress, позволяя добавлять и использовать пользовательские параметры в запросах. Это полезно для создания динамических страниц, фильтрации контента, передачи данных через URL и многого другого.