Позволяет полностью отключить обработку текущего запроса.
Поведение хука было улучшено в версии 6.0, смотрите заметку.
Хук срабатывает в функции WP::parse_request(), и если он вернет 'false', то функция не будет парсить текущие параметры запроса и также вернет 'false'. В свою очередь это отменит основной запрос в БД, обработку 404 страницы и установку глобальных параметров запроса:
class WP { // ... public function main( $query_args = '' ) { $this->init(); $parsed = $this->parse_request( $query_args ); $this->send_headers(); if ( $parsed ) { $this->query_posts(); $this->handle_404(); $this->register_globals(); } do_action_ref_array( 'wp', array( &$this ) ); } // ... }
До WP 6.0 разработчики плагинов и тем использовали этот фильтр для отключения дефолтного парсинга параметров запроса и устанавливали свои параметры запроса. При этом все равно выполнялись ненужные запросы на получение постов и проверку 404 страниц. Как следствие, делались ненужные SQL-запросы.
Использование
add_filter( 'do_parse_request', 'wp_kama_do_parse_request_filter', 10, 3 ); /** * Function for `do_parse_request` filter-hook. * * @param bool $bool Whether or not to parse the request. * @param WP $wp Current WordPress environment instance. * @param array|string $extra_query_vars Extra passed query variables. * * @return bool */ function wp_kama_do_parse_request_filter( $bool, $wp, $extra_query_vars ){ // filter... return $bool; }
- $bool(true|false)
- Разбирать или нет запрос.
По умолчанию: true - $wp(WP)
- Текущий экземпляр окружения WordPress - класс WP.
- $extra_query_vars(массив|строка)
- Дополнительные переменные запроса.
Примеры
add_filter( 'do_parse_request', '__return_false' );
После установки такого хука:
- Никак не будет обрабатываться текущий URL (правила перезаписи, ЧПУ). Соответственно, никакие параметры запроса WP не будут установлены - см. get_query_var().
- Базовый запрос WP не будет сделан.
- Любой УРЛ сайта будет возвращать 200 ответ и будет вести на файл шаблона
index.php
. - Не сработают хуки request, parse_request.
Таким образом, будет отключено почти что все что WP делает с запросом на фронте.
После такого отключения нужно будет самостоятельно обработать URL, вернуть 404 статус (если нужно) и определить файл шаблона.
Такое поведение может пригодится, когда нужно кардинально по-другому обработать URL.
Если нужно полностью отключить обработку текущего URL и сделать свою обработку, то за основу можно взять такой код:
add_filter( 'do_parse_request', 'wp_kama_add_custom_query', 10, 3 ); function wp_kama_add_custom_query( $do_parse, $wp, $extra_query_vars ) { if ( str_starts_with( $_SERVER['REQUEST_URI'], '/myroute' ) ) { add_action( 'wp', 'my_parse_request' ); return false; } return $do_parse; } function my_parse_request( $wp ){ // делаем что нужно // die( print_r( $wp ) ); }
После установки этого кода при переходе на URL https://example.com/myroute/foo...
WP не будет никак обрабатывать URL и мы сможем это сделать самостоятельно в нашей функции my_parse_request().
Список изменений
Где вызывается хук
Где используется хук в WordPress
Использование не найдено.