停止在添加新帖子或页面上加载“协作者”用户?

时间:2012-08-01 作者:Dan Cortazio

因此,我们的网站有大约20k个“合作者”类型的用户,我们希望停止在“添加新帖子”或“添加新页面”页面的选择框中加载所有这些用户。可能只加载使用函数的作者和以上类型的用户。php

有人能帮忙吗?=)

1 个回复
最合适的回答,由SO网友:bueltge 整理而成

此元框正在使用函数wp_dropdown_users() 列出所有用户。它只有一个过滤器可以更改输出:wp_dropdown_users.

但是这个过滤器只提供完整的标记和用户。要通过regex解析用户名,检查他们的角色,然后返回一个新的HTML,既不容易也不快速。

我认为最好的方法是停用这个元框。

remove_meta_box(\'authordiv\', \'post\', \'normal\');
然后通过插件创建一个自定义元框,并只列出博客的作者。

这个小插件正是这样做的。

<?php
/**
 * Plugin Name: Author Meta Box only with authors
 * Plugin URI:  http://wordpress.stackexchange.com/questions/60429/stop-loading-collaborators-users-on-add-new-post-or-page
 * Description: 
 * Author:      Frank Bültge
 * Author URI:  http://bueltge.de
 * License:     GPLv3
 */
add_action( \'admin_menu\', \'fb_remove_author_meta_boxes\' );
function fb_remove_author_meta_boxes() {

    remove_meta_box(\'authordiv\', \'post\', \'normal\');
    add_meta_box(\'fb_authordiv\', __(\'Author\'), \'fb_post_author_meta_box\', \'post\', \'normal\', \'core\');
}

function fb_post_author_meta_box( $post ) {
    global $user_ID;

    // get all authors
    $wp_user_search = new WP_User_Search( \'\', \'\', \'author\' );
    $authors        = join( \', \', $wp_user_search->get_results() ); // user IDs
    ?>
    <label class="screen-reader-text" for="post_author_override"><?php _e(\'Author\'); ?></label>
    <?php
    wp_dropdown_users( array(
        \'include\' => $authors,
        \'who\' => \'authors\',
        \'name\' => \'post_author_override\',
        \'selected\' => empty($post->ID) ? $user_ID : $post->post_author,
        \'include_selected\' => true
    ) );
}

Gist 3225957 for Download

结束