WordPress.org

Make WordPress Core

Ticket #36208: 36208.patch

File 36208.patch, 2.1 KB (added by Clorith, 3 years ago)
  • src/wp-includes/class-wp-comment-query.php

    IDEA additional info:
    Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
    <+>UTF-8
     
    287287                        'post_parent' => '',
    288288                        'post_status' => '',
    289289                        'post_type' => '',
     290                        'post_type__in' => get_post_types(),
     291                        'post_type__not_in' => '',
    290292                        'status' => 'all',
    291293                        'type' => '',
    292294                        'type__in' => '',
     
    761763
    762764                // If any post-related query vars are passed, join the posts table.
    763765                $join_posts_table = false;
    764                 $plucked = wp_array_slice_assoc( $this->query_vars, array( 'post_author', 'post_name', 'post_parent' ) );
     766                $plucked = wp_array_slice_assoc( $this->query_vars, array( 'post_author', 'post_name', 'post_parent', 'post_type__in', 'post_type__not_in' ) );
    765767                $post_fields = array_filter( $plucked );
    766768
    767769                if ( ! empty( $post_fields ) ) {
     
    769771                        foreach ( $post_fields as $field_name => $field_value ) {
    770772                                // $field_value may be an array.
    771773                                $esses = array_fill( 0, count( (array) $field_value ), '%s' );
    772                                 $this->sql_clauses['where'][ $field_name ] = $wpdb->prepare( " {$wpdb->posts}.{$field_name} IN (" . implode( ',', $esses ) . ')', $field_value );
     774
     775                                /*
     776                                 * Introduce a switch case for the field names to handle special cases where the $field_name does
     777                                 * not match the actual column name
     778                                 */
     779                                switch( $field_name ) {
     780                                        case 'post_type__in':
     781                                                $this->sql_clauses['where'][ $field_name ] = $wpdb->prepare( " {$wpdb->posts}.post_type IN (" . implode( ',', $esses ) . ')', $field_value );
     782                                                break;
     783                                        case 'post_type__not_in':
     784                                                $this->sql_clauses['where'][ $field_name ] = $wpdb->prepare( " {$wpdb->posts}.post_type NOT IN (" . implode( ',', $esses ) . ')', $field_value );
     785                                                break;
     786                                        default:
     787                                                $this->sql_clauses['where'][ $field_name ] = $wpdb->prepare( " {$wpdb->posts}.{$field_name} IN (" . implode( ',', $esses ) . ')', $field_value );
     788                                }
    773789                        }
    774790                }
    775791