web-dev-qa-db-ja.com

異なるユーザーロールに異なる管理メニューを表示する

どのように私は異なるユーザーロールに異なる管理者メニューを表示することができます。

私は新しいユーザーを作成する必要がありますホストのみのユーザー

私はこれがデフォルトのユーザロールのためのデフォルトの管理者メニューリストであるのを見ました

enter image description here

これらのメニューがどのWordPressのPHPファイルにコードで割り当てられているかはどこでわかりますか?コードでメニューを上書きできますか?

1
neeraj

メニュー項目は機能にバインドされています。ここで 良い概要を見つけることができます 。たとえば、edit_postsという機能がない場合、メニュー項目 "投稿"は表示されません。

メニュー項目はCapabilitesにどのように結び付けられていますか。一般的に言って、あなたがメニュー項目を登録する場合、 add_menu_page() または add_submenu_page() あなたはWordPressにこのページにアクセスしてメニューに表示できるユーザーに指示する機能を割り当てる必要があります。

デフォルトのメニュー項目に縛られている機能をさらに深く掘り下げたい場合は、ソースコードを参照することができます。

この小さなスクリプトを使用することもできます。これにより、現在のメニューの概要と添付されている機能を確認できます。それは開発上の理由でのみ使用されるべきであり、確かに、それは改善されることができます、しかしあなたは一般的な考えを得ます:

add_action( 'in_admin_footer', function() {

    global $menu, $submenu;
    echo '<p>Menu:</p><table class="table widefat">';
    echo '<tr><th>Name</th><th>Slug</th><th>Capability</th>';
    foreach ( $menu as $key => $item ) {
        echo '<tr><td>' . esc_html( $item[0] ) . '</td><td>' . esc_html( $item[2] ) . '</td><td><td>' . esc_html( $item[1] ) . '</td><td></tr>';
    }
    echo '</table>';
    echo '<p>Submenu:</p><table class="table widefat">';
    echo '<tr><th>Name</th><th>Slug</th><th>Capability</th>';
    foreach ( $submenu as $index => $subsub ) {
        foreach ( $subsub as $key => $item ) {
            echo '<tr><td>' . esc_html( $item[0] ) . '</td><td>' . esc_html( $item[2] ) . '</td><td><td>' . esc_html( $item[1] ) . '</td><td></tr>';
        }

    }
    echo '</table>';
});

そのため、新しいユーザーロールを作成した場合は、それらに機能を割り当てることができ、それによって、特定のユーザーロールに[投稿の編集]メニュー項目を表示するかどうかを決定できます。あなたは WordPress Codex でユーザーロールと機能を追加するための詳細な説明を見つけることができます。

特定のメニュー項目を削除したいが、それでもユーザーに主要な機能を付与したい場合は、 remove_menu_page() を使用できます。したがって、削除したいメニュー項目のスラッグを知る必要があります。この例では、メニューから "Plugins"項目を削除します。

add_action( 'admin_menu', function(){
    remove_menu_page( 'plugins.php' );
});
1
websupporter