按媒体库中的帖子类别过滤

时间:2013-12-17 作者:whodeee

我正在试图找到一种方法,根据媒体项所分配的帖子类别过滤媒体库。我可以看出,你可以按“附加到”排序,但这只让我了解了一点。有什么建议吗?

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

您可以使用pre_get_posts 筛选查询。

所以你可以

从查询变量中检索类别检索具有该类别的帖子将媒体查询设置为仅包括以该帖子为父级的帖子,以提供您可以使用的UIrestrict_manage_posts 挂钩以输出类别下拉列表。

add_action(\'pre_get_posts\', \'my_filter_media_by_cat\');
add_action( \'restrict_manage_posts\', \'my_add_media_cat_dropdown\' );

function my_filter_media_by_cat( $q ) {
  $scr = get_current_screen();
  $cat = filter_input(INPUT_GET, \'postcat\', FILTER_SANITIZE_STRING );   
  if ( ! $q->is_main_query() || ! is_admin() || (int)$cat <= 0 || $scr->base !== \'upload\' )
      return;
  // get the posts
  $posts = get_posts( \'nopaging=1&category=\' . $cat );
  // get post ids
  $pids = ( ! empty( $posts ) ) ? wp_list_pluck($posts, \'ID\') : false;
  if ( ! empty($pids) ) {
    $pidstxt = implode($pids, \',\');
    global $wpdb;
    // get the ids of media having retrieved posts as parent
    $mids = $wpdb->get_col("SELECT ID FROM $wpdb->posts WHERE post_parent IN ($pidstxt)");
    if ( ! empty($mids) ) {
      // force media query to retrieve only media having retrieved posts as parent
      $q->set( \'post__in\', $mids );
    } else {
      // force media query to return no posts
      $q->set( \'p\', -1 ); // let query found nothing
    }
  }
}

function my_add_media_cat_dropdown() {
  $scr = get_current_screen();
  if ( $scr->base !== \'upload\' ) return;
  $cat = filter_input(INPUT_GET, \'postcat\', FILTER_SANITIZE_STRING );   
  $selected = (int)$cat > 0 ? $cat : \'-1\';  
  $args = array(
      \'show_option_none\'   => \'All Post Categories\',
      \'name\'               => \'postcat\',
      \'selected\'           => $selected
  ); 
  wp_dropdown_categories( $args );
}
这段代码的缺点是你必须运行3个查询来过滤媒体。。。

UI上的结果:

enter image description here

结束

相关推荐

Completely disable categories

有人知道有一个插件在WP中禁用了类别吗?我的意思是,对于现有用户和新用户,完全自动地从视图中隐藏该功能。特别是:WP admin菜单、帖子列表、它的屏幕选项和过滤器、帖子编辑器和它的屏幕选项、widgets屏幕、writing和permalink设置屏幕我遇到了各种老化的黑客来完成这一部分工作,其中大部分是用来禁用元框的代码和一些用来禁用permalink前缀的插件。我之所以选择这样做,是希望一些网页设计师或开发人员能够掌握整套功能。如果没有,在过去的3-4年中,是否会有新的API使过程变得更简单(我的W