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

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

В этой статье мы рассмотрим, как создать страницу для плагина "на лету" (без создания реальной страницы в базе данных). Вывод такой страницы будет осуществляться с помощью нашего PHP-шаблона, и нам не нужно будет создавать страницу в админ-панели.

Шаг 1: Добавление конечной точки

Сначала нужно добавить конечную точку (endpoint) для главной страницы плагина. Конечная точка позволяет WordPress распознавать URL, который мы будем использовать.

add_action( 'init', 'add_my_endpoint' );

function add_my_endpoint(){
    add_rewrite_endpoint( 'myplug-page', EP_ROOT );
}

Пояснение

  • add_action() — функция, которая добавляет обработчик события. В данном случае мы добавляем обработчик для события init, которое возникает при инициализации WordPress.
  • add_rewrite_endpoint() — функция, которая добавляет новую конечную точку для перезаписи URL. Теперь мы можем использовать адреса вида:
    • site.com/myplug-page
    • site.com/myplug-page/my-query_parameter

Шаг 2: Оптимизация запроса

Для такой страницы полезно сбросить параметры основного запроса, чтобы не расходовать ресурсы на запрос, который нам не нужен. По умолчанию, запрос получает все последние записи.

Мы можем сделать это следующим образом:

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

Пояснение

  • add_filter() — функция, позволяющая модифицировать данные (в данном случае SQL-запросы).
  • В функции skip_main_query_for_myplugpage() мы проверяем, является ли текущий запрос основным и связанным с нашей новой конечной точкой. Если это так, мы ограничиваем результаты запроса.

Шаг 3: Создание шаблона страницы

На странице, такой как 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;
}

Пояснение

  • template_include — это хук, который позволяет нам подключать нужный шаблон страницы.
  • В функции myplugpage_template_file() мы проверяем, если текущий запрос соответствует нашей конечной точке и устанавливаем в $template путь к нашему шаблону.

Заключение

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

Leave a Reply

Ваш адрес email не будет опубликован. Обязательные поля помечены *