Je suis conscient que les contributeurs ne peuvent pas publier de messages et que, par conception, WP ne montrera pas les contributeurs dans la liste déroulante des auteurs (cela a été discuté ici: . Collaborateurs manquants dans la liste des auteurs. ), mais je cherche un moyen de forcer la liste des contributeurs dans le menu déroulant lorsqu'un auteur créera un contenu lui permettant de commencer à créer du contenu pour un contributeur donné.
Possible?
Voici une solution qui supprimera la méta-boîte de l'auteur d'origine et la remplacera par une version similaire, mais personnalisée, incluant les utilisateurs dotés du rôle contributor
.
La logique d'ajout/suppression de la méta-boîte auteur est extraite directement du noyau. Le rappel d’affichage de la méta-boîte est également cloné à partir du noyau, mais nous utilisons le paramètre role__in
de wp_dropdown_users()
qui nous permet de spécifier les rôles que nous voulons inclure dans le menu déroulant.
/**
* Removes the original author meta box and replaces it
* with a customized version.
*/
add_action( 'add_meta_boxes', 'wpse_replace_post_author_meta_box' );
function wpse_replace_post_author_meta_box() {
$post_type = get_post_type();
$post_type_object = get_post_type_object( $post_type );
if ( post_type_supports( $post_type, 'author' ) ) {
if ( is_super_admin() || current_user_can( $post_type_object->cap->edit_others_posts ) ) {
remove_meta_box( 'authordiv', $post_type, 'core' );
add_meta_box( 'authordiv', __( 'Author', 'text-domain' ), 'wpse_post_author_meta_box', null, 'normal' );
}
}
}
/**
* Display form field with list of authors.
* Modified version of post_author_meta_box().
*
* @global int $user_ID
*
* @param object $post
*/
function wpse_post_author_meta_box( $post ) {
global $user_ID;
?>
<label class="screen-reader-text" for="post_author_override"><?php _e( 'Author', 'text-domain' ); ?></label>
<?php
wp_dropdown_users( array(
'role__in' => [ 'administrator', 'author', 'contributor' ], // Add desired roles here.
'name' => 'post_author_override',
'selected' => empty( $post->ID ) ? $user_ID : $post->post_author,
'include_selected' => true,
'show' => 'display_name_with_login',
) );
}
Vous pouvez simplement utiliser le filtre wp_dropdown_users_args
au lieu de créer metabox
add_filter('wp_dropdown_users_args', 'display_administrators_and_subscribers_in_author_dropdown', 10, 2);
function display_administrators_and_subscribers_in_author_dropdown($query_args, $r)
{
if (isset($r['name']) && $r['name'] === 'post_author_override') {
if (isset($query_args['who'])) {
unset($query_args['who']);
}
$query_args['role__in'] = array('administrator', 'subscriber');
}
return $query_args;
}