web-dev-qa-db-ja.com

カスタム分類法機能

カスタム投稿タイプにいくつかのカスタム分類法を登録しました。そのうちの1つのコードは次のとおりです。

$labels = array(
    'name'              => __( 'Genre', 'textdomain' ),
    'singular_name'     => __( 'Genre', 'textdomain' ),
    'search_items'      => __( 'Search Genres', 'textdomain' ),
    'all_items'         => __( 'All Genres', 'textdomain' ),
    'parent_item'       => __( 'Parent Genre', 'textdomain' ),
    'parent_item_colon' => __( 'Perent Genre:', 'textdomain' ),
    'edit_item'         => __( 'Edit Genre', 'textdomain' ), 
    'update_item'       => __( 'Update Genre', 'textdomain' ),
    'add_new_item'      => __( 'Add New Genre', 'textdomain' ),
    'new_item_name'     => __( 'New Genre', 'textdomain' ),
    'menu_name'         => __( 'Genres', 'textdomain' ),
);
$args = array(
    'labels'            => $labels,
    'public'            => true,
    'show_admin_column' => true,
    'show_ui'           => true,
    'hierarchical'      => true,
    'capabilities'      => array(
        'manage_terms'  => 'edit_posts',
        'edit_terms'    => 'edit_posts',
        'delete_terms'  => 'edit_posts',
        'assign_terms'  => 'edit_posts'
    )
);
register_taxonomy( 'genres', 'book', $args );

私は、税金の1つを作成者が管理できるようにする必要がある限り、機能に問題があります。

私が'manage_terms' => 'edit_posts'のようにケーパビリティを上記のコードとして定義するならば、たとえ作者がedit_postsケーパビリティを持っていても、作者はカスタム分類学に新しい用語を追加することを許されません。

また、カスタム分類を登録するときに、著者の役割にカスタム機能を追加してこの機能を割り当てようとしましたが、成功しませんでした。

うまくいくのは 'manage_categories'を著者の役割に追加することですが、すべての分類法が著者によって編集可能である限りこの解決策は満足のいくものではありません。

前もって感謝します。

3
vguerrero

CPT機能と同様に、 register_taxonomy() で、分類法の機能もカスタマイズ可能です。

能力

  • 'manage_terms' - 'manage_categories'
  • 'edit_terms' - 'manage_categories'
  • 'delete_terms' - 'manage_categories'
  • 'assign_terms' - 'edit_posts'

あなたの作者はedit_postsしか持っていないので、それはあなたが観察するように動作します - 彼らは既存の用語を割り当てることはできますがそれらを作成することはできません。問題の分類法の機能をカスタマイズしてそれぞれの機能を作成者に与えることで、その中に用語を作成できます(ただし、他の分類法では使用できません)。

1
Rarst

分類法を登録しながら機能を定義しているときは、既存のmanage_termsedit_termsdelete_termsおよびassign_termsの機能と同等の新しい機能を定義しています。

それで、あなたの分類法はGenreであるので、あなたはこのような何かをするべきです:

'capabilities' => array(
    'manage_terms' => 'manage_genre',
    'edit_terms' => 'edit_genre',
    'delete_terms' => 'delete_genre',
    'assign_terms' => 'assign_genre',
)

これが完了したら、これらの機能をユーザーロールにマッピングできます。これを実行する最も簡単な方法は、 Capability Manager Enhanced のようなプラグインを使用することです。ただし、トリックを実行するプラグインは多数あります。

2
Marc