web-dev-qa-db-ja.com

新しいページを追加ボタンを隠す

管理者ではないユーザーから[新しいページを追加]ボタンを非表示にします。このようにサブメニュー項目を右の列から隠すことができました。

$page = remove_submenu_page( 'edit.php?post_type=page', 'post-new.php?post_type=page' );

私はこの 質問 で提案されているcssでページのボタンを隠そうとしましたが、うまくいきませんでした。どうやってそれを達成することができますか?これが私の失敗した試みです。

if (isset($_GET['post_type']) && $_GET['post_type'] == 'page') {
            echo '<style type="text/css">
            #favorite-actions, .add-new-h2, .tablenav { display:none; }
            </style>';
        }
2
aggtr

これはCSSだけで十分簡単に​​達成できます。まず、ユーザーの役割に基づいてbodyタグにクラスを出力する関数を追加します。それからadminに表示されるスタイルシートをエンキューします。次に、ボディ内のクラスを使用してボタンをターゲットにして非表示にします。

ユーザーの役割に基づいてボディクラスを追加する - functions.phpに追加する

function custom_role_admin_body_class( $classes ) {
    global $current_user;
    foreach( $current_user->roles as $role )
        $classes .= ' role-' . $role;
    return trim( $classes );
}
add_filter( 'admin_body_class', 'custom_role_admin_body_class' );

エンキュー管理スタイル - functions.phpに追加

function custom_admin_styles(){
    wp_enqueue_style(
        'admin_css', 
        get_stylesheet_directory_uri() . '/css/admin-styles.css', array(), filemtime( get_stylesheet_directory() . '/css/admin-styles.css') 
    );
}
add_action('admin_enqueue_scripts', 'custom_admin_styles');

NON管理ユーザー用のボディクラスを使用してボタンを非表示にする

body.edit-php.post-type-page:not(.role-administrator) .page-title-action {
    display: none;
}
1
RiddleMeThis

User Role Editorこのプラグインをインストールすると、ユーザーロールによってオプションを非表示にするオプションが表示され、これが機能するかどうかがわかります。そのため、別のオプションを指定できます。

1
Tejas Gajjar