WordPress.org

Make WordPress Core

Ticket #9383: 9383.2.diff

File 9383.2.diff, 4.5 KB (added by wonderboymusic, 5 years ago)
  • wp-includes/functions.php

    diff --git wp-includes/functions.php wp-includes/functions.php
    index 8200695..bb14b29 100644
    function wp_parse_id_list( $list ) { 
    25862586}
    25872587
    25882588/**
     2589 * Clean up an array, comma- or space-separated list of slugs.
     2590 *
     2591 * @since 3.7.0
     2592 *
     2593 * @param array|string $list
     2594 * @return array Sanitized array of slugs
     2595 */
     2596function wp_parse_slug_list( $list ) {
     2597        if ( ! is_array( $list ) )
     2598                $list = preg_split( '/[\s,]+/', $list );
     2599
     2600        return array_unique( array_map( 'sanitize_title', $list ) );
     2601}
     2602
     2603/**
    25892604 * Extract a slice of an array, given a list of keys.
    25902605 *
    25912606 * @since 3.1.0
  • wp-includes/post.php

    diff --git wp-includes/post.php wp-includes/post.php
    index 03f31ef..55fa078 100644
    function get_page_uri($page) { 
    35763576 * @param mixed $args Optional. Array or string of options that overrides defaults.
    35773577 * @return array List of pages matching defaults or $args
    35783578 */
    3579 function get_pages($args = '') {
     3579function get_pages( $args = '' ) {
    35803580        global $wpdb;
    35813581
    35823582        $pages = false;
    function get_pages($args = '') { 
    35853585                'child_of' => 0, 'sort_order' => 'ASC',
    35863586                'sort_column' => 'post_title', 'hierarchical' => 1,
    35873587                'exclude' => array(), 'include' => array(),
     3588                'exclude_slugs' => array(), 'include_slugs' => array(),
    35883589                'meta_key' => '', 'meta_value' => '',
    35893590                'authors' => '', 'parent' => -1, 'exclude_tree' => '',
    35903591                'number' => '', 'offset' => 0,
    function get_pages($args = '') { 
    35983599
    35993600        // Make sure the post type is hierarchical
    36003601        $hierarchical_post_types = get_post_types( array( 'hierarchical' => true ) );
    3601         if ( !in_array( $post_type, $hierarchical_post_types ) )
     3602        if ( ! in_array( $post_type, $hierarchical_post_types ) )
    36023603                return $pages;
    36033604
    36043605        // Make sure we have a valid post status
    3605         if ( !is_array( $post_status ) )
     3606        if ( ! is_array( $post_status ) )
    36063607                $post_status = explode( ',', $post_status );
    36073608        if ( array_diff( $post_status, get_post_stati() ) )
    36083609                return $pages;
    function get_pages($args = '') { 
    36193620        if ( $cache = wp_cache_get( $cache_key, 'posts' ) ) {
    36203621                // Convert to WP_Post instances
    36213622                $pages = array_map( 'get_post', $cache );
    3622                 $pages = apply_filters('get_pages', $pages, $r);
     3623                $pages = apply_filters( 'get_pages', $pages, $r );
    36233624                return $pages;
    36243625        }
    36253626
    3626         if ( !is_array($cache) )
     3627        if ( ! is_array( $cache ) )
    36273628                $cache = array();
    36283629
    36293630        $inclusions = '';
    3630         if ( !empty($include) ) {
     3631        if ( ! empty( $include ) || ! empty( $include_slugs ) ) {
    36313632                $child_of = 0; //ignore child_of, parent, exclude, meta_key, and meta_value params if using include
    36323633                $parent = -1;
    36333634                $exclude = '';
    36343635                $meta_key = '';
    36353636                $meta_value = '';
    36363637                $hierarchical = false;
    3637                 $incpages = wp_parse_id_list( $include );
    3638                 if ( ! empty( $incpages ) ) {
    3639                         foreach ( $incpages as $incpage ) {
    3640                                 if (empty($inclusions))
    3641                                         $inclusions = $wpdb->prepare(' AND ( ID = %d ', $incpage);
    3642                                 else
    3643                                         $inclusions .= $wpdb->prepare(' OR ID = %d ', $incpage);
    3644                         }
     3638
     3639                if ( ! empty( $include ) ) {
     3640                        $incpages = wp_parse_id_list( $include );
     3641                        if ( ! empty( $incpages ) )
     3642                                $inclusions .= $wpdb->prepare( 'ID IN (' . rtrim( str_repeat( '%d,', count( $incpages ) ), ',' ) . ')', $incpages );
     3643                }
     3644
     3645                if ( ! empty( $include_slugs ) ) {
     3646                        $incpages = wp_parse_slug_list( $include_slugs );
     3647                        if ( ! empty( $inclusions ) )
     3648                                $inclusions .= ' OR ';
     3649
     3650                        if ( ! empty( $incpages ) )
     3651                                $inclusions .= $wpdb->prepare( 'post_name IN (' . rtrim( str_repeat( '%s,', count( $incpages ) ), ',' ) . ')', $incpages );
    36453652                }
    36463653        }
    3647         if (!empty($inclusions))
    3648                 $inclusions .= ')';
     3654
     3655        if ( ! empty( $inclusions ) )
     3656                $inclusions = ' AND ( '. $inclusions . ' )';
    36493657
    36503658        $exclusions = '';
    3651         if ( !empty($exclude) ) {
     3659        if ( ! empty( $exclude ) ) {
    36523660                $expages = wp_parse_id_list( $exclude );
    3653                 if ( ! empty( $expages ) ) {
    3654                         foreach ( $expages as $expage ) {
    3655                                 if (empty($exclusions))
    3656                                         $exclusions = $wpdb->prepare(' AND ( ID <> %d ', $expage);
    3657                                 else
    3658                                         $exclusions .= $wpdb->prepare(' AND ID <> %d ', $expage);
    3659                         }
    3660                 }
     3661                if ( ! empty( $expages ) )
     3662                        $exclusions .= $wpdb->prepare( ' AND ( ID NOT IN (' . rtrim( str_repeat( '%d,', count( $expages ) ), ',' ) . ') )', $expages );
     3663        }
     3664
     3665        if ( ! empty( $exclude_slugs ) ) {
     3666                $expages = wp_parse_slug_list( $exclude_slugs );
     3667                if ( ! empty( $expages ) )
     3668                        $exclusions .= $wpdb->prepare( ' AND ( post_name NOT IN (' . rtrim( str_repeat( '%s,', count( $expages ) ), ',' ) . ') )', $expages );
    36613669        }
    3662         if (!empty($exclusions))
    3663                 $exclusions .= ')';
    36643670
    36653671        $author_query = '';
    36663672        if (!empty($authors)) {