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');
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
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 un
level_1
cap à 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: