WordPress.org

Make WordPress Core

Ticket #11056: post-parent-in.diff

File post-parent-in.diff, 2.9 KB (added by wonderboymusic, 2 years ago)
  • wp-includes/query.php

     
    14071407                } 
    14081408 
    14091409                $array_keys = array('category__in', 'category__not_in', 'category__and', 'post__in', 'post__not_in', 
    1410                         'tag__in', 'tag__not_in', 'tag__and', 'tag_slug__in', 'tag_slug__and'); 
     1410                        'tag__in', 'tag__not_in', 'tag__and', 'tag_slug__in', 'tag_slug__and', 'post_parent__in', 'post_parent__not_in',); 
    14111411 
    14121412                foreach ( $array_keys as $key ) { 
    14131413                        if ( !isset($array[$key]) ) 
     
    21682168                        $where .= " AND {$wpdb->posts}.ID NOT IN ($post__not_in)"; 
    21692169                } 
    21702170 
    2171                 if ( is_numeric($q['post_parent']) ) 
     2171                if ( is_numeric($q['post_parent']) ) { 
    21722172                        $where .= $wpdb->prepare( " AND $wpdb->posts.post_parent = %d ", $q['post_parent'] ); 
    2173  
     2173                } elseif ( $q['post_parent__in'] ) { 
     2174                        $post_parent__in = implode(',', array_map( 'absint', $q['post_parent__in'] )); 
     2175                        $where .= " AND {$wpdb->posts}.post_parent IN ($post_parent__in)"; 
     2176                } elseif ( $q['post_parent__not_in'] ) { 
     2177                        $post_parent__not_in = implode(',',  array_map( 'absint', $q['post_parent__not_in'] )); 
     2178                        $where .= " AND {$wpdb->posts}.post_parent NOT IN ($post_parent__not_in)"; 
     2179                } 
     2180                 
    21742181                if ( $q['page_id'] ) { 
    21752182                        if  ( ('page' != get_option('show_on_front') ) || ( $q['page_id'] != get_option('page_for_posts') ) ) { 
    21762183                                $q['p'] = $q['page_id']; 
     
    23332340                        $orderby = ''; 
    23342341                } elseif ( $q['orderby'] == 'post__in' && ! empty( $post__in ) ) { 
    23352342                        $orderby = "FIELD( {$wpdb->posts}.ID, $post__in )"; 
     2343                } elseif ( $q['orderby'] == 'post_parent__in' && ! empty( $post_parent__in ) ) { 
     2344                        $orderby = "FIELD( {$wpdb->posts}.post_parent, $post_parent__in )"; 
    23362345                } else { 
    23372346                        // Used to filter values 
    23382347                        $allowed_keys = array('name', 'author', 'date', 'title', 'modified', 'menu_order', 'parent', 'ID', 'rand', 'comment_count'); 
  • wp-includes/class-wp.php

     
    2525         * @since 2.0.0 
    2626         * @var array 
    2727         */ 
    28         var $private_query_vars = array('offset', 'posts_per_page', 'posts_per_archive_page', 'showposts', 'nopaging', 'post_type', 'post_status', 'category__in', 'category__not_in', 'category__and', 'tag__in', 'tag__not_in', 'tag__and', 'tag_slug__in', 'tag_slug__and', 'tag_id', 'post_mime_type', 'perm', 'comments_per_page', 'post__in', 'post__not_in'); 
     28        var $private_query_vars = array('offset', 'posts_per_page', 'posts_per_archive_page', 'showposts', 'nopaging', 'post_type', 'post_status', 'category__in', 'category__not_in', 'category__and', 'tag__in', 'tag__not_in', 'tag__and', 'tag_slug__in', 'tag_slug__and', 'tag_id', 'post_mime_type', 'perm', 'comments_per_page', 'post__in', 'post__not_in', 'post_parent__in', 'post_parent__not_in'); 
    2929 
    3030        /** 
    3131         * Extra query variables set by the user.