[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