Make WordPress Core

Changeset 55867


Ignore:
Timestamp:
05/30/2023 11:19:41 AM (12 months ago)
Author:
azaozz
Message:

Menus: Add a short-circuit filter to wp_setup_nav_menu_item().

Props: davidbinda, ironprogrammer, andizer.
Fixes: #56577.

Location:
trunk
Files:
2 edited

Legend:

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

    r55349 r55867  
    821821 */
    822822function wp_setup_nav_menu_item( $menu_item ) {
     823
     824    /**
     825     * Short-circuit the wp_setup_nav_menu_item() output.
     826     *
     827     * Returning a non-null value from the filter will short-circuit wp_setup_nav_menu_item(),
     828     * and return that value.
     829     *
     830     * @param object|null $modified_menu_item Modified menu item. Default null.
     831     * @param object      $menu_item          The menu item to modify.
     832     */
     833    $pre_menu_item = apply_filters( 'pre_wp_setup_nav_menu_item', null, $menu_item );
     834
     835    if ( null !== $pre_menu_item ) {
     836        return $pre_menu_item;
     837    }
     838
    823839    if ( isset( $menu_item->post_type ) ) {
    824840        if ( 'nav_menu_item' === $menu_item->post_type ) {
  • trunk/tests/phpunit/tests/post/nav-menu.php

    r55671 r55867  
    12171217            )
    12181218        );
    1219         $post         = get_post( $menu_item_id );
     1219
     1220        $post = get_post( $menu_item_id );
    12201221        $this->assertEqualsWithDelta( strtotime( gmdate( 'Y-m-d H:i:s' ) ), strtotime( $post->post_date ), 2, 'The dates should be equal' );
    12211222
     
    12311232            )
    12321233        );
    1233         $post         = get_post( $menu_item_id );
     1234
     1235        $post = get_post( $menu_item_id );
    12341236        $this->assertSame( get_date_from_gmt( $post_date_gmt ), $post->post_date );
    12351237
     
    12451247            )
    12461248        );
    1247         $post         = get_post( $menu_item_id );
     1249
     1250        $post = get_post( $menu_item_id );
    12481251        $this->assertSame( '1970-01-01 00:00:00', $post->post_date );
    12491252
     
    12591262            )
    12601263        );
    1261         $post         = get_post( $menu_item_id );
     1264
     1265        $post = get_post( $menu_item_id );
    12621266        $this->assertSame( $post_date, $post->post_date );
    12631267
     
    12741278            )
    12751279        );
    1276         $post         = get_post( $menu_item_id );
     1280
     1281        $post = get_post( $menu_item_id );
    12771282        $this->assertSame( $post_date, $post->post_date );
    12781283
     
    12891294            )
    12901295        );
    1291         $post         = get_post( $menu_item_id );
     1296
     1297        $post = get_post( $menu_item_id );
    12921298        $this->assertSame( $post_date, $post->post_date );
    12931299
     
    13031309            )
    13041310        );
    1305         $post         = get_post( $menu_item_id );
     1311
     1312        $post = get_post( $menu_item_id );
    13061313        $this->assertEqualsWithDelta( strtotime( gmdate( 'Y-m-d H:i:s' ) ), strtotime( $post->post_date ), 2, 'The dates should be equal' );
    13071314
     
    13181325            )
    13191326        );
    1320         $post         = get_post( $menu_item_id );
     1327
     1328        $post = get_post( $menu_item_id );
    13211329        $this->assertEqualsWithDelta( strtotime( gmdate( 'Y-m-d H:i:s' ) ), strtotime( $post->post_date ), 2, 'The dates should be equal' );
    13221330
     
    13331341            )
    13341342        );
    1335         $post         = get_post( $menu_item_id );
     1343
     1344        $post = get_post( $menu_item_id );
    13361345        $this->assertEqualsWithDelta( strtotime( gmdate( 'Y-m-d H:i:s' ) ), strtotime( $post->post_date ), 2, 'The dates should be equal' );
    13371346    }
     1347
     1348    /**
     1349     * @ticket 56577
     1350     */
     1351    public function test_nav_menu_item_short_circuit_filter() {
     1352        // Create a nav menu item.
     1353        $menu_item_args = array(
     1354            'menu-item-type'   => 'custom',
     1355            'menu-item-title'  => 'Wordpress.org',
     1356            'menu-item-url'    => 'http://wordpress.org',
     1357            'menu-item-status' => 'publish',
     1358        );
     1359
     1360        $custom_item_id = wp_update_nav_menu_item( 0, 0, $menu_item_args );
     1361
     1362        $pre_setup_callback = function() {
     1363            return '--empty nav menu item--';
     1364        };
     1365
     1366        add_filter( 'pre_wp_setup_nav_menu_item', $pre_setup_callback );
     1367
     1368        // Confirm the short-circuit.
     1369        $custom_item = wp_setup_nav_menu_item( get_post( $custom_item_id ) );
     1370        $this->assertSame( '--empty nav menu item--', $custom_item );
     1371
     1372        remove_filter( 'pre_wp_setup_nav_menu_item', $pre_setup_callback );
     1373    }
     1374
    13381375}
Note: See TracChangeset for help on using the changeset viewer.