it-swarm.com.de

Ermöglichen des Zugriffs auf benutzerdefinierte Rollen für benutzerdefinierte Beitragstypen im Back-End

Ich habe also einige Probleme damit und kann nicht verstehen warum. Ich benötige nur eine benutzerdefinierte Rolle, die auf das Blog im Back-End zugreifen kann.

Ich habe einen neuen Beitragstyp mit dem Capability-Typ blog und einer neuen Benutzerrolle mit allen Großbuchstaben hinzugefügt, mit denen Benutzer mit Administratorzugriff den benutzerdefinierten Beitragstyp hinzufügen/bearbeiten können. Dies funktioniert für Administratoren und sie können auf den Beitragstyp im Backend zugreifen. Benutzer meiner benutzerdefinierten Rolle können jedoch überhaupt nicht in das Back-End gelangen.

Beitragsart Argumente der Note

"capability_type" => 'blog',
"map_meta_cap" => true,

Rolle registrieren

function add_blog_manager_role(){
    add_role(
        'blog_manager',
        'Blog Manager',
        array(
            'read' => true,
            'edit_posts' => false,
            'delete_posts' => false,
            'publish_posts' => false,
            'upload_files' => true
        )
    );
}
add_action( 'admin_init', 'add_blog_manager_role', 4 );

Caps hinzufügen

function add_blog_role_caps() {
    $roles = array('blog_manager', 'editor','administrator');
    foreach($roles as $the_role) {
        $role = get_role($the_role);
        $role->add_cap( 'read' );
        $role->add_cap( 'read_blog');
        $role->add_cap( 'read_private_blog' );
        $role->add_cap( 'edit_blog' );
        $role->add_cap( 'edit_others_blog' );
        $role->add_cap( 'edit_published_blog' );
        $role->add_cap( 'publish_blog' );
        $role->add_cap( 'delete_others_blog' );
        $role->add_cap( 'delete_private_blog' );
        $role->add_cap( 'delete_published_blog' );
    }
}
add_action('admin_init', 'add_blog_role_caps', 5 );

Ich habe verzweifelt nach der Ursache gesucht. Ich habe versucht, mit Plural-, Nicht-Plural-Großbuchstaben, Funktionen in die Posten-Typ-Argumente einzufügen. Allerdings komme ich nie ins Backend. Ich habe keinen anderen Code in dem Theme, der Benutzer aus dem Admin rausschmeißen könnte. (Ich habe meinen eigenen Code entfernt, der sie rausschmeißen konnte, während ich dies testete.)

Bearbeiten Hier können Sie einen Speicherauszug der blog_manager-Funktionen aus der Datenbank sehen, es ist noch einiges an Test-BS darin, aber das sollte sie nicht davon abhalten, sich nach meinem Wissen anzumelden.

'blog_manager' => array (
    'name' => 'Blog Manager',
    'capabilities' => array (
        'read' => true,
        'edit_posts' => false,
        'delete_posts' => false,
        'publish_posts' => false,
        'upload_files' => true,
        'read_blog' => true,
        'read_private_blog' => true,
        'edit_blog' => true,
        'edit_others_blog' => true,
        'edit_published_blog' => true,
        'publish_blog' => true,
        'delete_others_blog' => true,
        'delete_private_blog' => true,
        'delete_published_blog' => true,
        'blog' => true,
        'read_private_blogs' => true,
        'edit_blogs' => true,
        'edit_others_blogs' => true,
        'edit_published_blogs' => true,
        'publish_blogs' => true,
        'delete_others_blogs' => true,
        'delete_private_blogs' => true,
        'delete_published_blogs' => true,
        'delete_blogs' => true,
        'delete_blog' => true,
    ),
)
8
Chris Morris

Es ist schwierig, den obigen Code zu beheben, da er nur ein Teil des tatsächlichen Codes ist. Hier ist jedoch das minimale Plugin, das zum Registrieren eines benutzerdefinierten Beitragstyps (Beispiel) und einer benutzerdefinierten Rolle (Blog Manager) mit Zugriff auf den benutzerdefinierten Beitragstyp Beispiel erforderlich ist .

Dies kann auch als Teil der Datei functions.php eines Themas verwendet werden. Verwenden Sie stattdessen die Haken zum Aktivieren und Deaktivieren des Themas.

<?php
/**
 * Plugin Name: WPSE 186337
 * Description: Debug WordPress StackExchange question 186337
 * Plugin URI: https://wordpress.stackexchange.com/questions/186337/
 * Author: Nathan Johnson
 * Licence: GPL2+
 * Licence URI: https://www.gnu.org/licenses/gpl-2.0.en.html
 */

//* Don't access this file directly
defined( 'ABSPATH' ) or die();

//* Add action to init to register custom post type
add_action( 'init', 'se186337_init' );

//* Register activation hook to add Blog Manager role
register_activation_hook( __FILE__ , 'se186337_activation' );

//* Register deactivation hook to remove Blog Manager role
register_deactivation_hook( __FILE__ , 'se186337_deactivation' );

function se186337_activation() {
  $caps = [
    //* Meta capabilities
    'read'                   => true,
    'edit_blog'              => true,
    'read_blog'              => true,
    'delete_blog'            => true,

    //* Primitive capabilities used outside of map_meta_cap()
    'edit_blogs'             => true,
    'edit_others_blogs'      => true,
    'publish_blogs'          => true,
    'read_private_blogs'     => true,

    //* Primitive capabilities used within of map_meta_cap()
    'delete_blogs'           => true,
    'delete_private_blogs'   => true,
    'delete_published_blogs' => true,
    'delete_others_blogs'    => true,
    'edit_private_blogs'     => true,
    'edit_published_blogs'   => true,
  ];

  add_role( 'blog_manager', 'Blog Manager', $caps );
}

function se186337_deactivation() {
  remove_role( 'blog_manager' );
}

function se186337_init() {
  $labels = [
    'name'          => __( 'Examples' ),
    'singular_name' => __( 'Example' ),
  ];
  $args = [
    'labels'          => $labels,
    'public'          => true,
    'has_archive'     => true,
    'capability_type' => 'blog',
    'map_meta_cap'    => true,
  ];
  register_post_type( 'examples', $args );
}
3
Nathan Johnson

Wenn Sie mit dem Plugin einverstanden sind, können Sie das Velow-Plugin verwenden.

https://wordpress.org/plugins/capability-manager-enhanced/

0
Aki