WordPress.org

Make WordPress Core

Ticket #14880: 14880.2.diff

File 14880.2.diff, 2.3 KB (added by scribu, 8 years ago)

Also check for WP_Error

  • wp-includes/taxonomy.php

     
    457457        $taxonomies = (array) $taxonomies;
    458458
    459459        foreach ( $taxonomies as $taxonomy ) {
    460                 if ( ! taxonomy_exists( $taxonomy ) )
     460                if ( !taxonomy_exists( $taxonomy ) )
    461461                        return new WP_Error( 'invalid_taxonomy', sprintf( __( 'Invalid Taxonomy: %s' ), $taxonomy ) );
    462462        }
    463463
     
    530530 *   'field' string Which term field is being used. Can be 'term_id', 'slug' or 'name'
    531531 *   'operator' string Can be 'IN' and 'NOT IN'
    532532 *
    533  * @return array|WP_Error List of matching object_ids; WP_Error on failure.
     533 * @return array|bool List of matching object_ids; False on failure.
    534534 */
    535535function wp_tax_query( $queries ) {
    536536        global $wpdb;
    537537
    538         $sql = array();
     538        $sql_list = array();
    539539        foreach ( $queries as $query ) {
    540540                if ( !isset( $query['include_children'] ) )
    541541                        $query['include_children'] = true;
    542542                $query['do_query'] = false;
    543                 $sql[] = get_objects_in_term( $query['terms'], $query['taxonomy'], $query );
     543                $sql = get_objects_in_term( $query['terms'], $query['taxonomy'], $query );
     544
     545                if ( is_wp_error( $sql ) )
     546                        continue;
     547
     548                $sql_list[] = $sql;
    544549        }
    545550
    546         if ( 1 == count( $sql ) )
    547                 return $wpdb->get_col( $sql[0] );
     551        if ( empty( $sql_list ) )
     552                return false;
    548553
     554        if ( 1 == count( $sql_list ) )
     555                return $wpdb->get_col( $sql_list[0] );
     556
    549557        $r = "SELECT object_id FROM $wpdb->term_relationships WHERE 1=1";
    550         foreach ( $sql as $query )
     558        foreach ( $sql_list as $query )
    551559                $r .= " AND object_id IN ($query)";
    552560
    553561        return $wpdb->get_col( $r );
  • wp-includes/query.php

     
    19401940                if ( !empty( $tax_query ) ) {
    19411941                        $this->tax_query = $tax_query;
    19421942
    1943                         $where .= " AND $wpdb->posts.ID IN( " . implode( ', ', wp_tax_query( $tax_query ) ) . ")";
     1943                        $tax_found_ids = wp_tax_query( $this->tax_query );
     1944
     1945                        if ( is_array( $tax_found_ids ) ) {
     1946                                if ( !empty( $tax_found_ids ) )
     1947                                        $where .= " AND $wpdb->posts.ID IN(" . implode( ',', $tax_found_ids ) . ")";
     1948                                else
     1949                                        $where .= " AND 0 = 1";
     1950                        }
    19441951                }
    19451952
    19461953                if ( !empty($q['meta_key']) ) {