Как создать страницу плагина налету

Этот пример показывает как создать страницу для плагина налету. За вывод такой страницы будет отвечать файл шаблона, который мы укажем сами. И для такой страницы не нужно создавать страницу в админ-панели.

Конечную точку будем добавлять для главной страницы.

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

Эта заметка встроена в: add_rewrite_endpoint()