Make WordPress Core

Changeset 55867


Ignore:
Timestamp:
05/30/2023 11:19:41 AM (3 years 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.