我正在用wordpress和画布主题(来自WooThemes)构建一个网站。
我使用顶部导航在用户登录时显示项目。当用户未登录时,您只能看到“成为成员”和“登录”。当用户登录时,他/她会看到另一个带有其他菜单项的导航。
我想到了以下解决方案:
注册新导航
应用钩子检查用户是否登录根据结果,为注册用户应用导航,否则显示其他我将此代码放在我的函数中。php:
add_action( \'init\', \'register_top_menu_myisa\', 10 );
function register_top_menu_myisa() {
$menus = array(
\'top-menu-myisa\' => __( \'Top Menu MyISA\', \'woothemes\' )
);
register_nav_menus( $menus );
}
add_action( \'woo_top\', \'custom_top_navigation\', 10 );
function custom_top_navigation() {
if ( function_exists( \'has_nav_menu\' ) && has_nav_menu( \'top-menu\' ) ) {
if(is_user_logged_in()) {
$top_menu = \'top-menu-myisa\';
} else {
$top_menu = \'top-menu\';
}
echo \'<div id="top">\';
echo \'<div class="col-full">\';
echo \'<h3 class="top-menu">\' . woo_get_menu_name( $top_menu ) . \'</h3>\';
wp_nav_menu( array( \'depth\' => 6, \'sort_column\' => \'menu_order\', \'container\' => \'ul\', \'menu_id\' => \'top-nav\', \'menu_class\' => \'nav top-navigation fl\', \'theme_location\' => $top_menu ) );
echo \'</div>\';
echo \'</div>\';
}
}
第一个函数注册新的导航。第二个函数包含用于决定应显示哪个顶部导航的逻辑。
However: when I look at my site, it displays both menu\'s (the one for non logged in users and the one for logged in users)
How can I modify the code so that it displays one top navigation menu, based on if the user is logged in or not?
最合适的回答,由SO网友:Nazeem 整理而成
我自己解决了这个问题。我不知道确切的原因,但我会解释清楚我做了什么。
我用的是Wordpress 3.5。更新到3.6后,我的导航代码开始工作。还有一点很重要,我确实使用了W3C Total Cache,但删除了它(在应用此代码之前),并将WP_DEBUG
标记为false
. 我删除W3C Total Cache只是因为我正在试验它。
这是最终代码:
/* = Register the MyISA top navigation.
------------------------------------------------------------------------------------ */
add_action( \'init\', \'isa_register_top_menu_myisa\');
function isa_register_top_menu_myisa() {
if(function_exists(\'has_nav_menu\') && !has_nav_menu(\'top-menu-myisa\')) {
$menus = array(
\'top-menu-myisa\' => __(\'Top Menu MyISA\', \'woothemes\')
);
register_nav_menus($menus);
}
}
/* = Determine the top navigation to display.
When a user is logged in, the MyISA top navigation is displayed.
Otherwise the default top navigation wil be visible.
------------------------------------------------------------------------------------ */
add_action(\'woo_top\', \'woo_top_navigation\');
function woo_top_navigation() {
if (function_exists(\'has_nav_menu\') && has_nav_menu(\'top-menu\')) {
if(is_user_logged_in()) {
$top_menu = \'top-menu-myisa\';
} else {
$top_menu = \'top-menu\';
}
echo \'<div id="top">\';
echo \'<div class="col-full">\';
echo \'<h3 class="top-menu">\' . woo_get_menu_name($top_menu) . \'</h3>\';
wp_nav_menu( array( \'depth\' => 6, \'sort_column\' => \'menu_order\', \'container\' => \'ul\', \'menu_id\' => \'top-nav\', \'menu_class\' => \'nav top-navigation fl\', \'theme_location\' => $top_menu ) );
echo \'</div>\';
echo \'</div>\';
}
}