WordPress.org

Make WordPress Core

Ticket #17019: 17019.diff

File 17019.diff, 2.8 KB (added by kevinB, 4 years ago)

WP_Query supports query_context arg and fields=count, for attachment count filtering and other supplemental usage of get_posts()

  • wp-admin/includes/class-wp-media-list-table.php

     
    4646                $type_links = array(); 
    4747                $_num_posts = (array) wp_count_attachments(); 
    4848                $_total_posts = array_sum($_num_posts) - $_num_posts['trash']; 
    49                 if ( !isset( $total_orphans ) ) 
    50                                 $total_orphans = $wpdb->get_var( "SELECT COUNT( * ) FROM $wpdb->posts WHERE post_type = 'attachment' AND post_status != 'trash' AND post_parent < 1" ); 
     49                if ( !isset( $total_orphans ) ) { 
     50                        $args = array(  
     51                                'fields' => 'count', 
     52                                'post_type' => 'attachment',  
     53                                'post_status' => 'any',  
     54                                'post_parent' => 0, 
     55                                'suppress_filters' => false, 
     56                                'query_context' => 'attachment_orphans_count', 
     57                        ); 
     58                         
     59                        $total_orphans = intval( get_posts( $args ) ); 
     60                } 
     61 
    5162                $matches = wp_match_mime_types(array_keys($post_mime_types), array_keys($_num_posts)); 
    5263                foreach ( $matches as $type => $reals ) 
    5364                        foreach ( $reals as $real ) 
  • wp-admin/includes/media.php

     
    4242 
    4343        $post_id = intval($_REQUEST['post_id']); 
    4444 
    45         if ( $post_id ) 
    46                 $attachments = intval( $wpdb->get_var( $wpdb->prepare( "SELECT count(*) FROM $wpdb->posts WHERE post_type = 'attachment' AND post_status != 'trash' AND post_parent = %d", $post_id ) ) ); 
     45        if ( $post_id ) { 
     46                $args = array(  
     47                        'fields' => 'count', 
     48                        'post_type' => 'attachment', 
     49                        'post_status' => 'any', 
     50                        'post_parent' => $post_id, 
     51                        'suppress_filters' => false, 
     52                        'query_context' => 'gallery_attachment_count', 
     53                ); 
    4754 
     55                $attachments = intval( get_posts( $args ) ); 
     56        } 
     57                 
    4858        if ( empty($attachments) ) { 
    4959                unset($tabs['gallery']); 
    5060                return $tabs; 
  • wp-includes/query.php

     
    13691378                        , 's' 
    13701379                        , 'sentence' 
    13711380                        , 'fields' 
     1381                        , 'query_context' 
    13721382                ); 
    13731383 
    13741384                foreach ( $keys as $key ) { 
     
    20012013                        case 'id=>parent': 
    20022014                                $fields = "$wpdb->posts.ID, $wpdb->posts.post_parent"; 
    20032015                                break; 
     2016                        case 'count': 
     2017                                $fields = "COUNT(*)"; 
     2018                                break; 
    20042019                        default: 
    20052020                                $fields = "$wpdb->posts.*"; 
    20062021                } 
     
    26102625 
    26112626                        return $r; 
    26122627                } 
     2628                 
     2629                if ( 'count' == $q['fields'] ) { 
     2630                        $this->posts = $wpdb->get_var($this->request); 
    26132631 
     2632                        return $this->posts; 
     2633                } 
     2634 
    26142635                $this->posts = $wpdb->get_results($this->request); 
    26152636 
    26162637                // Raw results filter.  Prior to status checks.