Make WordPress Core


Ignore:
Timestamp:
02/06/2016 04:50:05 AM (11 years ago)
Author:
boonebgorges
Message:

Allow comments to be queried by 'any' post_type or post_status.

Props kouratoras.
Fixes #35512.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/wp-includes/class-wp-comment-query.php

    r36480 r36486  
    221221         *                                                   Default empty.
    222222         *     @type int          $post_author               Post author ID to limit results by. Default empty.
    223          *     @type string       $post_status               Post status to retrieve affiliated comments for.
    224          *                                                   Default empty.
    225          *     @type string       $post_type                 Post type to retrieve affiliated comments for.
    226          *                                                   Default empty.
     223         *     @type string|array $post_status               Post status or array of post statuses to retrieve
     224         *                                                   affiliated comments for. Pass 'any' to match any value.
     225         *                                                   Default empty.
     226         *     @type string       $post_type                 Post type or array of post types to retrieve affiliated
     227         *                                                   comments for. Pass 'any' to match any value. Default empty.
    227228         *     @type string       $post_name                 Post name to retrieve affiliated comments for.
    228229         *                                                   Default empty.
     
    761762                // If any post-related query vars are passed, join the posts table.
    762763                $join_posts_table = false;
    763                 $plucked = wp_array_slice_assoc( $this->query_vars, array( 'post_author', 'post_name', 'post_parent', 'post_status', 'post_type' ) );
     764                $plucked = wp_array_slice_assoc( $this->query_vars, array( 'post_author', 'post_name', 'post_parent' ) );
    764765                $post_fields = array_filter( $plucked );
    765766
     
    770771                                $esses = array_fill( 0, count( (array) $field_value ), '%s' );
    771772                                $this->sql_clauses['where'][ $field_name ] = $wpdb->prepare( " {$wpdb->posts}.{$field_name} IN (" . implode( ',', $esses ) . ')', $field_value );
     773                        }
     774                }
     775
     776                // 'post_status' and 'post_type' are handled separately, due to the specialized behavior of 'any'.
     777                foreach ( array( 'post_status', 'post_type' ) as $field_name ) {
     778                        $q_values = array();
     779                        if ( ! empty( $this->query_vars[ $field_name ] ) ) {
     780                                $q_values = $this->query_vars[ $field_name ];
     781                                if ( ! is_array( $q_values ) ) {
     782                                        $q_values = explode( ',', $q_values );
     783                                }
     784
     785                                // 'any' will cause the query var to be ignored.
     786                                if ( in_array( 'any', $q_values, true ) || empty( $q_values ) ) {
     787                                        continue;
     788                                }
     789
     790                                $join_posts_table = true;
     791
     792                                $esses = array_fill( 0, count( $q_values ), '%s' );
     793                                $this->sql_clauses['where'][ $field_name ] = $wpdb->prepare( " {$wpdb->posts}.{$field_name} IN (" . implode( ',', $esses ) . ")", $q_values );
    772794                        }
    773795                }
Note: See TracChangeset for help on using the changeset viewer.