给wordpress每个页面设置制定的菜单导航 发表于 2024-04-24 更新于 2024-12-22
广州
记录最近制作外贸站遇到的问题
在制作Wordpress多语言页面的时候,如果不使用翻译插件,又想使用系统自带的选单就需要为每一个页面自定义选单了。
需求是什么? 1.指定语言页面。 2.指定语言选单。 3.选单切换导航的时候更换指定语言页面。
写一个WP插件来实现它 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 <?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 )); } }
如何使用? 将这段代码复制到主题的function里面就可以了,也可以制作成wp插件安装使用,当然为了防止修改错误,你可以安装wpCode插件后自定义一个代码段,把这个放进去就可以了。
❄️2winter
ReactNative FullStack Developer
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 ❄️2winter !