在 WordPress 裡把一些不想要除了 Admin 以外看到的項目做 Redirect

有些時候外掛的權限管理並不完全,因此仍然會造成客戶帳號可以存取一些頁面的狀況,此時我們可以另外撰寫一個程式碼片段來判斷是否為 Admin ,如果不是的狀況就將使用者導向其他頁面。

常見的狀況有 ACF 的欄位編輯頁面、WPML 的一些設定頁面...等。

範例:將 ACF 欄位編輯頁面導向到管理首頁

function gathering_design_current_screen( $current_screen ) {
    $user = wp_get_current_user();
    if(!in_array('administrator', $user->roles ) ) {
        if ($current_screen->post_type == 'acf-field-group') {
            wp_redirect(get_admin_url());
            die();
        }
}
add_action( 'current_screen', 'gathering_design_current_screen' );

範例:將 WPML 的一些頁面導向管理首頁

function gathering_design_current_screen( $current_screen ) {
    $user = wp_get_current_user();
    if(!in_array('administrator', $user->roles ) ) {

        if ($current_screen->id == 'wpml_page_tm/menu/settings') {
            wp_redirect(get_admin_url());
            die();
        }

        if ($current_screen->id == 'toplevel_page_tm/menu/main' && $_GET['sm'] !== 'translators') {
            wp_redirect(admin_url('admin.php?page=tm%2Fmenu%2Fmain.php&sm=translators'));
            die();
        }

        if ($current_screen->id == 'wpml_page_tm/menu/translations-queue') {
            wp_redirect(admin_url('admin.php?page=tm%2Fmenu%2Fmain.php&sm=translators'));
            die();
        }

        // print_r($current_screen);
        // print_r($_GET['sm']);
    }
}
add_action( 'current_screen', 'gathering_design_current_screen' );