媒体库中的数据按照文章类别过滤
  • 2年前
  • 媒体库中的数据按照文章类别过滤377
  • 个人喜欢折腾,这里面的功能完全可以通过插件来解决,而且更加强大,但是我个人方面仅仅是希望添加一个每天按照分类筛选的功能,经过寻找,确实是找到了相关代码,测试过后也没有任何问题。

    这里直接附上代码:

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

    代码逻辑方面备注也是相当清楚了,大家有兴趣的可以看看。

    如果你觉得上面的代码比较复杂。可以考虑下面的插件:

    https://wordpress.org/plugins/media-library-organizer/ ---------------------------

    2022年09月04日更新:通过该插件可以实现和上方代码一样的功能: https://cn.wordpress.org/plugins/media-library-filter/

  • 联系我们
  • 有任何疑问欢迎联系我们
  • WP新手学园
  • 媒体库中的数据按照文章类别过滤
  • 邮箱:2830776172#qq.com(#换成@)
  • 回复时间:9:00-19:00
  • 如果提问.请图文并茂,详细描述问题
  • 媒体库中的数据按照文章类别过滤
  • 微信号:wpxsxy_official
  • 仅支持付费解决问题
  • *并非所有问题都会被回复
  • 媒体库中的数据按照文章类别过滤
  • QQ:2830776172
  • 回复时间:9:00-19:00
  • QQ仅支持付费提问,时间有限,尽情谅解
  • 媒体库中的数据按照文章类别过滤
  • QQ群:198768181
  • 有问题可以进去提问,寻求群友帮助
  • *并非所有问题都会被回复
  • 媒体库中的数据按照文章类别过滤
  • 咸鱼:WP新手学园
  • 如果对于直接交易不放心,可以走闲鱼
  • *咸鱼价格不作为最终交易价格
  • 备案号:鄂ICP备2021011647号-1