1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96
| <?php
add_action('add_meta_boxes', 'custom_menu_positions_meta_boxes');
function custom_menu_positions_meta_boxes() { $menu_positions = array( 'header_menu' => 'Header Menu' );
foreach ($menu_positions as $position_key => $position_label) { add_meta_box( 'custom-menu-selector-' . $position_key, 'Custom Menu Selector - ' . $position_label, 'custom_menu_selector_callback', 'page', 'side', 'high', array('position' => $position_key) ); } }
function custom_menu_selector_callback($post, $metabox) { $position = $metabox['args']['position']; $selected_menu = get_post_meta($post->ID, '_custom_menu_' . $position, true); $menus = get_terms('nav_menu', array('hide_empty' => false));
echo '<label for="menu-selector-' . $position . '">Select Menu for ' . esc_html($position) . ':</label>'; echo '<select id="menu-selector-' . $position . '" name="menu-locations[' . $position . ']">'; echo '<option value="">Default (' . esc_html($position) . ') Menu</option>';
foreach ($menus as $menu) { echo '<option value="' . esc_attr($menu->term_id) . '" ' . selected($selected_menu, $menu->term_id, false) . '>' . esc_html($menu->name) . '</option>'; }
echo '</select>'; wp_nonce_field('custom_menu_positions_nonce', 'custom_menu_positions_nonce'); }
add_action('save_post', 'save_custom_menu_positions');
function save_custom_menu_positions($post_id) { if (!isset($_POST['custom_menu_positions_nonce']) || !wp_verify_nonce($_POST['custom_menu_positions_nonce'], 'custom_menu_positions_nonce')) { return; }
$menu_positions = array('header_menu');
foreach ($menu_positions as $position) { if (array_key_exists($position, $_POST['menu-locations'])) { update_post_meta($post_id, '_custom_menu_' . $position, sanitize_text_field($_POST['menu-locations'][$position])); } } }
add_action('template_redirect', 'update_primary_menu');
function update_primary_menu() { $post_id = get_queried_object_id();
$header_menu = get_post_meta($post_id, '_custom_menu_header_menu', true); $primary_menu_location = 'primary'; $menu_locations = get_nav_menu_locations();
if (isset($menu_locations[$primary_menu_location])) {
$primary_menu_id = $menu_locations[$primary_menu_location]; $selected_menu_id = $header_menu ? $header_menu : $primary_menu_id;
set_theme_mod('nav_menu_locations', array('primary' => $selected_menu_id));
} }
|