it-swarm.com.de

So erzwingen Sie das Auflisten von Mitwirkenden im Dropdown-Menü "Autoren"

Mir ist bekannt, dass Mitwirkende keine Beiträge veröffentlichen können und dass WP Mitwirkende nicht in der Autoren-Dropdown-Liste anzeigen wird (dies wurde hier besprochen: Mitwirkende, die in der Autoren-Dropdown-Liste fehlen ) Auf der Suche nach einer Möglichkeit, das Auflisten von Mitwirkenden im Dropdown-Menü zu erzwingen, wenn ein Autor Inhalte erstellt, damit er mit dem Erstellen von Inhalten für einen bestimmten Mitwirkenden beginnen kann.

Möglich?

3
Riccardo

Hier ist eine Lösung, mit der die ursprüngliche Autoren-Meta-Box entfernt und durch eine ähnliche, aber angepasste Version ersetzt wird, die Benutzer mit der Rolle contributor enthält.

Die Logik zum Hinzufügen/Entfernen der Autoren-Meta-Box wird direkt aus dem Core gezogen. Der Rückruf für die Meta-Box-Anzeige wird ebenfalls aus dem Core geklont, aber wir verwenden den Parameter role__in von wp_dropdown_users() , mit dem wir angeben können, welche Rollen in die Dropdown-Liste aufgenommen werden sollen.

/**
 * 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

Sie können einfach den wp_dropdown_users_args-Filter verwenden, anstatt eine Metabox zu erstellen

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