wp_redirect на базе wp-admin и входа

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

ОБНОВЛЕНИЕ: Я провел еще исследование своей проблемы и более точно определил ее. Вопрос ниже значительно переписан с оригинала.


Я пытаюсь настроить плагин для перенаправления всех запросов страницы – фронтенд, админ, вход и т.д. – на дополнительную страницу проверки кода (целесообразность этого не обсуждается, это то, что хочет клиент). Исходя из функций, хуков и фильтров, которые мне нужно использовать, я определил, что самый ранний хук, к которому я могу привязать функцию перенаправления, это wp:

add_action('wp', 'cg_check_validation');

Функция проходит через некоторые проверки $_COOKIE и $_POST перед тем, как в конечном итоге:

wp_redirect(add_query_arg('validate-access', 1, $_SERVER['REQUEST_URI']));

Следующий фильтр и действие были настроены для обработки перенаправления:

add_filter('query_vars', 'cg_redirect_query_vars');

function cg_redirect_query_vars($query_vars)
{
    $query_vars[] = 'validate-access';
    return $query_vars;
}

add_action('parse_request', 'cg_redirect_parse_request');

function cg_redirect_parse_request(&$wp)
{
    // если наш пользовательский запрос на проверку доступа существует, загружаем наше представление плагина
    // затем завершаем скрипт
    if (array_key_exists('validate-access', $wp->query_vars)) {
        include(plugin_dir_path(__FILE__) . 'views/validate-access.php');
        exit();
    }
    return;
}

Перенаправление и проверка кода работает для ПОЧТИ каждой страницы, однако страница входа и базовая страница администрирования (/wp-admin/) не перенаправляются вообще. Что может быть причиной исключения этих страниц?

ИЗМЕНЕНИЕ: Еще одно обновление! Перенаправление РАБОТАЕТ ТОЛЬКО на админских страницах, у которых есть строка запроса. Например, перенаправление работает на wp-admin/edit.php?post_type=page, но не работает на /wp-admin/edit-comments.php. Хотя я идентифицировал проблему, я не ближе к ее решению — моё лучшее предположение заключается в том, что parse_request или query_vars не срабатывают на страницах без строк запроса?

Подключение к admin_init – это то, что вам нужно, для выполнения перенаправления внутри админа. Так что вам нужно обе – эта и хук к template_redirect для обработчика фронтенда.

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

Процесс перенаправления всех запросов на странице в WordPress: полное руководство

Введение
Создание плагина для перенаправления всех запросов на дополнительную страницу валидации кода — это задача, требующая тщательного подхода к обработке хуков WordPress. В данном ответе мы рассмотрим, как настроить перенаправление для всех страниц, включая административные, а также страницу входа в систему.

1. Определение проблемы

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

2. Решение: Использование хуков admin_init и template_redirect

Для обеспечения корректной работы перенаправления во всех частях сайта, следует использовать несколько хуков:

  • admin_init для административных страниц.
  • template_redirect для фронтенд-страниц.

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

3. Реализация

Вот пример реализации, который следует вашим требованиям:

// Пример перенаправления для админки
add_action('admin_init', 'cg_check_validation_admin');

function cg_check_validation_admin() {
    if (is_user_logged_in()){ // Проверка, что пользователь вошел в систему
        cg_check_validation();
    }
}

// Пример перенаправления для фронтенда
add_action('template_redirect', 'cg_check_validation');

function cg_check_validation() {
    // Проверка условий валидации
    if (!is_valid_request()) { // Предполагаемая функция валидации
        wp_redirect(add_query_arg('validate-access', 1, $_SERVER['REQUEST_URI']));
        exit();
    }
}

// Фильтрация переменных запроса
add_filter('query_vars', 'cg_redirect_query_vars');

function cg_redirect_query_vars($query_vars) {
    $query_vars[] = 'validate-access';
    return $query_vars;
}

// Парсинг запроса для обработки перенаправлений
add_action('parse_request', 'cg_redirect_parse_request');

function cg_redirect_parse_request(& $wp) {
    if (array_key_exists('validate-access', $wp->query_vars)) {
        include(plugin_dir_path(__FILE__) . 'views/validate-access.php');
        exit();
    }
    return;
}

4. Объяснение кода

  • admin_init: Этот хук вызывается на всех страницах админки. Если пользователь вошел в систему, будет проверка предоставленной функции cg_check_validation().
  • template_redirect: Этот хук обрабатывает запросы для всех фронтенд-страниц. Здесь опять же условие для валидации и редирект на страницу валидации.
  • query_vars и parse_request: Настройка кастомного параметра запроса и обработка этого параметра для отображения страницы валидации.

5. Заключение

Использование вышеуказанных хуков позволяет вам обеспечить стабильную работу переадресации для всех необходимых страниц вашего сайта. Следует учесть, что любые изменения в поведении или логике должны сопровождаться тщательным тестированием для предотвращения ненужных проблем с доступом. Также рекомендуется регулярно проверять обновления и изменения в API WordPress, так как они могут повлиять на ваш плагин.

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

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