web-dev-qa-db-fra.com

Comment forcer la liste des contributeurs dans le menu déroulant des auteurs

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?

3
Riccardo

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',
    ) );
}
1
Dave Romsey

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;
}
4
Mateusz Paulski