http://wm-monitoring.ru/ ')) {alert('Спасибо за то что установили нашу кнопку! =)');} else {alert('Очень жаль! =(');}"> http://wm-monitoring.ru/

Главная Новости

Request — Фильтрует параметры (переменные) основного запроса WordPress. Хук-фильтр WordPress

Опубликовано: 01.09.2018

видео request — Фильтрует параметры (переменные) основного запроса WordPress. Хук-фильтр WordPress

6.3 Запрос с параметрами Microsoft Access 2010.

Фильтрует параметры (переменные) основного запроса WordPress.


Access 2013 Урок 35 Использование запросов с параметрами для фильтрации результатов запроса

Основной запрос - это запрос связанный с текущей страницей. Например, на странице рубрики одни переменные запроса, на странице поиска другие...

Когда срабатывает хук request

Во время построения основного запроса, который строится после события init . Давайте разберем по частям.

Основной запрос строиться функцией wp() , в основе которой лежит метод WP::main() по сути он и есть все что написано про функцию wp() - он устанавливает среду WordPress. Посмотрим на код, как устанавливается среда:

// public function main($query_args = '') { $this->init(); // устанавливает текущего пользователя $this->parse_request($query_args); // разбирает указанные параметры запроса и параметры URL (ЧПУ) $this->send_headers(); // устанавливает header() заголовки $this->query_posts(); // получает записи по параметрам запроса $this->handle_404(); // выставляет статус 404, если записей по запросу не найдено $this->register_globals(); // устанавливает глобальные переменные WordPress: // $query_string, $posts, $post, $request, $more, $single, $authordata // фильтр среды WordPress после того как она была установлена do_action_ref_array( 'wp', array( &$this ) ); }

Что происходит в коде, описано в коде. Так вот, фильтр request срабатывает в конце метода WP::parse_request() и позволяет изменить свойство WP::query_vars, которое содержит переменные запроса используемые в методе WP::query_posts(), который в свою очередь получает записи.

Другой фильтр: parse_request - расширенная копия фильтра request

do_action_ref_array( 'parse_request', array( &$this ) );

Только он передает весь класс WP по ссылке и через него мы можем изменить не только переменную класса $query_vars, но и другие переменные. Хотя, как правило, нам нужно менять именно переменную $query_vars.

Еще одни фильтр: pre_get_posts - аналог фильтра request

Фильтр pre_get_posts .

pre_get_posts срабатывает абсолютно для всех запросов, не только для основного. Он срабатывает всякий раз когда вызывается функция get_posts() , query_posts() или WP_Query .

Для основного запроса (из кода выше) он срабатывает во время вызова метода WP::query_posts(), т.е. после фильтра request.

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

add_filter( 'request', 'filter_function_name_6548' ); function filter_function_name_6548( $query_vars ) { // Фильтр... return $query_vars; } $query_vars(массив) Параметры запроса, которые нужно изменить (отфильтровать).

Примеры

#1 Изменим URL рубрики

Допустим, у нас есть рубрика /category/cars/ и нам нужно чтобы по URL /category/cars/super-cars/ открывалась все та же рубрика /category/cars/.

add_filter( 'request', 'my_request' ); function my_request( $query_vars ){ $request = urldecode($_SERVER['REQUEST_URI']); if( $request == '/category/cars/super-cars/' ){ $query_vars['category_name'] = 'cars'; } return $query_vars; }

#2 Где какие параметры установлены

// На главной: `wptest.ru` Array ( ) // Страница записи: http://wptest.ru/my_post_name/ Array ( [page] => [name] => my_post_name ) // Страница постоянной страницы: http://wptest.ru/my_page/ Array ( [page] => [pagename] => my_page ) // На странице рубрики: `wptest.ru/category/cars/` Array ( [category_name] => uncategorized ) // Страница метки: http://wptest.ru/tag/eshhe-odna-metka/ Array ( [tag] => eshhe-odna-metka ) // Страница автора: http://wptest.ru/author/admin Array ( [author_name] => admin ) // Архив даты: http://wptest.ru/2016/10/08/ Array ( [year] => 2016 [monthnum] => 10 [day] => 08 )

#3 Изменение адреса RSS ленты на любое другое

Можно создать любой фид, например atom. Для этого создаем страницу и меняем её запрос. В этом пример страница называется 'feed-yandex-zen'.

add_filter( 'request', 'zen_url_replace' ); function zen_url_replace( $query_vars ) { if ( isset( $query_vars['pagename'] ) && $query_vars['pagename'] == 'feed-yandex-zen' ) { unset( $query_vars ); $query_vars['feed'] = 'zen'; } return $query_vars; }

#4 Пагинация для постоянной страницы с ярлыком category

Изменяет запрос, чтобы работала пагинация на странице category. Страница (page) category должна быть создана в админке и указана в настройках чтения, как "Страница записей".

В шаблоне страницы должен быть стандартный цикл ВП.

/** * Изменяет запрос, чтобы работала пагинация на странице category. * * Страница (page) category должна быть создана в админке * и указана в настройках чтения, как "Страница записей" * * $param array $query_vars * * @return array */ add_filter( 'request', function ( $query_vars ) { if ( isset( $query_vars['category_name'] ) ) { $page = explode( '/', $query_vars['category_name'] ); if ( $page[0] == 'page' ) { $paged = isset( $page[1] ) && is_numeric( $page[1] ) ? (int) $page[1] : 0; $query_vars['page'] = ''; $query_vars['pagename'] = 'category'; $query_vars['paged'] = $paged; unset( $query_vars['category_name'] ); } } return $query_vars; } );

#5 Функционал "Показать записи" на указанной статической странице

add_filter( 'request', function ( $query_vars ) { $page_id = 484; $page_slug = 'all-articles'; if ( isset( $query_vars['pagename'] ) && $query_vars['pagename'] === $page_slug ) { add_filter( "pre_option_page_for_posts", function () { return $page_id; } ); } return $query_vars; } );

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

... foreach ( (array) $this->private_query_vars as $var) { if ( isset($this->extra_query_vars[$var]) ) $this->query_vars[$var] = $this->extra_query_vars[$var]; } if ( isset($error) ) $this->query_vars['error'] = $error; /** * Filters the array of parsed query variables. * * @since 2.1.0 * * @param array $query_vars The array of requested query variables. */ $this->query_vars = apply_filters( 'request', $this->query_vars ); /** * Fires once all query variables for the current request have been parsed. * * @since 2.1.0 * * @param WP $this Current WordPress environment instance (passed by reference). */ do_action_ref_array( 'parse_request', array( &$this ) ); } /** * Sends additional HTTP headers for caching, content type, etc. * * Sets the Content-Type header. Sets the 'error' status (if passed) and optionally exits. ...
Карта
rss