2017-09-14 10 views
0

私はfunctions.phpファイルにカスタム投稿タイプ "produktionsauftrag"を作成しました。特定のユーザーロール(woocommerceのshop_manager)には、このカスタムポストタイプに特別な権限が必要です。wordpressカスタムポストタイプ能力read_(cpt)利用不可

shop_managerは投稿を作成できるはずですが、編集することはできません(読んだだけです)。私は、独自のcapability_typeと私のカスタムポストタイプを作成するとき、私は権限を変更することができますが、あなたが見ることができるように何read_cptオプションはありません。

enter image description here

私はread_auftragsオプションを追加することができますどのように? functions.phpでの私のカスタムポストタイプ:

function cptui_register_my_cpts_produktionsauftrag() { 

    /** 
    * Post Type: Produktionsaufträge. 
    */ 

    $labels = array(
     "name" => __("Produktionsaufträge", ""), 
     "singular_name" => __("Produktionsauftrag", ""), 
     "menu_name" => __("Produktionsaufträge", ""), 
     "all_items" => __("Alle Produktionsaufträge", ""), 
     "add_new" => __("Produktionsauftrag erstellen", ""), 
     "add_new_item" => __("Produktionsauftrag erstellen", ""), 
     "edit_item" => __("Produktionsauftrag anpassen", ""), 
     "new_item" => __("Neuer Produktionsauftrag", ""), 
     "view_item" => __("Produktionsauftrag anzeigen", ""), 
     "view_items" => __("Produktionsaufträge anzeigen", ""), 
     "search_items" => __("Produktionsauftrag suchen", ""), 
     "not_found" => __("Keine Produktionsaufträge gefunden", ""), 
     "not_found_in_trash" => __("Keine Produktionsaufträge gefunden", ""), 
     "items_list" => __("Produktionsauftragsliste", ""), 
    ); 

    $args = array(
     "label" => __("Produktionsaufträge", ""), 
     "labels" => $labels, 
     "description" => "", 
     "public" => true, 
     "publicly_queryable" => false, 
     "show_ui" => true, 
     "show_in_rest" => false, 
     "rest_base" => "", 
     "has_archive" => false, 
     "show_in_menu" => true, 
     "exclude_from_search" => false, 
     'capability_type' => 'auftrag', 
     "map_meta_cap" => true, 
     "hierarchical" => false, 
     "rewrite" => array("slug" => "produktionsauftrag", "with_front" => true), 
     "query_var" => true, 
     "supports" => array("title", "author"), 
    ); 

    register_post_type("produktionsauftrag", $args); 
} 

add_action('init', 'cptui_register_my_cpts_produktionsauftrag'); 
+0

読むには、デフォルトですべての投稿で有効になっています。投稿への読書アクセスに問題がありますか? – FluffyKitten

+0

いいえ、私は自分の投稿へのアクセスを読むことに何の問題もありません。問題は、カスタム投稿タイプを作成し、user_roleがこの投稿タイプの新しい投稿を公開し、それを読むことができるが公開後に編集できないことです。プラグインユーザロールエディタでは、read_private_(cpt-name)のみのread_(cpt-name)機能が表示されます。 – Peesen87

+0

これは、「読み取り」がすべての投稿のデフォルト設定であるため、カスタム投稿タイプのオン/オフを切り替えることができないためです。 – FluffyKitten

答えて

1

read機能を使用すると、CPTに適用できる標準機能ではありませんが、あなたがそれを設定することができますように見えます。機能アレイの一部としてCPTのために受け入れ

機能は次のとおり

  • edit_posts、edit_others_posts、publish_posts、read_private_posts
  • メタ機能:edit_post、read_post、及びdelete_post

メタ機能は、ユーザーが機能している機能です、

  • 読み取り、edit_published_posts、edit_private_posts、create_posts、delete_posts、delete_private_posts、delete_published_posts、

注意をdelete_others_posts:ごとのポスト基づいてanted、および以下の原始的な機能にマッピングされますここのコードは、wordpress.stackexchange.comの質問/回答に使用されました。これはCodexと矛盾しているようです(下記参照)。しかし、それが他の人のために働くならば、最初に試してみる価値がある!

カスタムポストタイプ:

あなたが明示的にこのような機能(それはあなたが"map_meta_cap" => trueを使用するときに自動的に行わが、その明確ではないかもしれない)を設定することができます:あなたが次に

function cptui_register_my_cpts_produktionsauftrag() { 

    [...] 

    $args = array(

     [...] 

     'capability_type' => 'auftrag', 
     "map_meta_cap" => true, /* You need this (which you already had) */ 

     /* set the capabilities for both plural AND single, e.g. */ 
     'capabilities' => array(
      'publish_posts' => 'publish_auftrags', 
      'edit_posts' => 'edit_auftrags', 
      'edit_others_posts' => 'edit_other_auftrags', 
      'delete_posts' => 'delete_auftrags', 
      'read_private_posts' => 'read_private_auftrags', 
      'edit_post' => 'edit_auftrag', 
      'delete_post' => 'delete_auftrag' 
      'read_post' => 'read_auftrag', 
     ), 
    ); 

    register_post_type("produktionsauftrag", $args); 
} 
    add_action('init', 'cptui_register_my_cpts_produktionsauftrag'); 


を適切なユーザー役割に機能を追加する必要があります。管理者の投稿を編集できるように管理者に機能を追加する必要があるという回答の1つに言及しています。上記

add_action('init', 'add_produktionsauftrag_caps_role'); 
function add_produktionsauftrag_caps_role() { 

    /* Get the roles you want to add capabilities for, e.g. */ 
    $roles = array(get_role('shop_manager'), get_role('administrator')); 

    /* Add the capabilities for each role */ 

    foreach($roles as $role) { 
     if($role) { 
      /* Add the primitive capabilities, e.g.: */ 
      $role->add_cap('edit_auftrag'); 
      $role->add_cap('edit_auftrags'); 
      $role->add_cap('edit_others_auftrags'); 
      $role->add_cap('publish_auftrags'); 
      $role->add_cap('read_auftrag'); 
      $role->add_cap('read_private_auftrag'); 
      $role->add_cap('delete_auftrag'); 
      $role->add_cap('edit_published_auftrags'); 
      $role->add_cap('delete_published_auftrags'); 
     } 
    } 
} 

を動作しない場合:上記wordpress.stackexchange.com上の質問のいくつかで使用されている

  1. を、いくつかの中の機能の配列を設定していないものの、 CPT ...彼らはロールに機能を追加するだけです(この回答のコードの2番目のブロック)。上記のコードに問題がある場合は、add_produktionsauftrag_caps_role関数だけを追加してみてください。

  2. でも、それらのものを質問/回答は、上記の操作を行い、コーデックスは、メタ機能がどのロールに割り当てられてはならない、彼らはmap_meta_cap()で原始的な機能を対応するマッピングされなければならないと述べています。

また、コーデックスによると:一部のユーザーは、新しいオブジェクトを作成するために十分ではないだけで、ポスト型の機能を持つ役割を持っている場合は

...それは、カスタムのメタ能力ためです投稿の種類が自動的にマッピングされていないため、権限を細かく制御することができませんでした。カスタム投稿タイプのメタ機能をマッピングするには、map_meta_capフックをここで説明するように使用してください:http://justintadlock.com/archives/2010/07/10/meta-capabilities-for-custom-post-types

...だから、wordpress.stackexchange.comの質問/回答はmap_meta_capを使用していませんでしたが、あなたがする必要があります。

の参照は:

+0

ありがとうございました。私は読書能力を得ようとしたが、あなたの助けを借りてそれを得ることができなかった。私はまだread_priveate_(postname)機能しか持っていません。私はjavascript、それは良い解決策ではなく、そのacutallyすべて私は持っていたことを知っている。 – Peesen87

+0

@ Peesen87プラグインを使ってメタ機能を設定することもできません(スクリーンショットはUser Role Editorを使用しているようです)。この回答はコード内に直接機能を設定する必要があります。別のプラグインを使用する必要はなく、 'read'機能はプラグインには表示されません:) – FluffyKitten

関連する問題