web-dev-qa-db-fra.com

Utilisateurs avec des rôles personnalisés non affichés dans la zone de sélection post-auteur

J'utilise une fonction pour créer de nouveaux rôles d'utilisateur et supprimer certaines valeurs par défaut. Cependant, ils n'apparaissent pas dans la boîte postale de l'auteur! Seul l'administrateur apparaît car il est sélectionné en tant qu'administrateur. Aucun utilisateur avec un rôle personnalisé n'apparaît pas. Une idée pourquoi cela se produirait?

Voici ma fonction:

// Add New User Roles
function add_new_roles() {

    // New Roles To Be Added
    $new_roles = array(
        array(
            'role'      => 'senior_pastor',
            'display'   => 'Senior Pastor'
        ),
        array(
            'role'      => 'exec_pastor',
            'display'   => 'Executive Pastor'
        ),
        array(
            'role'      => 'assoc_pastor',
            'display'   => 'Associate Pastor'
        ),
        array(
            'role'      => 'elder',
            'display'   => 'Elder'
        ),
        array(
            'role'      => 'ministry_leader',
            'display'   => 'Ministry Leader'
        )
    );

    foreach($new_roles as $role){
        add_role($role['role'], $role['display'], array(
            'edit_published_posts' => true,
            'upload_files' => true,
            'create_product' => true,
            'publish_posts' => true,
            'delete_published_posts' => true,
            'edit_posts' => true,
            'delete_posts' => true,
            'read' => true
        ));
    }

    // Old Roles To Be Removed
    $old_roles = array(
        'subscriber',
        'contributor',
        'author'
        'editor'
    );

    foreach($old_roles as $role){
        remove_role( $role );
    }
}
add_action('after_switch_theme', 'add_new_roles');
5
souporserious

Trouvé une solution de contournement ci-dessous. Je suppose que cela a à voir avec un bug dans le noyau de Wordpress. Ceci listera TOUS les utilisateurs dans les publications, alors soyez prudent.

// Filter to fix the Post Author Dropdown
function author_override( $output ) {
    global $post, $user_ID;

    // return if this isn't the theme author override dropdown
    if (!preg_match('/post_author_override/', $output)) return $output;

    // return if we've already replaced the list (end recursion)
    if (preg_match ('/post_author_override_replaced/', $output)) return $output;

    // replacement call to wp_dropdown_users
      $output = wp_dropdown_users(array(
        'echo' => 0,
        'name' => 'post_author_override_replaced',
        'selected' => empty($post->ID) ? $user_ID : $post->post_author,
        'include_selected' => true
      ));

      // put the original name back
      $output = preg_replace('/post_author_override_replaced/', 'post_author_override', $output);

    return $output;
}
add_filter('wp_dropdown_users', 'author_override');

le crédit va à ici

6
souporserious

Oui, en effet, c'est un bug, comme indiqué dans le ticket # 16841 .

Tester avec la version 3.6-beta3, c'est toujours là ... La solution de contournement est la suivante: comme le dit scribu :

[...] pour ajouter unlevel_1cap à votre rôle.

C'est PITA, compte tenu de la dépréciation des niveaux d'utilisateurs il y a si longtemps, mais voilà.

Et ... ça marche comme annoncé;)


Pour référence, ce sont les endroits où wp_dropdown_users se produisent dans le noyau:

 export, post list table, meta-boxes, users 

3
brasofilo