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 ); }