it-swarm.com.de

Verwechslung mit dem Hinzufügen von Metafunktionen zu einer Rolle, nachdem ein benutzerdefinierter Beitragstyp mit dem entsprechenden Parameter 'capacity_type' registriert wurde

Ich war ziemlich verwirrt mit dem CPT-Parameter 'capacity_type' und dem Hinzufügen generierter Funktionen zu einer Rolle.

Ich habe also ein CPT namens "external_role" wie folgt registriert:

add_action('init', 'external_roles_post_type_init');
function external_roles_post_type_init() {
  $labels = array(
    'name' => _x('External Roles', 'post type general name'),
    'singular_name' => _x('external role', 'post type singular name'),
    'add_new' => _x('Add New', 'external role'),
    'add_new_item' => __('Add New External Role'),
    'edit_item' => __('Edit External Role'),
    'new_item' => __('New External Role'),
    'view_item' => __('View External Role'),
    'search_items' => __('Search External Roles'),
    'not_found' =>  __('No job found'),
    'not_found_in_trash' => __('No job found in Trash'), 
    'parent_item_colon' => ''
  );
  $args = array(
    'labels' => $labels,
    'public' => true,
    'publicly_queryable' => true,
    'show_ui' => true,
    'has_archive' => 'past-external-roles',
    'rewrite' => array('slug' => 'external-roles','with_front' => false),
    'query_var' => true,
    'capability_type' => array('external_role', 'external_roles'),
    'map_meta_cap' => true,
    'hierarchical' => false,
    'show_in_nav_menus' => false,
    'menu_position' => 20,
    'supports' => array(
      'title',
      'editor',
      'author',
      'custom-fields',
      'revisions'
    )
  );
  register_post_type('external_role',$args);
}

Wenn Sie also den Parameter capability_type betrachten (wenn ich ihn richtig verstehe), werden die folgenden Funktionen generiert:

Metafunktionen:

  • edit_external_role
  • read_external_role
  • delete_external_role

Primitive Funktionen (die basierend auf Metafunktionen generiert werden):

  • edit_external_role
  • edit_others_external_role
  • publish_external_role
  • read_private_external_role

Ok, jetzt möchte ich meine Fähigkeiten auf die Rolle admin übertragen, damit Administratoren einen neuen CPT vollständig verwalten können.

Ich dachte, wenn ich nur einen großartigen meta capabilities hätte, würde das bedeuten, dass alle primitive capabilities auch der Rolle zugewiesen würden? Ist das der fall

Ich habe folgende Möglichkeiten, um der Administratorrolle Funktionen hinzuzufügen:

// Add caps for Administrator role
$role =& get_role('administrator');
// external roles capabilities
$role->add_cap('edit_external_role');
$role->add_cap('read_external_role');
$role->add_cap('delete_external_role');

Dies reicht jedoch nicht aus.

Wie lassen sich alle Funktionen einer Rolle zum Verwalten eines CPT präzise und richtig hinzufügen?

Vielen Dank, Dasha

EDIT

Ich verwende jetzt den Haken init im functions.php, um der Administratorrolle Großbuchstaben hinzuzufügen:

add_action( 'init', 'my_custom_roles_capabilities', 0 );
function my_custom_roles_capabilities(){
    // Add caps for Administrator role
    $role =& get_role('administrator');
    // external roles capabilities
    $role->add_cap('edit_external_role');
    $role->add_cap('read_external_role');
    $role->add_cap('delete_external_role');
}
5
dashaluna

Haben Sie versucht, die Funktionen in der Funktion external_roles_post_type_init () zu definieren?

Nach dem

'capability_type' => array('external_role', 'external_roles'),

versuche dies hinzuzufügen

'capabilities' => array(
    'publish_posts' => 'publish_external_roles',
    'edit_posts' => 'edit_external_roles',
    'edit_others_posts' => 'edit_others_external_roles',
    'delete_posts' => 'delete_external_roles',
    'delete_others_posts' => 'delete_others_external_roles',
    'read_private_posts' => 'read_private_external_roles',
    'edit_post' => 'edit_external_role',
    'delete_post' => 'delete_external_role',
    'read_post' => 'read_external_role',
        ),

als weiteres Argument des Arrays $ args

Bevor Sie die Funktion auf diese oder jene Rolle anwenden, können Sie versuchen, das User Role Editor Plugin zu installieren, um festzustellen, ob die Funktionen wirklich vorhanden sind. Wenn Sie sie sehen, können Sie sogar darüber nachdenken, nur dieses Plugin zu verwenden, um Caps zu vergeben oder zu widerrufen zu Rollen. Ich weiß, es ist nicht wie Codierung, aber tatsächlich ist die Möglichkeit, mit einem Klick im Admin-Bereich zu geben und zu widerrufen, sehr praktisch.

Ich sage Ihnen dies, weil ich manchmal (ziemlich oft) benutzerdefinierte Beitragstypen mit derselben Methode registriere, die Sie verwenden (plus dem oben eingefügten Capabilities-Array), aber aus irgendeinem Grund werden die Funktionen nicht wirklich erstellt. Manchmal löse ich nur durch Verschieben der Registrierungsfunktion in der Datei functions.php in die obere Position. Es scheint mir auch Wichcraft zu sein, aber manchmal funktioniert es.

Wenn ich mich auf einem solchen toten Pfad befinde, kann ich nur die beiden Plugins User Role Editor und Map Cap finden. Das mag ich nicht, aber es ist besser, als den Verstand zu verlieren.

Ich hoffe es hilft dir, auch wenn es den "Verwirrungs" -Zustand, den ich mit dir teile, nicht löst.

2
bluantinoo