如何在作者下拉菜单中强制列出贡献者

时间:2017-06-05 作者:Riccardo

我知道投稿人不能发布帖子,而且根据设计,WP不会在作者下拉列表中显示投稿人(这里讨论了这一点:Contributors missing from author dropdown), 然而,我正在寻找一种方法,强制在下拉菜单中列出贡献者,当作者创建内容时,允许他/她开始为给定贡献者创建内容。

可能的

2 个回复
最合适的回答,由SO网友:Dave Romsey 整理而成

这里有一个解决方案,它将删除原始的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\',
    ) );
}

SO网友:Mateusz Paulski

你可以使用wp_dropdown_users_args 筛选而不是创建元盒

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;
}

结束

相关推荐

Get_Author_Posts_url和Get_the_Author(发布2个帖子)的值不同

警告——我不是程序员,我是一个自学了基本php/wordpress主题的设计师我意识到这是一个非常具体的问题,但我希望专家们能帮助我找到一些我忽视的普遍原则。我正在使用插件发布2篇帖子来生成CPT“演讲者”与wordpress用户之间的关系(相关plugin documentation)然后,我想在演讲人的单一页面上显示相关用户所有博客帖子的链接。我的问题是,get\\u author\\u posts\\u url会返回指向正确相关用户的链接,而get\\u author会获得其他一些看似随机的用户。所