WordPress.org

Make WordPress Core

Ticket #35600: 35600-1.diff

File 35600-1.diff, 2.5 KB (added by ojrask, 3 years ago)

Adjusted patch, adds inline hook PHP documentation.

  • src/wp-includes/post.php

     
    21322132        if ( ! in_array($post_id, $stickies) )
    21332133                $stickies[] = $post_id;
    21342134
    2135         update_option('sticky_posts', $stickies);
     2135        $updated = update_option('sticky_posts', $stickies);
     2136
     2137        if ( $updated ) {
     2138                /**
     2139                 * Fires after a post is successfully sticked.
     2140                 *
     2141                 * @since 4.5.0
     2142                 *
     2143                 * @param int $post_id The ID of the post that was sticked.
     2144                 */
     2145                do_action( 'post_sticked', $post_id );
     2146        }
    21362147}
    21372148
    21382149/**
     
    21592170
    21602171        array_splice($stickies, $offset, 1);
    21612172
    2162         update_option('sticky_posts', $stickies);
     2173        $updated = update_option('sticky_posts', $stickies);
     2174
     2175        if ( $updated ) {
     2176                /**
     2177                 * Fires after a post is successfully unsticked.
     2178                 *
     2179                 * @since 4.5.0
     2180                 *
     2181                 * @param int $post_id The ID of the post that was unsticked.
     2182                 */
     2183                do_action( 'post_unsticked', $post_id );
     2184        }
    21632185}
    21642186
    21652187/**
  • tests/phpunit/tests/post.php

     
    11821182        }
    11831183
    11841184        /**
     1185         * Test that hooks are fired for sticking and unsticking a post.
     1186         *
     1187         * @ticket 35600
     1188         */
     1189        function test_post_stick_and_unstick_fire_actions() {
     1190                // Create a dummy post.
     1191                $post = self::factory()->post->create_and_get( array(
     1192                        'post_title' => 'Dummy post title',
     1193                        'post_content' => 'Dummy post content',
     1194                ) );
     1195
     1196                $this->assertFalse( is_sticky( $post->ID ) );
     1197
     1198                // Callback for testing hook.
     1199                $sticked_cb = function ( $post_id ) use ( $post ) {
     1200                        update_option('_test_sticked_post_' . $post->ID, 'yes');
     1201                };
     1202
     1203                // Callback for testing hook.
     1204                $unsticked_cb = function ( $post_id ) use ( $post ) {
     1205                        update_option( '_test_unsticked_post_' . $post->ID, 'yes');
     1206                };
     1207
     1208                // Hook callbacks.
     1209                add_action( 'post_sticked', $sticked_cb );
     1210                add_action( 'post_unsticked', $unsticked_cb );
     1211
     1212                stick_post( $post->ID );
     1213
     1214                $this->assertTrue( is_sticky( $post->ID ) );
     1215
     1216                unstick_post( $post->ID );
     1217
     1218                $this->assertFalse( is_sticky( $post->ID ) );
     1219
     1220                // Verify the hooks ran when sticking and unsticking the post.
     1221                $this->assertEquals('yes', get_option( '_test_sticked_post_' . $post->ID, false ) );
     1222                $this->assertEquals('yes', get_option( '_test_unsticked_post_' . $post->ID, false ) );
     1223        }
     1224
     1225        /**
    11851226         * If a post is updated without providing a post_name param,
    11861227         * a new slug should not be generated.
    11871228         *