Make WordPress Core

Ticket #41131: 41131.2.patch

File 41131.2.patch, 3.8 KB (added by spacedmonkey, 7 years ago)
  • src/wp-includes/link-template.php

     
    17301730        $sort  = apply_filters( "get_{$adjacent}_post_sort", "ORDER BY p.post_date $order LIMIT 1", $post );
    17311731
    17321732        $query = "SELECT p.ID FROM $wpdb->posts AS p $join $where $sort";
    1733         $query_key = 'adjacent_post_' . md5( $query );
    1734         $result = wp_cache_get( $query_key, 'counts' );
     1733        $key = md5( $query );
     1734        $last_changed = wp_cache_get_last_changed( 'posts' );
     1735        if ( $in_same_term ) {
     1736                $last_changed .= wp_cache_get_last_changed( 'terms' );
     1737        }
     1738        $cache_key = "adjacent_pos:$key:$last_changed";
     1739
     1740        $result = wp_cache_get( $cache_key, 'posts' );
    17351741        if ( false !== $result ) {
    17361742                if ( $result )
    17371743                        $result = get_post( $result );
     
    17421748        if ( null === $result )
    17431749                $result = '';
    17441750
    1745         wp_cache_set( $query_key, $result, 'counts' );
     1751        wp_cache_set( $cache_key, $result, 'posts' );
    17461752
    17471753        if ( $result )
    17481754                $result = get_post( $result );
  • tests/phpunit/tests/link/getAdjacentPost.php

     
    7979        }
    8080
    8181        /**
     82         * @ticket 41131
     83         */
     84        public function test_get_adjacent_post_cache() {
     85                global $wpdb;
     86                // Need some sample posts to test adjacency
     87                $post_one = self::factory()->post->create_and_get( array(
     88                        'post_title' => 'First',
     89                        'post_date'  => '2012-01-01 12:00:00'
     90                ) );
     91
     92                $post_two = self::factory()->post->create_and_get( array(
     93                        'post_title' => 'Second',
     94                        'post_date'  => '2012-02-01 12:00:00'
     95                ) );
     96
     97                $post_three = self::factory()->post->create_and_get( array(
     98                        'post_title' => 'Third',
     99                        'post_date'  => '2012-03-01 12:00:00'
     100                ) );
     101
     102                $post_four = self::factory()->post->create_and_get( array(
     103                        'post_title' => 'Fourth',
     104                        'post_date'  => '2012-04-01 12:00:00'
     105                ) );
     106
     107
     108                // Assign some terms
     109                wp_set_object_terms( $post_one->ID, 'wordpress', 'category', false );
     110                wp_set_object_terms( $post_three->ID, 'wordpress', 'category', false );
     111
     112                wp_set_object_terms( $post_two->ID, 'plugins', 'post_tag', false );
     113                wp_set_object_terms( $post_four->ID, 'plugins', 'post_tag', false );
     114
     115                // Test normal post adjacency
     116                $this->go_to( get_permalink( $post_two->ID ) );
     117
     118                // Test getting the right result
     119                $this->assertEquals( $post_one, get_adjacent_post( false, '', true ) );
     120                $this->assertNotEquals( $post_two, get_adjacent_post( false, '', true ) );
     121
     122                // Query count to test cachcing.
     123                $num_queries = $wpdb->num_queries;
     124                $this->assertNotEquals( $post_two, get_adjacent_post( false, '', true ) );
     125                $this->assertEquals( $post_one, get_adjacent_post( false, '', true ) );
     126                $this->assertSame( $num_queries, $wpdb->num_queries );
     127
     128                // Test creating new post busts cache
     129                $post_five   = self::factory()->post->create_and_get( array(
     130                        'post_title' => 'Five',
     131                        'post_date'  => '2012-04-01 12:00:00'
     132                ) );
     133                $num_queries = $wpdb->num_queries;
     134
     135                $this->assertEquals( $post_one, get_adjacent_post( false, '', true ) );
     136                $this->assertSame( $num_queries + 1, $wpdb->num_queries );
     137
     138                $this->assertEquals( $post_four, get_adjacent_post( true, '', false ) );
     139                $num_queries = $wpdb->num_queries;
     140                $this->assertEquals( $post_four, get_adjacent_post( true, '', false ) );
     141                $this->assertSame( $num_queries, $wpdb->num_queries );
     142
     143                wp_set_object_terms( $post_four->ID, 'themes', 'post_tag', false );
     144
     145                $num_queries = $wpdb->num_queries;
     146                $this->assertEquals( $post_four, get_adjacent_post( true, '', false ) );
     147                $this->assertSame( $num_queries + 2, $wpdb->num_queries );
     148        }
     149        /**
    82150         * @ticket 22112
    83151         */
    84152        function test_get_adjacent_post_exclude_self_term() {