WordPress.org

Make WordPress Core

Changeset 37857


Ignore:
Timestamp:
06/23/2016 03:51:03 PM (3 years ago)
Author:
swissspidy
Message:

Posts: Add hooks for post sticky status changes.

This adds a new post_stuck action that fires when a post is made sticky and a post_unstuck action that fires when the sticky flag is removed again.

Props ojrask.
Fixes #35600.

Location:
trunk
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/wp-includes/post.php

    r37686 r37857  
    21702170        $stickies[] = $post_id;
    21712171
    2172     update_option('sticky_posts', $stickies);
     2172    $updated = update_option( 'sticky_posts', $stickies );
     2173
     2174    if ( $updated ) {
     2175        /**
     2176         * Fires once a post has been added to the sticky list.
     2177         *
     2178         * @since 4.6.0
     2179         *
     2180         * @param int $post_id ID of the post that was stuck.
     2181         */
     2182        do_action( 'post_stuck', $post_id );
     2183    }
    21732184}
    21742185
     
    21972208    array_splice($stickies, $offset, 1);
    21982209
    2199     update_option('sticky_posts', $stickies);
     2210    $updated = update_option( 'sticky_posts', $stickies );
     2211
     2212    if ( $updated ) {
     2213        /**
     2214         * Fires once a post has been removed from the sticky list.
     2215         *
     2216         * @since 4.6.0
     2217         *
     2218         * @param int $post_id ID of the post that was unstuck.
     2219         */
     2220        do_action( 'post_unstuck', $post_id );
     2221    }
    22002222}
    22012223
  • trunk/tests/phpunit/tests/post.php

    r36874 r37857  
    11831183
    11841184    /**
     1185     * Test that hooks are fired when post gets stuck and unstuck.
     1186     *
     1187     * @ticket 35600
     1188     */
     1189    function test_hooks_fire_when_post_gets_stuck_and_unstuck() {
     1190        $post_id = self::factory()->post->create();
     1191        $a1 = new MockAction();
     1192        $a2 = new MockAction();
     1193
     1194        $this->assertFalse( is_sticky( $post_id ) );
     1195
     1196        add_action( 'post_stuck', array( $a1, 'action' ) );
     1197        add_action( 'post_unstuck', array( $a2, 'action' ) );
     1198
     1199        stick_post( $post_id );
     1200        $this->assertTrue( is_sticky( $post_id ) );
     1201        unstick_post( $post_id );
     1202        $this->assertFalse( is_sticky( $post_id ) );
     1203
     1204        remove_action( 'post_stuck', array( $a1, 'action' ) );
     1205        remove_action( 'post_unstuck', array( $a2, 'action' ) );
     1206
     1207        $this->assertEquals( 1, $a1->get_call_count() );
     1208        $this->assertEquals( 1, $a2->get_call_count() );
     1209    }
     1210
     1211    /**
    11851212     * If a post is updated without providing a post_name param,
    11861213     * a new slug should not be generated.
Note: See TracChangeset for help on using the changeset viewer.