web-dev-qa-db-ja.com

高度なカスタムフィールド/ユーザロールエディタ - 特定のユーザに対してACFを非表示にする方法

カスタマイズされたユーザーロールを指定するためにユーザーロールエディタを使用しています。 Advanced Custom Fieldsプラグインも使用しています。

特定のユーザーに表示されないように高度なカスタムフィールドを非表示にすることができます。ただし、User Role Editorでこれを行う唯一の方法は、[Manage Options]ボックスのチェックを外すことです。これをすることの問題はそれが私が実際にそれらのユーザーのために現れたいと思う他のプラグインを現れさせないことです。

特定のユーザーロールに対して高度なカスタムフィールドのみを削除するように、自分のfunctions.phpに入れることができる手動のコードが少しありますか。このプラグインだけ。

1
Matt

admin_menuアクションはACFメニューを隠します。この例ではnot-adminsです。

URLが直接アクセスされた場合、admin_headはアクセスをブロックします。
例:http://example.com/wp-admin/edit.php?post_type=acfhttp://example.com/wp-admin/edit.php?post_type=acf&page=acf-settings

add_action( 'admin_menu', 'wpse_59032_remove_acf_menu', 9999 );
add_action( 'admin_head-edit.php', 'wpse_59032_block_acf_screens' );
add_action( 'admin_head-custom-fields_page_acf-settings', 'wpse_59032_block_acf_screens' );

function wpse_59032_remove_acf_menu() 
{
    /* if not our allowed users, hide menu */
    if ( !current_user_can('delete_plugins') ) {
        remove_menu_page('edit.php?post_type=acf');
    }
}

function wpse_59032_block_acf_screens()
{   
    global $current_screen;

    /* not our screen, do nothing */
    if( 'edit-acf' != $current_screen->id && 'custom-fields_page_acf-settings' != $current_screen->id )
        return;

    /* if not our allowed users, block access */
    if ( !current_user_can('delete_plugins') ) {
        wp_die('message');
    }

}
4
brasofilo