Make WordPress Core


Ignore:
Timestamp:
08/29/2013 06:48:29 PM (11 years ago)
Author:
wonderboymusic
Message:

Improve the include / exclude SQL generation in get_pages() by using IN and NOT IN where applicable. Adds unit tests for include / exclude.

Fixes #22074.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/wp-includes/post.php

    r25160 r25168  
    36723672
    36733673    $inclusions = '';
    3674     if ( !empty($include) ) {
     3674    if ( ! empty( $include ) ) {
    36753675        $child_of = 0; //ignore child_of, parent, exclude, meta_key, and meta_value params if using include
    36763676        $parent = -1;
     
    36803680        $hierarchical = false;
    36813681        $incpages = wp_parse_id_list( $include );
    3682         if ( ! empty( $incpages ) ) {
    3683             foreach ( $incpages as $incpage ) {
    3684                 if (empty($inclusions))
    3685                     $inclusions = $wpdb->prepare(' AND ( ID = %d ', $incpage);
    3686                 else
    3687                     $inclusions .= $wpdb->prepare(' OR ID = %d ', $incpage);
    3688             }
    3689         }
    3690     }
    3691     if (!empty($inclusions))
    3692         $inclusions .= ')';
     3682        if ( ! empty( $incpages ) )
     3683            $inclusions = ' AND ID IN (' . implode( ',', array_map( 'intval', $incpages ) ) .  ')';
     3684    }
    36933685
    36943686    $exclusions = '';
    3695     if ( !empty($exclude) ) {
     3687    if ( ! empty( $exclude ) ) {
    36963688        $expages = wp_parse_id_list( $exclude );
    3697         if ( ! empty( $expages ) ) {
    3698             foreach ( $expages as $expage ) {
    3699                 if (empty($exclusions))
    3700                     $exclusions = $wpdb->prepare(' AND ( ID <> %d ', $expage);
    3701                 else
    3702                     $exclusions .= $wpdb->prepare(' AND ID <> %d ', $expage);
    3703             }
    3704         }
    3705     }
    3706     if (!empty($exclusions))
    3707         $exclusions .= ')';
     3689        if ( ! empty( $expages ) )
     3690            $exclusions = ' AND ID NOT IN (' . implode( ',', array_map( 'intval', $expages ) ) .  ')';
     3691    }
    37083692
    37093693    $author_query = '';
Note: See TracChangeset for help on using the changeset viewer.