[wp-trac] [WordPress Trac] #58044: Issue with wp_setup_nav_menu_item

WordPress Trac noreply at wordpress.org
Sat Apr 1 22:01:09 UTC 2023


#58044: Issue with wp_setup_nav_menu_item
-------------------------------------------+------------------------------
 Reporter:  wpweaver                       |       Owner:  (none)
     Type:  defect (bug)                   |      Status:  new
 Priority:  normal                         |   Milestone:  Awaiting Review
Component:  Menus                          |     Version:  6.2
 Severity:  normal                         |  Resolution:
 Keywords:  needs-patch reporter-feedback  |     Focuses:  administration
-------------------------------------------+------------------------------
Changes (by sabernhardt):

 * keywords:  needs-patch => needs-patch reporter-feedback


Old description:

> /wp-includes/nave-menu.php has an issue handling bad $menu_item.
>

> The problem is with trying to call **get_post_status(**). If a post with
> type ''nav_menu_item'' has a problem (I think not having a correct parent
> or something), the call to **get_post($menu_item->object_id)** returns
> NULL which then causes an error message from **get_post_states()**.
>
> I had to search the site database to find the offending menu item on my
> theme development site and deleted the bad menu.  I think I likely
> deleted a page or post that had been include in a menu definition, or
> perhaps it was because I typically use the Parent Page to define the
> default menu, which is still supported bu seldom used.
>
> This error only seems to appear when using the Customizer, I'm guessing
> while it is generating the ''Menus'' option. Didn't get error from
> Dashboard Menu, nor have I tried this on a block theme.
>
> The problem is found around line 833 in nav-menu.php.
>
> Here's a possible fix which worked with my bad menu definition, but the
> problem might be deeper.
>
> {{{#!php
> <?php
> if ( $object ) {
>     $menu_item->type_label = $object->labels->singular_name;
>     // Denote post states for special pages (only in the admin).
>     if ( function_exists( 'get_post_states' ) ) {
>         $menu_post   = get_post( $menu_item->object_id );
>         /*
>          * Suggested fix for bad nav_menu_item post - likely caused by
> now missing parent
>          *  which can result in $menu_post being NULL at this point
>          *
>          */
>         if ($menu_post != NULL) {   //*** add a NULL check
>             $post_states = get_post_states($menu_post);
>             if ($post_states) {
>                 $menu_item->type_label = wp_strip_all_tags(implode(', ',
> $post_states));
>             }
>         } // end of added NULL check
>     }
> } else {
>     $menu_item->type_label = $menu_item->object;
>     $menu_item->_invalid   = true;
> }
> }}}

New description:

 `/wp-includes/nav-menu.php` has an issue handling bad `$menu_item`.


 The problem is with trying to call `get_post_status()`. If a post with
 type `nav_menu_item` has a problem (I think not having a correct parent or
 something), the call to `get_post($menu_item->object_id)` returns NULL
 which then causes an error message from `get_post_states()`.

 I had to search the site database to find the offending menu item on my
 theme development site and deleted the bad menu.  I think I likely deleted
 a page or post that had been include in a menu definition, or perhaps it
 was because I typically use the Parent Page to define the default menu,
 which is still supported but seldom used.

 This error only seems to appear when using the Customizer, I'm guessing
 while it is generating the ''Menus'' option. Didn't get error from
 Dashboard Menu, nor have I tried this on a block theme.

 The problem is found around line 833 in `nav-menu.php`.

 Here's a possible fix which worked with my bad menu definition, but the
 problem might be deeper.

 {{{#!php
 <?php
 if ( $object ) {
     $menu_item->type_label = $object->labels->singular_name;
     // Denote post states for special pages (only in the admin).
     if ( function_exists( 'get_post_states' ) ) {
         $menu_post   = get_post( $menu_item->object_id );
         /*
          * Suggested fix for bad nav_menu_item post - likely caused by now
 missing parent
          *  which can result in $menu_post being NULL at this point
          *
          */
         if ($menu_post != NULL) {   //*** add a NULL check
             $post_states = get_post_states($menu_post);
             if ($post_states) {
                 $menu_item->type_label = wp_strip_all_tags(implode(', ',
 $post_states));
             }
         } // end of added NULL check
     }
 } else {
     $menu_item->type_label = $menu_item->object;
     $menu_item->_invalid   = true;
 }
 }}}

--

Comment:

 Thanks for the report!

 Is #51565 the same issue?

-- 
Ticket URL: <https://core.trac.wordpress.org/ticket/58044#comment:1>
WordPress Trac <https://core.trac.wordpress.org/>
WordPress publishing platform


More information about the wp-trac mailing list