如何将作者过滤器添加到媒体库?

时间:2015-10-06 作者:j08691

默认情况下,WordPress媒体库允许您按类型或日期筛选结果。如何在列表中添加第三个下拉列表并按作者筛选?

目前我们有:

enter image description here

我想要以下内容:

enter image description here

根据this ticket (除非我读错了)代码是三年前添加到/wp-admin/includes/class-wp-media-list-table.php 允许这样做,但我不知道这到底是怎么回事。

The codex 还表示可以修改编辑页面或帖子时获得的媒体库模式窗口:

add_filter( \'ajax_query_attachments_args\', \'show_current_user_attachments\', 10, 1 );
function show_current_user_attachments( $query = array() ) {
    $user_id = get_current_user_id();
    if( $user_id ) {
        $query[\'author\'] = $user_id;
    }
    return $query;
}
因此,我认为可以在主媒体库页面上执行类似操作,但我不知道如何执行。

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

在您的问题中,您显示的图像是网格视图,而codex属于列表视图。所以我不知道你在说哪一部分。

Grid View : 除非您更改核心,否则这是不可能的,因为它们不提供任何挂钩,而整个媒体部分是由jquery、主干网和unserscore创建的。请查看媒体网格。min.js或媒体网格。js表示代码。

List View : 在此视图中,您可以轻松添加下拉列表。下面是执行此操作的脚本。如果需要,请添加parse_querypre_get_posts 筛选以更改下拉列表的查询。当我设置时author 对于url,wordpress本身为我设置了它,所以需要这些过滤器。

function media_add_author_dropdown()
{
    $scr = get_current_screen();
    if ( $scr->base !== \'upload\' ) return;

    $author   = filter_input(INPUT_GET, \'author\', FILTER_SANITIZE_STRING );
    $selected = (int)$author > 0 ? $author : \'-1\';
    $args = array(
        \'show_option_none\'   => \'All Authors\',
        \'name\'               => \'author\',
        \'selected\'           => $selected
    );
    wp_dropdown_users( $args );
}
add_action(\'restrict_manage_posts\', \'media_add_author_dropdown\');
以下是参考资料

  1. restrict_manage_posts
  2. pre_get_posts
  3. parse_query
Edit #1: Added author filter after this comment

function author_filter($query) {
    if ( is_admin() && $query->is_main_query() ) {
        if (isset($_GET[\'author\']) && $_GET[\'author\'] == -1) {
            $query->set(\'author\', \'\');
        }
    }
}
add_action(\'pre_get_posts\',\'author_filter\');

SO网友:sbounty

如果您自己的站点需要此代码,则可以转到列表视图并单击下面的作者姓名,而不是代码Author 柱这将为您提供特定作者的媒体列表。请参见下面的屏幕截图。

enter image description here

但如果您为任何客户机执行此操作,则需要一个代码来提供用户友好的方式:)如屏幕截图中显示的下拉列表:)