WordPress.org

Make WordPress Core

Ticket #9383: garyc40.9383.diff

File garyc40.9383.diff, 3.4 KB (added by garyc40, 3 years ago)

use IN and NOT IN instead of a series of AND id <> %s, handle exclude_slugs and include_slugs

  • wp-includes/functions.php

    diff --git wp-includes/functions.php wp-includes/functions.php
    index 39b7bb1..be55691 100644
    function wp_parse_id_list( $list ) { 
    30043004} 
    30053005 
    30063006/** 
     3007 * Clean up an array, comma- or space-separated list of IDs 
     3008 * 
     3009 * @since 3.2.0 
     3010 * 
     3011 * @param array|string $list 
     3012 * @return array Sanitized array of slugs 
     3013 */ 
     3014function wp_parse_slug_list( $list ) { 
     3015        if ( ! is_array( $list ) ) 
     3016                $list = preg_split('/[\s,]+/', $list); 
     3017                 
     3018        return array_unique( array_map( 'sanitize_title', $list ) ); 
     3019} 
     3020 
     3021/** 
    30073022 * Extract a slice of an array, given a list of keys 
    30083023 * 
    30093024 * @since 3.1.0 
  • wp-includes/post.php

    diff --git wp-includes/post.php wp-includes/post.php
    index 3c3759e..2607898 100644
    function &get_pages($args = '') { 
    32933293                'child_of' => 0, 'sort_order' => 'ASC', 
    32943294                'sort_column' => 'post_title', 'hierarchical' => 1, 
    32953295                'exclude' => array(), 'include' => array(), 
     3296                'exclude_slugs' => array(), 'include_slugs' => array(), 
    32963297                'meta_key' => '', 'meta_value' => '', 
    32973298                'authors' => '', 'parent' => -1, 'exclude_tree' => '', 
    32983299                'number' => '', 'offset' => 0, 
    function &get_pages($args = '') { 
    33263327                $cache = array(); 
    33273328 
    33283329        $inclusions = ''; 
    3329         if ( !empty($include) ) { 
     3330        if ( ! empty( $include ) || ! empty( $include_slugs ) ) { 
    33303331                $child_of = 0; //ignore child_of, parent, exclude, meta_key, and meta_value params if using include 
    33313332                $parent = -1; 
    33323333                $exclude = ''; 
    33333334                $meta_key = ''; 
    33343335                $meta_value = ''; 
    33353336                $hierarchical = false; 
    3336                 $incpages = wp_parse_id_list( $include ); 
    3337                 if ( ! empty( $incpages ) ) { 
    3338                         foreach ( $incpages as $incpage ) { 
    3339                                 if (empty($inclusions)) 
    3340                                         $inclusions = $wpdb->prepare(' AND ( ID = %d ', $incpage); 
    3341                                 else 
    3342                                         $inclusions .= $wpdb->prepare(' OR ID = %d ', $incpage); 
    3343                         } 
     3337                 
     3338                if ( ! empty( $include ) ) { 
     3339                        $incpages = wp_parse_id_list( $include ); 
     3340                        if ( ! empty( $incpages ) ) 
     3341                                $inclusions .= $wpdb->prepare( 'ID IN (' . rtrim( str_repeat( '%d,', count( $incpages ) ), ',' ) . ')', $incpages ); 
     3342                } 
     3343                 
     3344                if ( ! empty( $include ) ) { 
     3345                        $incpages = wp_parse_slug_list( $include_slugs ); 
     3346                        if ( ! empty( $inclusions ) ) 
     3347                                $inclusions .= ' OR '; 
     3348 
     3349                        if ( ! empty( $incpages ) ) 
     3350                                $inclusions .= $wpdb->prepare( 'post_name IN (' . rtrim( str_repeat( '%s,', count( $incpages ) ), ',' ) . ')', $incpages ); 
    33443351                } 
    33453352        } 
    3346         if (!empty($inclusions)) 
    3347                 $inclusions .= ')'; 
     3353         
     3354        if ( ! empty( $inclusions ) ) 
     3355                $inclusions = ' AND ( '. $inclusions . ' )'; 
    33483356 
    33493357        $exclusions = ''; 
    3350         if ( !empty($exclude) ) { 
     3358        if ( ! empty($exclude) ) { 
    33513359                $expages = wp_parse_id_list( $exclude ); 
    3352                 if ( ! empty( $expages ) ) { 
    3353                         foreach ( $expages as $expage ) { 
    3354                                 if (empty($exclusions)) 
    3355                                         $exclusions = $wpdb->prepare(' AND ( ID <> %d ', $expage); 
    3356                                 else 
    3357                                         $exclusions .= $wpdb->prepare(' AND ID <> %d ', $expage); 
    3358                         } 
    3359                 } 
     3360                if ( ! empty( $expages ) ) 
     3361                        $exclusions .= $wpdb->prepare( ' AND ( ID NOT IN (' . rtrim( str_repeat( '%d,', count( $expages ) ), ',' ) . ') )', $expages ); 
     3362        } 
     3363         
     3364        if ( ! empty( $exclude_slugs ) ) { 
     3365                $expages = wp_parse_slug_list( $exclude_slugs ); 
     3366                if ( ! empty( $expages ) ) 
     3367                        $exclusions .= $wpdb->prepare( ' AND ( post_name NOT IN (' . rtrim( str_repeat( '%s,', count( $expages ) ), ',' ) . ') )', $expages ); 
    33603368        } 
    3361         if (!empty($exclusions)) 
    3362                 $exclusions .= ')'; 
    33633369 
    33643370        $author_query = ''; 
    33653371        if (!empty($authors)) {