Функция add_rewrite_endpoint()
в WordPress предоставляет мощный инструмент для добавления новых конечных точек (endpoints) к URL вашего сайта. Это позволяет расширить функциональность вашего сайта, добавляя специфичные обработчики запросов. В данной статье мы рассмотрим, как использовать эту функцию с примерами и пояснениями.
add_rewrite_endpoint( string $name, int $places, string|bool $query_var = true )
- $name (string, обязательный): Название конечной точки.
- $places (int, обязательный): Маска мест, определяющая, где будет добавлена конечная точка. Используйте константы EP_*.
- $query_var (string|bool, необязательный): Имя переменной запроса, соответствующей этой конечной точке. По умолчанию совпадает с $name.
Что такое add_rewrite_endpoint()
?
Функция add_rewrite_endpoint()
создает дополнительные правила перезаписи для заданных мест (places), что позволяет создавать дополнительные URL, такие как /my-endpoint/
. Это может быть полезно для различных целей, включая обработку AJAX-запросов, обработку форм и альтернативные уведомления.
Доступные значения для $places
- EP_ALL: Маска для всех типов ссылок.
- EP_NONE: Маска по умолчанию, не относится ни к чему.
- EP_ALL_ARCHIVES: Маска для всех архивов (эквивалентно
EP_DATE | EP_YEAR | EP_MONTH | EP_DAY | EP_CATEGORIES | EP_TAGS | EP_AUTHORS
). - EP_ATTACHMENT: Маска для вложений.
- EP_AUTHORS: Маска для авторов.
- EP_CATEGORIES: Маска для категорий.
- EP_COMMENTS: Маска для комментариев.
- EP_DATE: Маска для даты.
- EP_DAY: Маска для дней.
- EP_MONTH: Маска для месяцев.
- EP_PAGES: Маска для страниц.
- EP_PERMALINK: Маска для постоянных ссылок.
- EP_ROOT: Маска для корня сайта.
- EP_SEARCH: Маска для поисковых запросов.
- EP_TAGS: Маска для меток.
- EP_YEAR: Маска для лет.
Пример 1: Добавление конечной точки для постов и страниц
В этом примере мы добавим конечную точку api
для всех постов и страниц.
add_action( 'init', 'add_api_endpoint' );
function add_api_endpoint() {
add_rewrite_endpoint( 'api', EP_PERMALINK | EP_PAGES );
}
После добавления конечной точки мы можем обработать запросы к ней через хук template_include
:
add_action( 'template_include', 'handle_api_request' );
function handle_api_request( $template ) {
global $wp_query;
// Проверяем, если это запрос для API
if ( isset( $wp_query->query_vars['api'] ) && is_singular() ) {
$template = __DIR__ . '/api-template.php'; // Подключаем нужный шаблон
}
return $template;
}
Пример 2: Создание страницы для плагина
В этом примере мы создадим конечную точку myplugin
для главной страницы.
add_action( 'init', 'add_myplugin_endpoint' );
function add_myplugin_endpoint() {
add_rewrite_endpoint( 'myplugin', EP_ROOT );
}
Теперь, чтобы избежать ненужных запросов, можно сбросить параметры основного запроса:
add_filter( 'posts_clauses_request', 'skip_main_query_for_myplugin', 10, 2 );
function skip_main_query_for_myplugin( $pieces, $wp_query ) {
if ( isset( $wp_query->query['myplugin'] ) && $wp_query->is_main_query() ) {
$pieces['where'] = ' AND ID = 0'; // Урезаем основной запрос
}
return $pieces;
}
Пример 3: Отдельная страница для комментариев
Можно также создать отдельную конечную точку для обработки комментариев:
add_action( 'init', 'add_comments_endpoint' );
function add_comments_endpoint() {
add_rewrite_endpoint( 'comments', EP_PERMALINK );
}
Теперь для обработки запросов:
add_action( 'template_include', 'handle_comments_request' );
function handle_comments_request( $template ) {
global $wp_query;
if ( isset( $wp_query->query_vars['comments'] ) ) {
$template = __DIR__ . '/comments-template.php';
}
return $template;
}
Заключение
Функция add_rewrite_endpoint()
позволяет легко добавлять новые конечные точки к вашему сайту WordPress, что открывает возможности для создания более сложных и функциональных приложений. Не забывайте сбрасывать правила перезаписи, используя flush_rewrite_rules()
, чтобы изменения вступили в силу.