The has_nav_menu WordPress PHP filter checks if a navigation menu is assigned to a specified location.
Usage
add_filter('has_nav_menu', 'your_custom_function', 10, 2); function your_custom_function($has_nav_menu, $location) { // your custom code here return $has_nav_menu; }
Parameters
$has_nav_menu
(bool): Indicates whether a menu is assigned to a location.$location
(string): The menu location to check.
More information
See WordPress Developer Resources: has_nav_menu
Examples
Show a custom message if no menu is assigned
This example shows a custom message if no menu is assigned to the specified location.
add_filter('has_nav_menu', 'show_custom_message_if_no_menu', 10, 2); function show_custom_message_if_no_menu($has_nav_menu, $location) { if (!$has_nav_menu) { echo 'No menu assigned to this location.'; } return $has_nav_menu; }
Disable menu for a specific location
This example disables the menu for a specific location (e.g., ‘header_menu’).
add_filter('has_nav_menu', 'disable_menu_for_specific_location', 10, 2); function disable_menu_for_specific_location($has_nav_menu, $location) { if ('header_menu' === $location) { return false; } return $has_nav_menu; }
Set a default menu for a location
This example sets a default menu for a specific location (e.g., ‘footer_menu’) if no menu is assigned.
add_filter('has_nav_menu', 'set_default_menu_for_location', 10, 2); function set_default_menu_for_location($has_nav_menu, $location) { if (!$has_nav_menu && 'footer_menu' === $location) { wp_nav_menu(array('theme_location' => 'default_footer_menu')); return true; } return $has_nav_menu; }
Show a custom menu for logged-in users
This example shows a custom menu for logged-in users and the regular menu for logged-out users.
add_filter('has_nav_menu', 'show_custom_menu_for_logged_in_users', 10, 2); function show_custom_menu_for_logged_in_users($has_nav_menu, $location) { if (is_user_logged_in()) { wp_nav_menu(array('theme_location' => 'logged_in_menu')); return true; } return $has_nav_menu; }
Change menu location for mobile devices
This example changes the menu location for mobile devices, showing a mobile-specific menu instead.
add_filter('has_nav_menu', 'change_menu_location_for_mobile_devices', 10, 2); function change_menu_location_for_mobile_devices($has_nav_menu, $location) { if (wp_is_mobile() && 'header_menu' === $location) { wp_nav_menu(array('theme_location' => 'mobile_header_menu')); return true; } return $has_nav_menu; }