ブロックテーマではサイトのナビゲーションを ナビゲーションブロック を使って作成するのが一般的ですが、このナビゲーションブロックは標準では編集権限が edit_theme_option なので、ユーザーの権限が編集者の場合はナビゲーションが変更できません。
ただ、サイトエディタは触らせたくないけれど、ナビゲーションの変更は許可したい というケースはあると思います。
毎月開催しているオンラインの質問相談会でそういった質問がありましたので試してみました。
固定ページにナビゲーションブロックを配置して編集できる
まず、編集者権限のユーザーはそもそも 外観 > エディタ 画面は表示できません。しかしながら、ナビゲーションブロックは登録済みのナビゲーションを読み込んで表示しているので、読み込み元のナビゲーションが変更できれば良いわけです。
なので、
- 編集権限でログイン
- 投稿や固定ページなどの編集画面にナビゲーションブロックを適当に配置
- そのナビゲーションブロックに割り当てるメニューを、ヘッダーなどで割り当てているメニューに設定
- ナビゲーションを編集して保存
- ナビゲーションの編集用に配置したナビゲーションブロックはあくまで編集用なので編集・保存が済んだら削除
で出来ると良いのですが…
残念ながら「編集者」はメニューの編集権限がないため、メニューを呼び出して編集・保存ができません。
ナビゲーションの編集権限を変更
そこで以下のコードをカスタマイズ用のPHPファイルなどに貼れば、編集権限でも保存できるようになります。
add_filter( 'register_post_type_args', 'my_modify_wp_navigations_capabilities', 10, 2 );
function my_modify_wp_navigations_capabilities( $args, $post_type ) {
if ( $post_type === 'wp_navigation' ) {
$args['capabilities']['edit_posts'] = 'edit_pages';
$args['capabilities']['edit_others_posts'] = 'edit_pages';
$args['capabilities']['delete_posts'] = 'edit_pages';
$args['capabilities']['publish_posts'] = 'edit_pages';
$args['capabilities']['read_private_posts'] = 'edit_pages';
$args['capabilities']['delete_private_posts'] = 'edit_pages';
$args['capabilities']['delete_published_posts'] = 'edit_pages';
$args['capabilities']['delete_others_posts'] = 'edit_pages';
$args['capabilities']['edit_private_posts'] = 'edit_pages';
$args['capabilities']['edit_published_posts'] = 'edit_pages';
$args['capabilities']['create_posts'] = 'edit_pages';
}
return $args;
}
クラシックテーマであれば、上記コードを子テーマの functions.php などに書けば良いですが、ブロックテーマでは子テーマは使うメリットはあまりないので、上記コードを子テーマの functions.php に書くのではなく、
- 以下のようなプラグインファイル( ここでは my-customize.php )を作成
- my-customize など適当なディレクトリを作成してその中に my-customize.php を入れる
- my-customize を zip に圧縮
- プラグイン > 新規追加 > ファイルをアップロード で my-customize.zip をアップロードして有効化
の方が楽にできるかなと思います。
<?php
/**
* Plugin Name: My Customize Plugin(名前は適当に変更してください)
*/
add_filter( 'register_post_type_args', 'my_modify_wp_navigations_capabilities', 10, 2 );
function my_modify_wp_navigations_capabilities( $args, $post_type ) {
if ( $post_type === 'wp_navigation' ) {
$args['capabilities']['edit_posts'] = 'edit_pages';
$args['capabilities']['edit_others_posts'] = 'edit_pages';
$args['capabilities']['delete_posts'] = 'edit_pages';
$args['capabilities']['publish_posts'] = 'edit_pages';
$args['capabilities']['read_private_posts'] = 'edit_pages';
$args['capabilities']['delete_private_posts'] = 'edit_pages';
$args['capabilities']['delete_published_posts'] = 'edit_pages';
$args['capabilities']['delete_others_posts'] = 'edit_pages';
$args['capabilities']['edit_private_posts'] = 'edit_pages';
$args['capabilities']['edit_published_posts'] = 'edit_pages';
$args['capabilities']['create_posts'] = 'edit_pages';
}
return $args;
}
これで編集者権限のユーザーでもナビゲーションの編集が可能になります。
この記事を書いた人
-
名古屋のウェブ制作会社数社に10年程度務めた後、株式会社ベクトル設立。
企画・運営・コンサルティング〜WordPressを中心としたシステム開発まで幅広く携わる。
[ 著書 ]
・いちばんやさしいWordPressの教本(共著)
・現場でかならず使われているWordPressデザインのメソッド(共著)
[ 最近のWordPressコミュニティでの活動 ]
WordCamp Tokoy 2023 セッションスピーカー
WordCamp Asia 2023 セッションスピーカー(LT)
WordCamp Niigata 2019 セッションスピーカー
WordCamp Haneda 2019 セッションスピーカー
WordCamp Osaka 2018 セッションスピーカー
WordCamp Kyoto 2017 セッションスピーカー
他
最近の投稿
フルサイト編集対応ブロックテーマ
WordPress テーマ X-T9 は、WordPress 5.9 から実装されたフルサイト編集機能に対応した「ブロックテーマ」と呼ばれる新しい形式のテーマです。
ヘッダーやフッターなど、今までのテーマではカスタマイズが難しかったエリアもノーコードで簡単・柔軟にカスタマイズする事ができます。
パターンを使って
よりクオリティの高いサイトに
パターンとは、WordPressのブロックを組み合わせて作ったデザインテンプレートのようなもの。プロのデザイナーが制作したパターンを300以上公開中!コピペしながら高品質なサイトを簡単に作れます。
ブロックエディターで
ABテストを
自由に作成できる VK AB Testing
VK AB Testing は、ABテストを実施するための WordPress 用プラグインです。ブロックエディターでテストパターンを自由に作成でき、ランダム表示とクリック計測が可能です。Webサイトや広告などの施策の改善にぜひご活用ください。