質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

89.98%

管理メニューに管理者、編集者権限のみ特定のプラグインを表示したい

受付中

回答 1

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 3,604

akkkkin

score 77

管理者権限と編集者権限のみ任意のプラグイン(woo cartpro)を表示させたいのですが、
functions.phpに以下の記述をしても管理者だけにしか表示されない、
また、別途カートアイコンという名前で新たにサイドメニューに表示されます。

add_action( 'admin_menu', 'register_my_custom_menu_page' );

function register_my_custom_menu_page() {
if (current_user_can('administrator','editor')) { //管理者、編集者以外はwoocart項目を非表示
 add_menu_page( 'custom menu title', 'カートアイコン', 'manage_options', 'admin.php?page=festi-cart', '', plugins_url( 'plugins/woocommerce-woocartpro/static/images/icon_16x16.png' ), 6 );
}}


以下のプラグインを管理者、編集者だけ表示させたい。(スラッグ名:festi-cart)
イメージ説明

しかし、追加のメニューとして管理画面サイドバー上部にカートアイコンと表示されてしまう。

イメージ説明

「adminimize」「manege menus」のプラグインで編集者権限でログイン時、任意のプラグインの表示を設定しても、
表示されないので、今回直接function.phpに記述しようと試みた、という背景です。

その他権限をごとに設定するプラグインとして、「user role editor」も入れています。
このプラグインに関してはそもそも設定したいプラグインの項目が見当たらなかったので、
特になにも設定していません。

つきましてはどのようにfunctions.phpに記述すれば、編集者権限時に管理画面サイドバーに
任意のプラグインが表示されるのでしょうか?

もし、詳しい方がいらっしゃればご教示いただきたく思います。

【追記】

function remove_menus () {
    if (!current_user_can('administrator') && !current_user_can('editor')) { //管理者ではない かつ 編集者ではない場合
      remove_menu_page('festi-cart');
    }
}
add_action('admin_menu', 'remove_menus');


を記述すると、エラーが表示されます。具体的なエラー箇所のコードは下記です。

if (!current_user_can('administrator')){ //管理者以外がログインした場合は以下の表示を非表示
function remove_menus(){
    remove_submenu_page('themes.php', 'themes.php');   // テーマ
    remove_menu_page('edit-comments.php');            // コメント
    remove_menu_page('tools.php');            //ツール
    remove_submenu_page('edit.php', 'edit-tags.php?taxonomy=post_tag'); // 投稿 -> タグ
    remove_submenu_page('themes.php', 'widgets.php'); // 外観 -> ウィジェット
    remove_submenu_page('themes.php', 'nav-menus.php'); // 外観 -> ウィジェット
    remove_menu_page( 'options-general.php' );        // 設定
    remove_menu_page('index.php'); // ダッシュボード
}
add_action('admin_menu', 'remove_menus');
}


そしてエラー箇所のコードをコメントアウトすると、画面は表示されます。
しかし、任意のプラグイン(スラッグ名:festi-cart)は非表示のままです。

よろしくお願いいたします。

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 1

+2

こちらのまとめがわかりやすいと思います。

http://qiita.com/konweb/items/5483efbe87087eff5cc8

これを参考にすると、以下のような感じです。

function remove_menus () {
    if (!current_user_can('administrator') && !current_user_can('editor')) { //管理者ではない かつ 編集者ではない場合
      remove_menu_page('festi-cart');
    }
}
add_action('admin_menu', 'remove_menus');

追記

もともとプラグインは管理者権限でしか表示されない

ということであれば、
functions.phpには、「編集者権限の時にメニューを追加する」コードを書くだけでいいはずです。

function register_my_custom_menu_page() {
    if (current_user_can('editor')) { //編集者だったらcart項目を表示
        add_menu_page( 'custom menu title', 'カートアイコン', 'manage_options', 'admin.php?page=festi-cart', '', plugins_url( 'plugins/woocommerce-woocartpro/static/images/icon_16x16.png' ), 6 );
    }
}
add_action( 'admin_menu', 'register_my_custom_menu_page' );


後、コメントに書かれたコードは、add_actionが関数内に記述されているために動作していません。

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2017/05/06 22:17 編集

    add_menu_page関数で権限にmanage_optionsを指定していますが、その権限を編集者が標準で持っている権限のいずれかに設定してほしいという意図です。

    ただ、当方でも調べたところ、今の場合はadd_menu_pageで追加するのではなく、やはりUser Role Editorを使ったほうがいいのではないかと思いました。
    (こちらの質問が参考になります。https://teratail.com/questions/53285)
    User Role Editorではプラグインに応じた権限が表示されないということでしたが、そもそもなんのプラグインを利用されているのでしょうか。

    キャンセル

  • 2017/05/08 09:34

    コメントありがとうとございます。プラグインはUser Role Editor
    というプラグインを使用しています。

    キャンセル

  • 2017/05/09 21:10

    管理者権限と編集者権限のみで表示させたいプラグインが何であるかをおたずねしました。(ソースコードを直接確認したかったのですが、「woo cartpro」という名前で検索しても見つからなかったので。有料プラグインだと確認のしようがありませんが)

    これまでの説明を聞く限り、User Role Editorで「woo cartpro」プラグインの権限が表示されなかったということですから、「woo cartpro」では独自の権限を追加していないものと思われます。
    そうであれば、「woo cartpro」のコードを直接確認し、「woo cartpro」メニュー表示に必要な権限が何であるかを確認してみてはいかがですか。
    必要な権限がわかれば、その権限を編集者ロールに追加することでメニューが表示されるものと思います。

    キャンセル

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 89.98%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる