当我使用wp_redirect()函数时,也可能重定向

时间:2017-09-29 14:21:50

标签: wordpress

我正在使用OOP方法开发一个插件,但我遇到了many redirects问题。

在插件激活后,如果某些条件不满足,我希望我的插件重定向到页面。我一直收到To many redirects...错误消息。

我的代码如下所示:

if (! defined('WPINC')) die;
if (! class_exists('AwesomePlugin')) {

    class AwesomePlugin {
        public function __construct(){
            //Register admin menus
            add_action('admin_menu', [$this, add_menu]);

            //Init plugin
            add_action('admin_init', [$this, 'init_plugin']);
        }

        /**
         *
         * Init plugin
         */
        public function init_plugin(){
            if(!isset(get_option("some_option"))){
                wp_redirect("admin.php?page=some-page"); exit; //This gives too many redirects
            }
            wp_redirect('admin.php?page=dashboard'); exit;
        }

        /**
         * Add menu and submenu items 
         */
        public function add_menu(){
            add_menu_page( 
                'Dashboard', 'Dashboard', 'manage_options', 'dashboard', 
                [__CLASS__, 'load_dashboard_view'], 
                plugins_url('logo.png', __FILE__)
            );

            add_submenu_page(
                '', 'Signup page', 'Signup page', 'manage_options', 
                'sign-up', [__CLASS__, 'load_signup_view']
            ); 
        }  

        /**
         * Dashboard page 
         */
        public function load_dashboard_view(){
            include(plugin_dir_path(__FILE__) . 'dashboard.php');
        } 

        /**
         * Signup page
         */
        public function load_signup_view(){
            include(plugin_dir_path(__FILE__) . 'signup.php');
        }           
    } 

    AwesomePlugin()   
}

我错过了什么?

编辑:据我所知,无论我正在加载哪个页面,init_plugin函数都会继续触发。因此,它会将用户重定向到注册,从而导致许多重定向错误消息。我该如何解决这个问题?

2 个答案:

答案 0 :(得分:0)

我认为当您最初使用上述代码调用文件时会导致此问题。

您应该使用include_once('path-to-your-file/your-php-file.php')

调用您的代码所在的文件

答案 1 :(得分:0)

非常简单。每次启动管理员时都会检查一下,确切地说是/ wp-admin和(我认为)每个AJAX调用的每一页。 如果您只需要在插件管理菜单的某个页面上进行检查,则可以使用$current_screen全局或get_current_screen()并使用对象的ID属性来检查当前页面是否为你想在哪里办理支票。您可以使用Query Monitor(在管理员屏幕下)查看您的页面确切ID以及调试时可能会发现的许多其他内容。