add_rewrite_endpoint() WP 2.1.0

Додає кінцеву точку, наприклад, /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()
1 раз – 0.000001 сек
(швидкість світла) | 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_AUTHORS
  • EP_ALL– всього одразу: EP_PERMALINK | EP_ATTACHMENT | EP_ROOT | EP_COMMENTS | EP_SEARCH | EP_PAGES | EP_ALL_ARCHIVES
$query_var
(рядок/логічний)
Назва змінної запиту для цієї кінцевої точки за замовчуванням дорівнює назві кінцевої точки (параметр $name). Вкажіть false, щоб функція не додавала змінного запиту.


Типово: true

Приклади

0

#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

0

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

0

#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() WP 6.0.2

function add_rewrite_endpoint( $name, $places, $query_var = true ) {
	global $wp_rewrite;
	$wp_rewrite->add_endpoint( $name, $places, $query_var );
}

Залишити відповідь

Ваша e-mail адреса не оприлюднюватиметься. Обов’язкові поля позначені *