Make WordPress Core


Ignore:
Timestamp:
10/12/2017 03:19:30 PM (9 years ago)
Author:
boonebgorges
Message:

Bump 'posts' query cache incrementor when modifying postmeta.

This ensures that the get_pages() query cache doesn't go stale when
postmeta is modified.

Props spacedmonkey.
Fixes #40669.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/tests/phpunit/tests/post/getPages.php

    r35246 r41849  
    9797
    9898        /**
     99         * @ticket 40669
     100         */
     101        public function test_cache_should_be_invalidated_by_add_post_meta() {
     102                $posts = self::factory()->post->create_many( 2, array(
     103                        'post_type' => 'page',
     104                ) );
     105
     106                add_post_meta( $posts[0], 'foo', 'bar' );
     107
     108                $cached = get_pages( array(
     109                        'meta_key' => 'foo',
     110                        'meta_value' => 'bar',
     111                ) );
     112
     113                $cached_ids = wp_list_pluck( $cached, 'ID' );
     114                $this->assertEqualSets( array( $posts[0] ), $cached_ids );
     115
     116                add_post_meta( $posts[1], 'foo', 'bar' );
     117
     118                $found = get_pages( array(
     119                        'meta_key' => 'foo',
     120                        'meta_value' => 'bar',
     121                ) );
     122
     123                $found_ids = wp_list_pluck( $found, 'ID' );
     124                $this->assertEqualSets( $posts, $found_ids );
     125        }
     126
     127        /**
     128         * @ticket 40669
     129         */
     130        public function test_cache_should_be_invalidated_by_update_post_meta() {
     131                $posts = self::factory()->post->create_many( 2, array(
     132                        'post_type' => 'page',
     133                ) );
     134
     135                add_post_meta( $posts[0], 'foo', 'bar' );
     136                add_post_meta( $posts[1], 'foo', 'bar' );
     137
     138                $cached = get_pages( array(
     139                        'meta_key' => 'foo',
     140                        'meta_value' => 'bar',
     141                ) );
     142
     143                $cached_ids = wp_list_pluck( $cached, 'ID' );
     144                $this->assertEqualSets( $posts, $cached_ids );
     145
     146                update_post_meta( $posts[1], 'foo', 'baz' );
     147
     148                $found = get_pages( array(
     149                        'meta_key' => 'foo',
     150                        'meta_value' => 'bar',
     151                ) );
     152
     153                $found_ids = wp_list_pluck( $found, 'ID' );
     154                $this->assertEqualSets( array( $posts[0] ), $found_ids );
     155        }
     156
     157        /**
     158         * @ticket 40669
     159         */
     160        public function test_cache_should_be_invalidated_by_delete_post_meta() {
     161                $posts = self::factory()->post->create_many( 2, array(
     162                        'post_type' => 'page',
     163                ) );
     164
     165                add_post_meta( $posts[0], 'foo', 'bar' );
     166                add_post_meta( $posts[1], 'foo', 'bar' );
     167
     168                $cached = get_pages( array(
     169                        'meta_key' => 'foo',
     170                        'meta_value' => 'bar',
     171                ) );
     172
     173                $cached_ids = wp_list_pluck( $cached, 'ID' );
     174                $this->assertEqualSets( $posts, $cached_ids );
     175
     176                delete_post_meta( $posts[1], 'foo' );
     177
     178                $found = get_pages( array(
     179                        'meta_key' => 'foo',
     180                        'meta_value' => 'bar',
     181                ) );
     182
     183                $found_ids = wp_list_pluck( $found, 'ID' );
     184                $this->assertEqualSets( array( $posts[0] ), $found_ids );
     185        }
     186
     187        /**
     188         * @ticket 40669
     189         */
     190        public function test_cache_should_be_invalidated_by_delete_post_meta_by_key() {
     191                $posts = self::factory()->post->create_many( 2, array(
     192                        'post_type' => 'page',
     193                ) );
     194
     195                add_post_meta( $posts[0], 'foo', 'bar' );
     196                add_post_meta( $posts[1], 'foo', 'bar' );
     197
     198                $cached = get_pages( array(
     199                        'meta_key' => 'foo',
     200                        'meta_value' => 'bar',
     201                ) );
     202
     203                $cached_ids = wp_list_pluck( $cached, 'ID' );
     204                $this->assertEqualSets( $posts, $cached_ids );
     205
     206                delete_post_meta_by_key( 'foo' );
     207
     208                $found = get_pages( array(
     209                        'meta_key' => 'foo',
     210                        'meta_value' => 'bar',
     211                ) );
     212
     213                $found_ids = wp_list_pluck( $found, 'ID' );
     214                $this->assertEqualSets( array(), $found_ids );
     215        }
     216
     217        /**
    99218         * @ticket 20376
    100219         */
Note: See TracChangeset for help on using the changeset viewer.