[Plugin: WP Custom Menu Filter Plugin] I have a bug fix regarding Menu IDs
-
Hey,
Nice plugin, but I found some faulty logic regarding Menu HTML IDs versus Menu Object IDs. In wps_custom_nav_menu_items() (line 188), the first check is for:
if ( $args['menu_id'] ){ $menu_id = $args['menu_id']; }
However, the menu_id argument is the string for the ID attribute of the menu’s top-level UL element. If not set in wp_nav_menu, I believe it defaults to the menu object’s (database) ID. However, this is not a reliable way to determine the menu object’s ID, which is what is required, since it can easily be set in the wp_nav_menu() call (as in my case). If that occurs, the ID is not properly determined and the remaining plugin logic fails.
The second bit of logic is a much better solution:
if ( $args['theme_location'] ) { $menu_locations = get_nav_menu_locations(); $menu_id = $menu_locations[$args['theme_location']]; }
because if the theme_location parameter is set (as it almost always should be), this is a reliable way to determine the menu object ID.
I’m not convinced that the $args[‘menu_id’] check should be there at all, unless it is accompanied by an is_numeric check (which still has the potential to be unreliable), but I propose this rearranged logic:
// Get menu id //Check the theme location first if ( $args['theme_location'] ) { $menu_locations = get_nav_menu_locations(); $menu_id = $menu_locations[$args['theme_location']]; } //Try the menu ID, if it's a number else if ( isset( $args['menu_id'] ) && is_numeric( $args['menu_id'] ) ){ $menu_id = $args['menu_id']; } else { $nav_item_db_id = $sorted_menu_items[1]->ID; $nav_menu = wp_get_object_terms( $nav_item_db_id, 'nav_menu' ); $menu_id = $nav_menu[0]->term_id; }
Hope that helps! ??
Chris
https://www.ads-software.com/extend/plugins/wp-custom-menu-filter-plugin/
- The topic ‘[Plugin: WP Custom Menu Filter Plugin] I have a bug fix regarding Menu IDs’ is closed to new replies.