WordPress.org

Make WordPress Core

Ticket #11056: post-parent-in.diff

File post-parent-in.diff, 2.9 KB (added by wonderboymusic, 6 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.