WordPress.org

Make WordPress Core

Ticket #18778: transform_query_filters.diff

File transform_query_filters.diff, 1.3 KB (added by tott, 3 years ago)
  • wp-includes/taxonomy.php

     
    761761                        case 'slug': 
    762762                        case 'name': 
    763763                                $terms = "'" . implode( "','", array_map( 'sanitize_title_for_query', $query['terms'] ) ) . "'"; 
    764                                 $terms = $wpdb->get_col( " 
     764                                $sql_query = " 
    765765                                        SELECT $wpdb->term_taxonomy.$resulting_field 
    766766                                        FROM $wpdb->term_taxonomy 
    767767                                        INNER JOIN $wpdb->terms USING (term_id) 
    768768                                        WHERE taxonomy = '{$query['taxonomy']}' 
    769769                                        AND $wpdb->terms.{$query['field']} IN ($terms) 
    770                                 " ); 
     770                                "; 
     771                                $terms = apply_filters( 'transform_query_' . $query['field'], false, $sql_query ); 
     772                                if ( false === $terms ) 
     773                                        $terms = $wpdb->get_col( $sql_query ); 
    771774                                break; 
    772775 
    773776                        default: 
    774777                                $terms = implode( ',', array_map( 'intval', $query['terms'] ) ); 
    775                                 $terms = $wpdb->get_col( " 
     778                                $sql_query = " 
    776779                                        SELECT $resulting_field 
    777780                                        FROM $wpdb->term_taxonomy 
    778781                                        WHERE taxonomy = '{$query['taxonomy']}' 
    779782                                        AND term_id IN ($terms) 
    780                                 " ); 
     783                                "; 
     784                                $terms = apply_filters( 'transform_query_default', false, $sql_query ); 
     785                                if ( false === $terms ) 
     786                                        $terms = $wpdb->get_col( $sql_query ); 
    781787                } 
    782788 
    783789                if ( 'AND' == $query['operator'] && count( $terms ) < count( $query['terms'] ) ) {