这里有一个解决方案,它将删除原始的author元框,并将其替换为一个类似但自定义的版本,其中包括contributor
角色
添加/删除作者元框的逻辑直接从核心中提取。meta box显示回调也是从核心克隆的,但我们使用role__in
的参数wp_dropdown_users()
这让我们可以指定要在下拉列表中包含哪些角色。
/**
* 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\',
) );
}