web-dev-qa-db-ja.com

カスタムロール機能を管理者に適用する(プラグインなし)

私は唯一のカスタム投稿タイプへのアクセスを許可するカスタムロールを持っています。これはすべてうまくいっていますが、今では管理者やスーパー管理者ではなく、この役割のためだけに現れています。管理ダッシュボードに表示させるのに苦労しています。

add_role( 'artists_relations', 'Artist Relations', array( 'post_artists' ) );
function add_theme_caps() {
    $role = get_role( 'artists_relations');
    $role->add_cap('delete_artists');
    $role->add_cap('delete_published_artists');
    $role->add_cap('delete_others_artists');
    $role->add_cap('edit_artists');
    $role->add_cap('edit_published_artists');
    $role->add_cap('edit_others_artists');
    $role->add_cap('publish_artists');
    $role->add_cap('read');
    $role->add_cap('upload_files');
    $role->add_cap('manage_artist_categories');
}
add_action( 'admin_init', 'add_theme_caps');

よく働く。私はインターネットから多くの提案を試みましたが、どれもうまくいきませんでした。最新の試みは、しかし、このように見えた

function add_admin_caps() {
    $role = get_role( 'administrator');
    $role->add_cap('delete_artists');
    $role->add_cap('delete_published_artists');
    $role->add_cap('delete_others_artists');
    $role->add_cap('edit_artists');
    $role->add_cap('edit_published_artists');
    $role->add_cap('edit_others_artists');
    $role->add_cap('publish_artists');
    $role->add_cap('read');
    $role->add_cap('upload_files');
    $role->add_cap('manage_artist_categories');
}
add_action( 'admin_init', 'add_admin_caps');

私はフィルタの削除について述べたいくつかの投稿を読んだ。なぜこれが新しい役割に役立つのかはわかりませんが、既存の役割を強化することはできません。しかし、管理者は指定しなくてもすべての権利を持つことになっていませんか?

- 編集 - (投稿タイプ登録追加)

function register_artists_post_type() {
    register_post_type('artists',array(
        'labels' => array(
            'name' => __( 'Artists' ),
            'singular_name' => __( 'Artists' ),
            'add_new' => __( 'Add Artist','Artist' ),
            'add_new_item' => __( 'Add New Artist' ),
            'edit_item' => __( 'Edit Artist' ),
            'new_item' => __( 'New Artist' ),
            'view_item' => __( 'View Artist' ),
            'search_items' => __( 'Search Artists' ),
            'not_found' => __( 'No Artists Found' ),
            'not_found_in_trash' => __( 'No Artists In Trash' ),
            'parent_item_colon' => ''
        ),
        'public' => true,
        'publicly_queryable' => true,
        'show_ui' => true,
        'query_var' => true,
        'has_archive' => true,
        'supports' => array( 'title','editor','excerpt','custom-fields','thumbnail' ),
        'rewrite' => array('slug' => 'artists','with_front' => false),
        'taxonomies' => array('large_feature','small_feature'),
        'capability_type' => 'post',
        'hierarchical' => false,
        'capabilities' => array(
            'publish_posts' => 'publish_artists',
            'edit_posts' => 'edit_artists',
            'edit_others_posts' => 'edit_others_artists',
            'delete_posts' => 'delete_artists',
            'delete_others_posts' => 'delete_others_artists',
            'read_private_posts' => 'read_private_artists',
            'edit_post' => 'edit_artists',
            'delete_post' => 'delete_artists',
            'read_post' => 'read_artists',
            'manage_categories' => 'manage_artist_categories',
        )
    ));
}
add_action('init','register_artists_post_type');
3
kristina childs

まず最初に、@Wyckは正しいです、あなたのregister_post_typeコードを見ることは役に立つでしょう。それが私であれば、$args配列にこのようなものがあることを確認します。

register_post_type( ... array(
    'capability_type' => 'artists',
    'map_meta_cap' => true
) );

次に、管理ページを読み込むたびに機能をリセットしたくないため、サーバーには不要な作業です。私が採用している簡単なトリックは?reload_caps=1の後に/wp-admin/を追加して私のテーマのfunctions.phpファイルでそれをチェックすることです。これが私がサイトでうまく使ったいくつかのコードで、ロールartists_relationsとケーパビリティタイプartistsを使うように修正されました:

if ( is_admin() && '1' == $_GET['reload_caps'] ) {
    $administrator     = get_role('administrator');
    $artists_relations = get_role('artists_relations');

    $administrator->add_cap( 'assign_custom_taxes' );
    $artists_relations->add_cap( 'assign_custom_taxes' );

    foreach ( array('publish','delete','delete_others','delete_private','delete_published','edit','edit_others','edit_private','edit_published','read_private') as $cap ) {
        $administrator->add_cap( "{$cap}_artists" );
        $artists_relations->add_cap( "{$cap}_artists" );
    }
}
3
Matthew Boynes