私はユーザーロールを既存のページだけを編集できるように制限しようとしていますが、新しいページを作成したり、投稿を含むもののような他のことをしないようにしています。
私はこれを読みました:
既存のページだけを編集できる既存の機能はありますか?そうでなければ、これを実装するための良い方法は? およびそこに記載されているチケット: https://core.trac.wordpress.org/ticket/16714
それで、私はそれらのパーミッションを持つ新しいユーザーロールを作成しました:
edit_pages
edit_others_pages
edit_published_pages
read
それから私はこれを追加しました:
function disable_page_creation(){
if( check_user_role('rolename'){ // This checks if the current user belongs to this role
get_post_type_object('page')->cap->create_posts = 'do_not_allow';
}
}
問題は、これが新しいページの作成を無効にするだけでなく、リストページのような他のことを禁止することです。
edit_posts
を追加するとすぐに、すべてがpagesセクションで期待どおりに機能しますが、もちろん投稿は現在編集可能です。
これはWPがこの特定の組み合わせでは不可能なことなのか、それとも間違ったことなのか?それが動けなくなるどこかのヒントは?
編集:わかりました私は問題をトレースしていると思います。これが起こる理由は、投稿とページが同じ管理ファイルedit.php
を共有しているためだと私は思います。もう少し詳細:
投稿やページを編集しても、グローバルな$pagenow
変数はedit.php
に設定されます。
user_can_access_admin_page() このチェックは実行されます
if ( isset( $_wp_menu_nopriv[$pagenow] ) ){
無効にされた後編集がedit.php
に$_wp_menu_nopriv[$pagenow]
を置くので、それはまたページのために救済します。
これはWPバグだと思います。誰もが解決策を確認することができますか?
さてここに行きます。 は WordPress自体のバグです 。
私はすでに私の質問でこの問題をすぐに説明したので、それを見てみるか、詳細については上記のリンクをチェックしてください。
問題が正しく解決されるまで、私はこの汚い、汚いハックを提案します。それは、アクセス可能な別のサブメニューが追加されるとすぐに、すべてが再び正常に機能しているという考えに基づいています。そのため、一時的にダミーのサブメニュー項目を追加してチェックをトリックし、その後すぐに削除します。
function workaround_issue_22895(){
add_submenu_page( 'edit.php?post_type=page', 'Workaround_Issue_22895', 'Workaround_Issue_22895', 'edit_pages', 'workaround_issue_22895' );
add_filter('add_menu_classes', 'workaround_issue_22895_unset');
}
add_action( 'admin_menu' , 'workaround_issue_22895' );
function workaround_issue_22895_unset ($menu){
remove_submenu_page( 'edit.php?post_type=page', 'workaround_issue_22895');
return $menu;
}
ところで、私はこれがあなたが慎重に扱うべきである汚い、汚いハックであると述べましたか?