WordPress.org

Make WordPress Core

Ticket #11056: 11056.diff

File 11056.diff, 3.0 KB (added by kovshenin, 5 years ago)
  • wp-includes/query.php

     
    14061406                                $array[$key] = '';
    14071407                }
    14081408
    1409                 $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');
     1409                $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', '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                } 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                }
    21732180
    21742181                if ( $q['page_id'] ) {
    21752182                        if  ( ('page' != get_option('show_on_front') ) || ( $q['page_id'] != get_option('page_for_posts') ) ) {
     
    23432350                        $orderby = '';
    23442351                } elseif ( $q['orderby'] == 'post__in' && ! empty( $post__in ) ) {
    23452352                        $orderby = "FIELD( {$wpdb->posts}.ID, $post__in )";
     2353                } elseif ( $q['orderby'] == 'post_parent__in' && ! empty( $post_parent__in ) ) {
     2354                        $orderby = "FIELD( {$wpdb->posts}.post_parent, $post_parent__in )";
    23462355                } else {
    23472356                        // Used to filter values
    23482357                        $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.