Make WordPress Core

Ticket #57303: all-wp-query.patch

File all-wp-query.patch, 4.6 KB (added by madeinua, 21 months ago)
  • class-wp-query.php

    IDEA additional info:
    Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
    <+>UTF-8
    diff --git a/class-wp-query.php b/class-wp-query.php
    a b  
    20592059                }
    20602060
    20612061                // If we've got a post_type AND it's not "any" post_type.
    2062                 if ( ! empty( $q['post_type'] ) && 'any' !== $q['post_type'] ) {
     2062                if ( ! empty( $q['post_type'] ) && !in_array($q['post_type'], ['any', 'all']) ) {
    20632063                        foreach ( (array) $q['post_type'] as $_post_type ) {
    20642064                                $ptype_obj = get_post_type_object( $_post_type );
    20652065                                if ( ! $ptype_obj || ! $ptype_obj->query_var || empty( $q[ $ptype_obj->query_var ] ) ) {
     
    24842484                }
    24852485
    24862486                $skip_post_status = false;
    2487                 if ( 'any' === $post_type ) {
    2488                         $in_search_post_types = get_post_types( array( 'exclude_from_search' => false ) );
    2489                         if ( empty( $in_search_post_types ) ) {
    2490                                 $post_type_where  = ' AND 1=0 ';
    2491                                 $skip_post_status = true;
    2492                         } else {
    2493                                 $post_type_where = " AND {$wpdb->posts}.post_type IN ('" . implode( "', '", array_map( 'esc_sql', $in_search_post_types ) ) . "')";
    2494                         }
    2495                 } elseif ( ! empty( $post_type ) && is_array( $post_type ) ) {
    2496                         $post_type_where = " AND {$wpdb->posts}.post_type IN ('" . implode( "', '", esc_sql( $post_type ) ) . "')";
    2497                 } elseif ( ! empty( $post_type ) ) {
    2498                         $post_type_where  = $wpdb->prepare( " AND {$wpdb->posts}.post_type = %s", $post_type );
    2499                         $post_type_object = get_post_type_object( $post_type );
    2500                 } elseif ( $this->is_attachment ) {
    2501                         $post_type_where  = " AND {$wpdb->posts}.post_type = 'attachment'";
    2502                         $post_type_object = get_post_type_object( 'attachment' );
    2503                 } elseif ( $this->is_page ) {
    2504                         $post_type_where  = " AND {$wpdb->posts}.post_type = 'page'";
    2505                         $post_type_object = get_post_type_object( 'page' );
    2506                 } else {
    2507                         $post_type_where  = " AND {$wpdb->posts}.post_type = 'post'";
    2508                         $post_type_object = get_post_type_object( 'post' );
    2509                 }
     2487
     2488        if ( 'all' === $post_type) {
     2489            if (!isset($q['post_status'])) {
     2490                $q['post_status'] = 'publish';
     2491            }
     2492        } elseif ('any' === $post_type) {
     2493            $in_search_post_types = get_post_types(array('exclude_from_search' => false));
     2494            if (empty($in_search_post_types)) {
     2495                $post_type_where = ' AND 1=0 ';
     2496                $skip_post_status = true;
     2497            } else {
     2498                $post_type_where = " AND {$wpdb->posts}.post_type IN ('" . implode("', '", array_map('esc_sql', $in_search_post_types)) . "')";
     2499            }
     2500        } elseif (!empty($post_type) && is_array($post_type)) {
     2501            $post_type_where = " AND {$wpdb->posts}.post_type IN ('" . implode("', '", esc_sql($post_type)) . "')";
     2502        } elseif (!empty($post_type)) {
     2503            $post_type_where = $wpdb->prepare(" AND {$wpdb->posts}.post_type = %s", $post_type);
     2504            $post_type_object = get_post_type_object($post_type);
     2505        } elseif ($this->is_attachment) {
     2506            $post_type_where = " AND {$wpdb->posts}.post_type = 'attachment'";
     2507            $post_type_object = get_post_type_object('attachment');
     2508        } elseif ($this->is_page) {
     2509            $post_type_where = " AND {$wpdb->posts}.post_type = 'page'";
     2510            $post_type_object = get_post_type_object('page');
     2511        } else {
     2512            $post_type_where = " AND {$wpdb->posts}.post_type = 'post'";
     2513            $post_type_object = get_post_type_object('post');
     2514        }
    25102515
    25112516                $edit_cap = 'edit_post';
    25122517                $read_cap = 'read_post';
     
    25872592                                $where .= " AND ($where_status)";
    25882593                        }
    25892594                } elseif ( ! $this->is_singular ) {
    2590                         if ( 'any' === $post_type ) {
    2591                                 $queried_post_types = get_post_types( array( 'exclude_from_search' => false ) );
    2592                         } elseif ( is_array( $post_type ) ) {
    2593                                 $queried_post_types = $post_type;
    2594                         } elseif ( ! empty( $post_type ) ) {
    2595                                 $queried_post_types = array( $post_type );
    2596                         } else {
    2597                                 $queried_post_types = array( 'post' );
    2598                         }
     2595            if ( 'all' !== $post_type) {
     2596                if ('any' === $post_type) {
     2597                    $queried_post_types = get_post_types(array('exclude_from_search' => false));
     2598                } elseif (is_array($post_type)) {
     2599                    $queried_post_types = $post_type;
     2600                } elseif (!empty($post_type)) {
     2601                    $queried_post_types = array($post_type);
     2602                } else {
     2603                    $queried_post_types = array('post');
     2604                }
     2605            }
    25992606
    26002607                        if ( ! empty( $queried_post_types ) ) {
    26012608