Ошибка wp_redirect() в пользовательском плагине [закрыто]

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

Я написал этот скрипт для обработки переключения тем около четырех лет назад. После обновления до WordPress 4.8 он перестал работать и выдает следующую ошибку:

Фатальная ошибка: вызов несуществующей функции wp_redirect() в /mnt/stor1-wc1-dfw1/388438/795069/www.flagstaffarizona.org/web/content/wp-content/plugins/custom-theme-switcher/custom-theme-switcher.php на строке 50

У кого-нибудь есть идеи, что может вызывать это? Я попробовал отключить все плагины, кроме этого, и ошибка все равно возникает.

<?php
/*
Plugin Name: Custom Theme Switcher
Description: Handles Mobile Theme Switching
Version: 1.0.1
*/

add_filter( 'template', 'custom_theme_redirect' );
add_filter( 'option_template', 'custom_theme_redirect' );
add_filter( 'option_stylesheet', 'custom_theme_redirect' );

function custom_get_subdomain() {
$subdomain = "";
if (!empty($_SERVER['HTTP_HOST'])) {
    $host_tokens = explode(".", $_SERVER['HTTP_HOST']);
    if (!empty($host_tokens)) {
        return strval($host_tokens[0]);
    }   
}
return $subdomain;
}


function custom_theme_redirect($theme) {
if (!is_admin()) {
    if (isset($_GET['mobile'])) {
        setcookie("mobile", true, time()+1, "https://wordpress.stackexchange.com/", CUSTOM_ROOT_DOMAIN);
        setcookie("nomobile", false, time()-1, "https://wordpress.stackexchange.com/", CUSTOM_ROOT_DOMAIN);
        $_COOKIE['mobile'] = true;
        $_COOKIE['nomobile'] = false;
    }
    if (DOMAIN_CURRENT_SITE == CUSTOM_MOBILE_DOMAIN || isset($_COOKIE['mobile'])) {
        if (isset($_GET['nomobile'])) {
            setcookie("mobile", false, time()-1, "https://wordpress.stackexchange.com/", CUSTOM_ROOT_DOMAIN);
            setcookie("nomobile", true, time()+1, "https://wordpress.stackexchange.com/", CUSTOM_ROOT_DOMAIN);
            wp_redirect('http://'.CUSTOM_MASTER_DOMAIN.$_SERVER['REQUEST_URI']);
            exit;
        }
        $theme="custom-mobile";
    } else if (DOMAIN_CURRENT_SITE == CUSTOM_MASTER_DOMAIN) {
        include_once("Mobile_Detect.php");
        $detect = new Mobile_Detect;
        if (CUSTOM_AUTO_MOBILE_REDIRECT && $detect->isMobile() && !$detect->isTablet()) {

            if (!isset($_COOKIE['nomobile']) || !$_COOKIE['nomobile']) {
                wp_redirect('http://'.CUSTOM_MOBILE_DOMAIN.$_SERVER['REQUEST_URI']);
                exit;
            }
        }
    }

}
return $theme;
}

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

Чтобы разобраться с проблемой, связанной с использованием функции wp_redirect() в вашем плагине, необходимо понимать, как правильно использовать эту функцию в контексте WordPress и какие изменения могли повлиять на ее работу после обновления до версии WordPress 4.8.

Теория (Theory):

Функция wp_redirect() является встроенной функцией WordPress, используемой для перенаправления пользователя на другой URL. Однако для ее корректной работы важно, чтобы она была вызвана после полной загрузки ядра WordPress, включая подключение всех необходимых файлов. Эта функция обычно вызывается после инициализации ядра, но до отправки каких-либо заголовков, поскольку манипуляция HTTP-заголовками после начала вывода HTML приводит к ошибкам.

Пример (Example):

В коде вашего плагина ошибка возникает в строке, где используется wp_redirect() для перенаправления пользователя в зависимости от его устройства (мобильное или нет). Фатальная ошибка указывает на то, что функция не определена, что может происходить из-за вызова wp_redirect() до того, как WordPress инициализировал все необходимые компоненты.

Применение (Application):

С учетом предоставленной информации, есть несколько возможных решений:

  1. Правильный порядок подключения: Убедитесь, что ваш код исполняется в правильный момент цикла загрузки WordPress. Попробуйте пересмотреть использование хуков, таких как init. Например:

    add_action('init', 'setup_custom_theme_redirect');
    
    function setup_custom_theme_redirect() {
       add_filter('template', 'custom_theme_redirect');
       add_filter('option_template', 'custom_theme_redirect');
       add_filter('option_stylesheet', 'custom_theme_redirect');
    }
    
    function custom_theme_redirect($theme) {
       // Ваша текущая реализация функции
    }
  2. Проверка подключения ядра: Убедитесь, что ваш файл плагина имеет доступ к функциям WordPress. Это может быть достигнуто правильным подключением плагина через стандартные методы WordPress.

  3. Обновление библиотеки Mobile_Detect: Убедитесь, что используемая библиотека Mobile_Detect совместима с вашей текущей версией WordPress и правильно подключена.

  4. Проверка конфигурации доменов: Перекрестная проверка любого пользовательского кода, который влияет на доменные переменные (CUSTOM_MOBILE_DOMAIN, CUSTOM_MASTER_DOMAIN) и их использование в контексте функции wp_redirect().

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

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

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