我可以在wordpress中为不同的页面指定不同的菜单吗?
说我有页面A,B,C,D和我有菜单menu1,menu2。我希望页面A,B加载menu1,C,D加载menu2。
有可能吗?谢谢!
答案 0 :(得分:4)
你可以通过多种方式实现这一目标,
使用网页ID
if(is_page(array('1','2'))) {
wp_nav_menu( array('menu' => 'menu1' ));
} else {
wp_nav_menu( array('menu' => 'menu2' ));
}
使用特殊页面模板。
如果您对A和B页有特殊page template(page-id或page-slug),那么您可以致电
wp_nav_menu( array('menu' => 'menu1' ));
其他页面
你可以在page.php中使用
wp_nav_menu( array('menu' => 'menu1' ));
使用Widget也可以这样做
答案 1 :(得分:1)
最佳解决方案是允许用户在添加/编辑页面时选择导航菜单位置。
使用带有下拉列表的元框(选择)包含所有可用位置,然后将所选位置保存在自定义字段中:
/**
* Register the meta box.
*/
function wpse_183868_page_nav_menu_meta_box_register() {
add_meta_box(
'wpse_183868_page_nav_menu',
'Nav Menu',
'wpse_183869_page_nav_menu_meta_box',
'page',
'side'
);
}
add_action( 'add_meta_boxes', 'wpse_183868_page_nav_menu_meta_box_register' );
/**
* Display the meta box.
*/
function wpse_183869_page_nav_menu_meta_box( $post ) {
$selected = get_post_meta( $post->ID, '_page_nav_menu', true );
wp_nonce_field( 'save', 'page_nav_menu_nonce' );
?>
<select name="page_nav_menu">
<?php foreach ( get_registered_nav_menus() as $name => $label ) : ?>
<option value="<?php echo $name ?>"<?php selected( $name, $selected ) ?>><?php echo $label ?></option>
<?php endforeach ?>
</select>
<?php
}
/**
* Save the meta box data.
*/
function wpse_183869_page_nav_menu_save( $post_id ) {
if ( ! isset( $_POST['page_nav_menu'], $_POST['page_nav_menu_nonce'] ) || ! wp_verify_nonce( $_POST['page_nav_menu_nonce'], 'save' ) )
return;
$nav_menus = get_registered_nav_menus();
$nav_menu = $_POST['page_nav_menu'];
if ( isset( $nav_menus[ $nav_menu ] ) ) // Paranoid - check the submitted value is definitely valid
update_post_meta( $post_id, '_page_nav_menu', $nav_menu );
}
add_action( 'save_post', 'wpse_183869_page_nav_menu_save' );
现在,您可以在模板中使用:
if ( ! $page_nav_menu = get_post_meta( get_the_ID(), '_page_nav_menu', true ) )
$page_nav_menu = 'default_location';
wp_nav_menu( array( 'theme_location' => $page_nav_menu ) );
答案 2 :(得分:0)
您可以使用Menu Swapper插件使用管理员用户界面执行相同的操作。 这是此插件的Demo。