当管理页面URL中有“/admin.php?page=”时,如何将一个管理URL重定向到另一个管理URL?

时间:2017-10-24 作者:user2461674

以下代码(来自here, 中间部分删掉)允许我将登陆WP admin中某个页面的用户重定向到另一个管理页面。。。


function admin_redirects() {
    global $pagenow;

    /* Redirect Customizer to Theme options */
    if($pagenow == \'customize.php\'){
        wp_redirect(admin_url(\'/admin.php?page=theme_options\', \'http\'), 301);
        exit;
    }

}

add_action(\'admin_init\', \'admin_redirects\');
它工作得很好。。。对于某些页面。问题是,对于使用URL结构(如“admin.php?page=example options”)生成的页面,我无法获得重定向示例选项字符串只是我正在开发的一个插件,但我想你已经明白了。在这一点上,我尝试了很多变化和其他事情,但都没有奏效。我错过什么了吗?

1 个回复
SO网友:Celso Bessa

我认为通过使用[get_current_screen()][1] 并从中读取属性WP_Screen 根据需要返回对象。就你而言,我想你需要$screen->base 或者也许$screen->id. 根据WordPress Codex:

id(字符串)屏幕的唯一id

base(string)屏幕的基本类型。例如,对于页面“post new”。php“基础是”post“。

例如,Yoast SEO仪表板位于admin上。php?页面=wpseo\\u仪表板和$screen->base property 对于此页为\'toplevel_page_wpseo_dashboard\'

下面是我几周前工作的一个例子。

/**
 * Disallow Admin pages for non-superadmin users on current_screen hook.
 * A fallback for when restricting access is not possible by manage_admin_access_on_init
 *
 * @since    0.1.0
 */
public function wpse_283875_manage_admin_access_on_screen() {
    // a list of restricted pages base properties from get_current_screen
    $restricted_screens = array(
        \'formularios_page_gf_help\',
        \'toplevel_page_genesis\',
        \'genesis_page_genesis-translations\',
        \'genesis_page_genesis-import-export\',
        \'genesis_page_genesis-simple-edits\',
        \'media_page_wp-smush-bulk\',
    );
    // get current screen
    $screen = get_current_screen();
    // if there\'s no $screen object, we are in customizer, bail out
    if ( is_null($screen) ){
        return;
    }
    // get screen->base
    $screen_base = $screen->base;

    // compare screen->base with each restricted screen
    foreach ($restricted_screens as $restricted_screen) {


        // if user can\'t manage network and screen base is restricted
        if (!current_user_can(\'manage_network\') && $screen_base == $restricted_screen) {
            //get out!
            wp_redirect(admin_url());
            // stop execution
            exit;
        }

    }
}
// hook to current_screen action with priority 5 to execut ASAP
add_action(\'current_screen\',\'manage_admin_access_on_screen\', 5);
如果需要检查screen对象,可以在开发环境中使用类似的内容并阅读HTML源代码:

function debug_admin_screen(){
    $screen = get_current_screen();
    echo \'<!--<pre>\' . print_r($screen, TRUE) . \'</pre>-->\';
}
add_action(\'current_screen\', \'debug_admin_screen\', 100);

结束

相关推荐