add_rewrite_endpoint()
Додає кінцеву точку, наприклад, /trackback/ . Додаються додаткові правила перезапису ЧПК із зазначеною кінцевою точкою.
При додаванні кінцевої точки в ЧПУ додаються додаткові правила перезапису URL для кожного типу URL вказаного в другому параметрі $places . Це може бути пост, сторінка, рубрика, автор, пошук. Наприклад:
add_rewrite_endpoint( 'json', EP_PERMALINK | EP_PAGES );
Додасть нове правило, що закінчується на json(/(.*))?/?$кожній структурі ЧПУ, яка описує ЧПУ постів або постійних сторінок. Підсумковий параметр запиту буде виглядати так: [базовые параметры]&json=$match, де $match – це частина ЧПК, що йде за кінцевою точкою. Наприклад, якщо посилання таке: [permalink]/json/foo/$match буде foo, а запит такий [параметры permalink]?json=foo.
Функція також додає назву кінцевої точки ( з прикладу json ) до білого списку змінних запиту.
Якщо вказати параметр $places, переконайтеся, що ви використовуєте робочу константу типу EP_*(можна використовувати кілька параметрів через |).
Для того, щоб зміни застосувалися, потрібно скинути правила перезапису, за допомогою flush_rewrite_rules() при активації/деактивації плагіна. Або для скидання можна просто відвідати сторінку Установки > Постійні посилання (Settings > Permalinks).
Викликати функцію під час події init . Див. Приклади.
WP_Rewrite::add_endpoint()
(швидкість світла) | 50000 разів – 0.07 сек
(швидкість світла) |
PHP 7.3.20, WP 5.5.3
Хуків немає.
Повертає
null. Нічого.
Використання
add_rewrite_endpoint( $name, $places, $query_var );
- $name
(рядок) (обов’язковий) - Назва кінцевої точки.
- $places
(число) (обов’язковий) Місце куди кінцева точка має бути додана. Назви місць – маски кінцевих точок для:
EP_NONE– за дефолтом – не належить ні до чогоEP_PERMALINK– постійних посилань постівEP_ATTACHMENT– ВкладеньEP_DATE– датиEP_YEAR– рокуEP_MONTH– МісяцяEP_DAY– ДняEP_ROOT– кореня (root)EP_COMMENTS– коментарівEP_SEARCH– пошукуEP_CATEGORIES– рубрикEP_TAGS– мітокEP_AUTHORS– АвторівEP_PAGES– постійних сторінокEP_ALL_ARCHIVES– архівів: EP_DATE EP_YEAR | EP_MONTH | EP_DAY | EP_CATEGORIES | EP_TAGS | EP_AUTHORSEP_ALL– всього одразу: EP_PERMALINK | EP_ATTACHMENT | EP_ROOT | EP_COMMENTS | EP_SEARCH | EP_PAGES | EP_ALL_ARCHIVES
- $query_var
(рядок/логічний) - Назва змінної запиту для цієї кінцевої точки за замовчуванням дорівнює назві кінцевої точки (параметр $name). Вкажіть false, щоб функція не додавала змінного запиту.
Типово: true
Приклади
#1 Додамо кінцеву точку для ЧПУ постів та сторінок
add_action( 'init', 'add_my_endpoint');
function add_my_endpoint() {
add_rewrite_endpoint( 'json', EP_PERMALINK | EP_PAGES );
}Тепер нам потрібно обробити URL – призначити йому файл шаблону, який відповідатиме за висновок. Це можна зробити за допомогою хука template_include .
add_action( 'template_include', 'makeplugins_json_template_include' );
function makeplugins_json_template_include( $template ) {
global $wp_query;
// if this is a request for json or singular object then bail
// include custom template
if ( isset( $wp_query->query_vars['json'] ) && is_singular() ){
$template = __DIR__ . '/json-template.php';
}
return $template;
}
Дивіться приклад для плагіна: https://gist.github.com/joncave/2891111
#2 Додамо ЧПУ для сторінки плагіна у фронті
Цей приклад показує, як створити сторінку для плагіна нальоту. За виведення такої сторінки відповідатиме файл шаблону, який ми зазначимо самі. І для такої сторінки не потрібно створювати сторінку в адмін-панелі.
Кінцеву точку додаватимемо для головної сторінки.
add_action( 'init', 'add_my_endpoint');
function add_my_endpoint(){
add_rewrite_endpoint( 'myplug-page', EP_ROOT );
}Тепер, потрібно скинути ЧПК і у нас буде працювати URL виду:
example.com/myplug-page.- або
example.com/myplug-page/параметр_запроса.
Для такої сторінки добре скинути параметри основного запиту, щоб не витрачати ресурси на запит, який ми все одно не використовуємо. У разі запит отримує всі останні записи.
Зробити це можна наприклад так:
// урізаємо основний запит для головної сторінки сайту, щоб він не створював непотрібне навантаження.
add_filter( 'posts_clauses_request', 'skip_main_query_for_myplugpage', 10, 2);
function skip_main_query_for_myplugpage( $pieces, $wp_query ){
if( isset( $wp_query->query['myplug-page'] ) && $wp_query->is_main_query() ){
$pieces['where'] = 'AND ID = 0';
}
return $pieces;
}Створюємо шаблон сторінки
На сторінці типу is_front_page() ми можемо отримати параметр запиту так:
$var = get_query_var( 'myplug-page');
Обробити запит та підключити файл шаблону можна через хук template_include .
add_action( 'template_include', 'myplugpage_template_file', 20);
function myplugpage_template_file( $template ) {
global $wp_query;
// наш запит
if ( isset( $wp_query->query['myplug-page'] ) ) {
$template = __DIR__ . '/path/to/myplug-page-template.php';
}
return $template;
}
#3 Окрема сторінка для коментарів запису
Код дивіться у нотатці .
нотатки
- Global. WP_Rewrite. $wp_rewrite WordPress rewrite component.
список змін
| З версії 2.1.0 | Введено. |
| З версії 4.3.0 | Додана підтримка для skipping query var registration passing false to $query_var . |
Код add_rewrite_endpoint() add rewrite endpoint WP 6.0.2
function add_rewrite_endpoint( $name, $places, $query_var = true ) {
global $wp_rewrite;
$wp_rewrite->add_endpoint( $name, $places, $query_var );
}