Отображение обратного вызова конечной точки для пользовательского плагина

Вопрос или проблема

Я создаю плагин, который позволяет администраторам добавлять сотрудников в базу данных. Я создал функцию в файле класса моего плагина…

cp_libstaff_frontend_display()

…которая отображает таблицу каждого сотрудника в базе данных для пользователей на фронтенде. Эта функция привязана к короткому коду, который отображается по следующему URL:

mysite.com/librarywp/staff-directory 

Теперь я хотел бы сделать ссылку на имя каждого сотрудника, которая переводит пользователя на страницу с информацией только об этом сотруднике. Например,

mysite.com/librarywp/libstaff/1

Где ‘1’ — это ID сотрудника, чью индивидуальную страницу следует получить. Я создал конечную точку для этого следующим образом:

public static function cp_libstaff_add_rewrites(){
 add_rewrite_endpoint( 'libstaff', EP_PERMALINK );
}

public static function cp_libstaff_filter_request( $vars ){
  if( !isset( $vars['libstaff'] ) ) $vars['libstaff'] = true;
  return $vars;
}

public static function cp_libstaff_rewrite_catch_libstaff(){
  if( get_query_var( 'libstaff' ) ){

      echo 'WHAT NOW?';
      exit();
  }
}

add_action( 'init', array('Libstaff', 'cp_libstaff_add_rewrites') );
add_action( 'template_redirect', array('Libstaff', 'cp_libstaff_rewrite_catch_libstaff') );
add_filter( 'request', array('Libstaff', 'cp_libstaff_filter_request') );

После этого момента я совершенно запутался, как продвигаться с функцией обратного вызова. Должен ли быть создан пользовательский тип записи где-то здесь? Шаблон какого-либо рода?

Код в оригинальном вопросе был на правильном пути. Код ниже был взят из связанного руководства. В основном мне нужно было создать файл шаблона в моем плагине (я просто скопировал код из single.php из моей основной темы, чтобы использовать его как руководство в:

dirname( __FILE__ ) . '/staff-template.php'

Затем, когда выполняется template_redirect, он отображает этот шаблон. Это предполагает, конечно, что libstaff установлен как переменная запроса.

function cp_libstaff_rewrite_catch_libstaff() {
    global $wp_query;

    // если это не запрос json или единичный объект, то выходим
    if ( ! isset( $wp_query->query_vars['libstaff'] ) || ! is_singular() )
        return;

    // включаем пользовательский шаблон
    include dirname( __FILE__ ) . '/staff-template.php';
    exit;
}
add_action( 'template_redirect', 'cp_libstaff_rewrite_catch_libstaff' );

Ссылка на руководство:
https://make.wordpress.org/plugins/2012/06/07/rewrite-endpoints-api/

Ответ или решение

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

1. Создание Шаблона Данных Сотрудника

Вы уже упомянули о создании шаблона, и это действительно один из необходимых шагов. Вам нужно создать файл staff-template.php в директории вашего плагина, и этот файл должен будет обрабатывать отображение информации о конкретном сотруднике на основе его идентификатора.

Например, код в staff-template.php может выглядеть следующим образом:

<?php
// Получаем ID сотрудника из URL
$staff_id = get_query_var('libstaff');

// Запрашиваем информацию о сотруднике из базы данных
$staff_member = get_post($staff_id);

if ($staff_member) {
    // Отображение информации о сотруднике
    echo '<h1>' . esc_html($staff_member->post_title) . '</h1>';
    echo '<div>' . apply_filters('the_content', $staff_member->post_content) . '</div>';
} else {
    echo '<p>Сотрудник не найден.</p>';
}
?>

2. Обновление Обработчика Запроса

Ваша функция cp_libstaff_rewrite_catch_libstaff должна проверять, есть ли запрашиваемый сотрудник и затем включать созданный шаблон. Как вы уже начали, вам нужно убедиться, что libstaff правильно установлен как переменная запроса. Вот обновленная версия вашей функции:

function cp_libstaff_rewrite_catch_libstaff() {
    global $wp_query;

    // Проверяем, есть ли запрос на конечную точку libstaff и что это не стандартный запрос
    if ( isset( $wp_query->query_vars['libstaff'] ) && is_singular() ) {

        // Инклюдим кастомный шаблон сотрудников
        include dirname( __FILE__ ) . '/staff-template.php';
        exit;
    }
}

3. Обновление ЧПУ (Человеко-Понятные URL)

Не забудьте обновить Пермалинки после добавления маршрутов. Это важно, поскольку изменения в правилах перезаписи могут не вступить в силу до тех пор, пока не будет выполнено обновление.

4. Проверка Наличия Идентификатора Сотрудника

Важно убедиться, что идентификатор, переданный в URL, действительно соответствует идентификатору существующей записи сотрудника. Вы можете провести дополнительную проверку перед запросом информации о сотруднике.

5. Оптимизация и Чистота Кода

Стремитесь к тому, чтобы код оставался чистым и логически структурированным. Используйте функции WordPress для экранирования данных (например, esc_html(), esc_url()) для безопасности вашего приложения.

Заключение

Следуя выше приведённым шагам, вы сможете создать функциональный и безопасный endpoint для просмотра информации о каждом сотруднике. Убедитесь, что ваша реализация соответствует стандартам безопасности WordPress и обеспечивает хорошую пользовательскую эффективность.

Если у вас возникнут дополнительные вопросы или потребуется помощь, не стесняйтесь обращаться!

Оцените материал
Добавить комментарий

Капча загружается...