WordPress.org

Make WordPress Core

Ticket #18536: 18536.3.diff

File 18536.3.diff, 3.7 KB (added by scribu, 2 years ago)
  • wp-includes/functions.php

    diff --git wp-includes/functions.php wp-includes/functions.php
    index e7c8d44..a65898b 100644
    function wp_allowed_protocols() { 
    36543654 
    36553655        return $protocols; 
    36563656} 
     3657 
     3658/** 
     3659 * Retrieve ids that are not already present in the cache 
     3660 * 
     3661 * @since 3.4.0 
     3662 * 
     3663 * @param array $object_ids ID list 
     3664 * @param string $cache_key The cache bucket to check against 
     3665 * 
     3666 * @return array 
     3667 */ 
     3668function _get_non_cached_ids( $object_ids, $cache_key ) { 
     3669        $clean = array(); 
     3670        foreach ( $object_ids as $id ) { 
     3671                $id = (int) $id; 
     3672                if ( !wp_cache_get( $id, $cache_key ) ) { 
     3673                        $clean[] = $id; 
     3674                } 
     3675        } 
     3676 
     3677        return $clean; 
     3678} 
     3679 
  • wp-includes/pluggable.php

    diff --git wp-includes/pluggable.php wp-includes/pluggable.php
    index 030e453..dd5c126 100644
    if ( !function_exists('cache_users') ) : 
    139139function cache_users( $user_ids ) { 
    140140        global $wpdb; 
    141141 
    142         $clean = array(); 
    143         foreach ( $user_ids as $id ) { 
    144                 $id = (int) $id; 
    145                 if ( !wp_cache_get( $id, 'users' ) ) { 
    146                         $clean[] = $id; 
    147                 } 
    148         } 
     142        $clean = _get_non_cached_ids( $user_ids, 'users' ); 
    149143 
    150144        if ( empty( $clean ) ) 
    151145                return; 
  • wp-includes/query.php

    diff --git wp-includes/query.php wp-includes/query.php
    index bc6edea..9d5b5ca 100644
    class WP_Query { 
    19511951                $fields = ''; 
    19521952                $post_status_join = false; 
    19531953                $page = 1; 
     1954                $expand_ids = false; 
    19541955 
    19551956                if ( isset( $q['caller_get_posts'] ) ) { 
    19561957                        _deprecated_argument( 'WP_Query', '3.1', __( '"caller_get_posts" is deprecated. Use "ignore_sticky_posts" instead.' ) ); 
    class WP_Query { 
    25972598                                $$piece = isset( $clauses[ $piece ] ) ? $clauses[ $piece ] : ''; 
    25982599                } 
    25992600 
     2601                if ( "$wpdb->posts.*" == $fields ) { 
     2602                        $fields = "$wpdb->posts.ID"; 
     2603                        $expand_ids = true; 
     2604                } 
     2605 
    26002606                if ( ! empty($groupby) ) 
    26012607                        $groupby = 'GROUP BY ' . $groupby; 
    26022608                if ( !empty( $orderby ) ) 
    class WP_Query { 
    26262632                        return $r; 
    26272633                } 
    26282634 
    2629                 $this->posts = $wpdb->get_results($this->request); 
     2635                if ( $expand_ids ) { 
     2636                        $ids = $wpdb->get_col( $this->request ); 
     2637 
     2638                        if ( $ids ) { 
     2639                                if ( !$q['no_found_rows'] && !empty( $limits ) ) { 
     2640                                        $found_posts_query = apply_filters_ref_array( 'found_posts_query', array( 'SELECT FOUND_ROWS()', &$this ) ); 
     2641                                        $this->found_posts = $wpdb->get_var( $found_posts_query ); 
     2642                                        $this->found_posts = apply_filters_ref_array( 'found_posts', array( $this->found_posts, &$this ) ); 
     2643                                        $this->max_num_pages = ceil($this->found_posts / $q['posts_per_page']); 
     2644                                } 
     2645 
     2646                                $non_cached_ids = _get_non_cached_ids( $ids, 'posts' ); 
     2647 
     2648                                if ( !empty( $non_cached_ids ) ) { 
     2649                                        $fresh_posts = $wpdb->get_results( sprintf( "SELECT $wpdb->posts.* FROM $wpdb->posts WHERE ID IN (%s)", join( ",", $non_cached_ids ) ) ); 
     2650 
     2651                                        update_post_caches($fresh_posts, $post_type, $q['update_post_term_cache'], $q['update_post_meta_cache']); 
     2652                                } 
     2653 
     2654                                $this->posts = array(); 
     2655 
     2656                                foreach ( $ids as $id ) 
     2657                                        $this->posts[] = get_post( $id ); 
     2658                        } else { 
     2659                                $this->found_posts = $this->max_num_pages = 0; 
     2660                                $this->posts = array(); 
     2661                        } 
     2662                } else { 
     2663                        $this->posts = $wpdb->get_results($this->request); 
     2664                } 
    26302665 
    26312666                // Raw results filter. Prior to status checks. 
    26322667                if ( !$q['suppress_filters'] ) 
    class WP_Query { 
    26452680                        $this->comment_count = count($this->comments); 
    26462681                } 
    26472682 
    2648                 if ( !$q['no_found_rows'] && !empty($limits) ) { 
     2683                if ( !$q['no_found_rows'] && !empty($limits) && !$expand_ids ) { 
    26492684                        $found_posts_query = apply_filters_ref_array( 'found_posts_query', array( 'SELECT FOUND_ROWS()', &$this ) ); 
    26502685                        $this->found_posts = $wpdb->get_var( $found_posts_query ); 
    26512686                        $this->found_posts = apply_filters_ref_array( 'found_posts', array( $this->found_posts, &$this ) );