Consentire l'accesso al ruolo personalizzato al tipo di post personalizzato nel back-end


8

Quindi sto avendo dei problemi con questo e non riesco a capire perché. Ho solo bisogno di un ruolo personalizzato che possa accedere al blog nel back-end.

Ho aggiunto un nuovo tipo di post con un tipo di capacità bloge un nuovo ruolo utente con tutti i limiti che consentirebbero agli utenti di accedere all'amministratore di aggiungere / modificare il tipo di post personalizzato. Questo funziona per gli amministratori e possono accedere al tipo di post nel back-end. Tuttavia, gli utenti con il mio ruolo personalizzato non possono accedere al back-end.

Post tipo args di nota

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

Registra ruolo

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 );

Aggiungi tappi

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 );

Ho cercato su Google freneticamente di cercare la causa di questo. Ho provato con maiuscole plurale, non plurale, ho provato ad aggiungere funzionalità negli argomenti di tipo post. Tuttavia, non riesco mai ad entrare nel back-end. Non ho nessun altro codice nel tema che potrebbe espellere gli utenti dall'amministratore (ho rimosso il mio codice che li ha espulsi durante il test)

Modifica Qui puoi vedere un dump delle capacità di blog_manager dal database, ci sono un bel po 'di test BS lasciati lì, bu / t che non dovrebbero impedire loro di accedere da ciò che conosco.

'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,
    ),
)

1
Si noti che i ruoli e le funzionalità vengono salvati in modo persistente . Se hai avuto una versione precedente di questo che non consentiva l'accesso, potrebbe essere ancora presente come parte del ruolo. Dump dei dati persistenti e vedere se c'è qualcosa impostato che non dovrebbe essere.
Rarst

Ho aggiunto un dump delle funzionalità del database. Ho solo le funzionalità di 3 post impostate su false che ho nel codice sopra.
Chris Morris,

Vorrei installare il plug-in Editor ruoli utente - wordpress.org/plugins/user-role-editor . Quindi ispeziona manualmente le differenze tra utenti / ruoli: potrebbe esserci qualcosa di conflittuale o mancante.
Welcher,

Ciao @ChrisMorris, come sei andato con questo? Hai trovato una soluzione?
Tim Malone,

Risposte:


3

È difficile risolvere il codice sopra riportato perché è solo una parte del codice effettivo, ma ecco il plug-in minimo necessario per registrare un tipo di post personalizzato (chiamato Esempio) e un ruolo personalizzato (Blog Manager) che ha accesso al tipo di post personalizzato Esempio .

Questo può essere usato anche come parte del file Functions.php di un tema. Usa invece i ganci di attivazione e disattivazione del tema.

<?php
/**
 * Plugin Name: WPSE 186337
 * Description: Debug WordPress StackExchange question 186337
 * Plugin URI: /wordpress/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 );
}

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.