Хук do_parse_request
в WordPress позволяет полностью отключить стандартную обработку запроса, что может быть полезно для создания кастомных маршрутов и обработки URL. Этот хук применяется в методе WP::parse_request()
и, если вернуть false
, WordPress не будет выполнять типичные операции, такие как парсинг параметров запроса, определение шаблона страницы и проверку на 404 ошибки.
apply_filters( ‘do_parse_request’, bool $bool, WP $wp, array|string $extra_query_vars )
Хук do_parse_request
позволяет определить, должен ли WordPress парсить текущий запрос. Если хук возвращает false
, WordPress пропускает стандартную обработку, и разработчик получает возможность полностью контролировать, какие действия предпринять в ответ на запрос.
Параметры
$bool
(булевое): Указывает, нужно ли парсить запрос. По умолчанию —true
.$wp
(объект WP): Текущий экземпляр среды WordPress, представляющий собой объект классаWP
.$extra_query_vars
(массив или строка): Дополнительные переменные запроса.
Базовый пример использования
Чтобы отключить парсинг запроса, достаточно установить значение false
через хук:
add_filter( 'do_parse_request', '__return_false' );
С установкой этого фильтра WordPress прекратит разбирать текущий URL и не будет устанавливать параметры запроса. Например:
- WordPress не обработает правила перезаписи и не установит параметры запроса (например,
get_query_var()
вернет пустое значение). - Основной запрос в базу данных не выполнится, что позволит избежать ненужных SQL-запросов.
- Любой URL будет возвращать 200 статус, и все запросы будут направлены к шаблону
index.php
.
Это полезно, когда вы хотите полностью изменить стандартное поведение WordPress и обрабатывать URL самостоятельно.
Условное отключение обработки для определенного маршрута
Если нужно отключить стандартную обработку только для определенного маршрута, можно использовать дополнительные условия в фильтре. В следующем примере мы проверяем, начинается ли URL с /custom-route
, и при положительном результате останавливаем обработку WordPress.
add_filter( 'do_parse_request', 'custom_route_handler', 10, 3 );
function custom_route_handler( $do_parse, $wp, $extra_query_vars ) {
if ( str_starts_with( $_SERVER['REQUEST_URI'], '/custom-route' ) ) {
add_action( 'wp', 'handle_custom_route' );
return false; // Отключаем стандартный парсинг запроса
}
return $do_parse;
}
function handle_custom_route( $wp ) {
// Ваша логика для маршрута
echo 'Custom route processing...';
exit;
}
В этом примере, если URL начинается с /custom-route
, стандартный парсинг запроса будет отключен, и управление передается функции handle_custom_route
, которая выводит текст на экран.
Добавление кастомного запроса для определенного маршрута
Этот пример демонстрирует, как можно добавить кастомные параметры в запрос, обработав их самостоятельно, и вернуть статус 404 для несуществующих маршрутов.
add_filter( 'do_parse_request', 'custom_query_for_route', 10, 3 );
function custom_query_for_route( $do_parse, $wp, $extra_query_vars ) {
if ( preg_match( '#^/my-custom-path/([^/]+)/?$#', $_SERVER['REQUEST_URI'], $matches ) ) {
add_action( 'wp', function() use ( $matches ) {
// Обработка кастомного маршрута
$param = sanitize_text_field( $matches[1] );
if ( $param === 'allowed' ) {
echo "Parameter is allowed: $param";
} else {
// Если параметр не разрешен, устанавливаем 404
global $wp_query;
$wp_query->set_404();
status_header( 404 );
get_template_part( 404 );
}
exit;
});
return false;
}
return $do_parse;
}
Этот код проверяет, соответствует ли URL шаблону /my-custom-path/some-value
, и если да, выполняет дополнительные действия. Если значение параметра не соответствует ожидаемому, вызывается шаблон 404 для ошибки «Страница не найдена».
Пример #4: Включение кастомных переменных запроса
С помощью $extra_query_vars
можно передавать дополнительные переменные и использовать их для настройки запроса.
add_filter( 'do_parse_request', 'add_extra_query_vars', 10, 3 );
function add_extra_query_vars( $do_parse, $wp, $extra_query_vars ) {
if ( isset( $extra_query_vars['custom_param'] ) ) {
add_action( 'wp', function() use ( $extra_query_vars ) {
// Обработка кастомного параметра
echo 'Custom parameter: ' . esc_html( $extra_query_vars['custom_param'] );
exit;
});
return false;
}
return $do_parse;
}
В этом примере мы добавляем поддержку дополнительного параметра custom_param
, который обрабатывается отдельно. Такой подход позволяет гибко управлять запросами и использовать дополнительные параметры для обработки конкретных маршрутов.
Заключение
Хук do_parse_request
предоставляет большие возможности для кастомизации поведения WordPress при обработке запросов. Он позволяет отключить стандартную обработку URL и создать свои правила для маршрутов и переменных запроса. Это может быть полезно для создания уникального функционала, который требует полного контроля над URL и запросами, и дает возможность оптимизировать запросы к базе данных, избегая лишних SQL-запросов.