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

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

新規登録して質問してみよう
ただいま回答率
85.48%
WordPress

WordPressは、PHPで開発されているオープンソースのブログソフトウェアです。データベース管理システムにはMySQLを用いています。フリーのブログソフトウェアの中では最も人気が高く、PHPとHTMLを使って簡単にテンプレートをカスタマイズすることができます。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Q&A

1回答

11135閲覧

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

akkkkin

総合スコア83

WordPress

WordPressは、PHPで開発されているオープンソースのブログソフトウェアです。データベース管理システムにはMySQLを用いています。フリーのブログソフトウェアの中では最も人気が高く、PHPとHTMLを使って簡単にテンプレートをカスタマイズすることができます。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

0グッド

0クリップ

投稿2017/04/28 08:46

編集2017/04/28 10:17

管理者権限と編集者権限のみ任意のプラグイン(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)は非表示のままです。

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

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

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

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

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

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

PHP

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

--

追記

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

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

PHP

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

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

投稿2017/04/28 09:39

編集2017/05/06 04:08
退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

akkkkin

2017/04/28 09:48

回答ありがとうございます。上記の記述をすると、以下のエラーが表示されます。 Fatal error: Cannot redeclare remove_menus() (previously declared in /home/hogehoge/www/hp_sample/wp-content/themes/theme/functions.php:628) in /home/hogehoge/www/hp_sample/wp-content/themes/theme/functions.php on line 414 具体的なエラーのコード箇所は下記です。 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'); }
akkkkin

2017/04/28 09:56

上記のコードをコメントアウトしてリロードしたらエラーは解除されました。 しかし、festi-cart(スラッグ名)のプラグインは表示されておりません。 もともとプラグインは管理者権限でしか表示されないものであり、編集者権限で表示させるには まず編集者権限で表示させるという関数が必要なのでしょうか。。。
退会済みユーザー

退会済みユーザー

2017/04/28 11:30

関数が同名なのでエラーになっているだけです。
akkkkin

2017/05/05 09:42

コメントありがとうございます。 関数が同名というでしたので、まとめて記載したのですが、やはりfesti-cart(スラッグ名)のプラグインは編集者権限で表示されません。 function remove_menus(){ if (!current_user_can('administrator')){ //管理者以外がログインした場合は以下の表示を非表示 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'); // ダッシュボード } if (!current_user_can('administrator') && !current_user_can('editor')) { //管理者ではない かつ 編集者ではない場合 remove_menu_page('festi-cart'); } add_action('admin_menu', 'remove_menus'); } 関数が同名という意味をはき違えているんでしょうか?
akkkkin

2017/05/06 06:17

回答ありがとうございます。 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' ); こちらでも表示されません。リロード・ブラウザも変えて試しましたが駄目でした。
退会済みユーザー

退会済みユーザー

2017/05/06 10:26

駄目だったというのは、編集者権限時に「カートアイコン」というメニューが表示されなかったという認識で有っていますか。
退会済みユーザー

退会済みユーザー

2017/05/06 10:29

編集者はmanage_options権限を持っているのですよね?
akkkkin

2017/05/06 10:40

>編集者権限時に「カートアイコン」というメニューが表示されなかったという認識で有っていますか。 言葉に祖語がある表現で申し訳ありません。その認識であっております。 >編集者はmanage_options権限を持っているのですよね? このことを知らず、user role editorというプラグインで編集者のmanage_optionsにチェックマークを入れました。そうすると、カートアイコンのメニューは表示されたのですが、それ以外のプラグインの項目も表示されてしまいます。 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' ); をfunction.phpに記述するとさらにサイドバーにカートアイコンの項目が表示されました(2か所)。
退会済みユーザー

退会済みユーザー

2017/05/06 11:03

なんとなく状況がわかったような気がします。 User role editorでの編集者のmanage_optionsのチェックは外し、add_menu_pageの引数で指定する権限をmanage_options以外の、編集者が標準で持っている権限にしてみてください。
akkkkin

2017/05/06 12:35

>User role editorでの編集者のmanage_optionsのチェックは外し はずしました。 >add_menu_pageの引数で指定する権限をmanage_options以外の、編集者が標準で持っている権限にして これはどういう意味でしょうか。とりあえず、編集者が標準でもっている権限にはしました。 よって以下のチェックを外しました。 create_users delete_users edit_theme_options edit_users ただ、上記権限のチェックを外したので編集者権限でログインした時に反映されなくなりました。
退会済みユーザー

退会済みユーザー

2017/05/06 13:17 編集

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

2017/05/08 00:34

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

退会済みユーザー

2017/05/09 12:10

管理者権限と編集者権限のみで表示させたいプラグインが何であるかをおたずねしました。(ソースコードを直接確認したかったのですが、「woo cartpro」という名前で検索しても見つからなかったので。有料プラグインだと確認のしようがありませんが) これまでの説明を聞く限り、User Role Editorで「woo cartpro」プラグインの権限が表示されなかったということですから、「woo cartpro」では独自の権限を追加していないものと思われます。 そうであれば、「woo cartpro」のコードを直接確認し、「woo cartpro」メニュー表示に必要な権限が何であるかを確認してみてはいかがですか。 必要な権限がわかれば、その権限を編集者ロールに追加することでメニューが表示されるものと思います。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問