WordPress.org

Make WordPress Core

Ticket #17019: 17019.diff

File 17019.diff, 2.8 KB (added by kevinB, 7 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.