首页 > 解决方案 > PhP 否则如果不工作

问题描述

我正在尝试向特定会员级别显示特定菜单。如果会员是 2 级,他会得到正确的菜单。但如果他是 3 级,则菜单“nexusmitglied”不会出现。

我做错了什么?

function my_wp_nav_menu_args( $args = '' ) {
    $member_level = SwpmMemberUtils::get_logged_in_members_level();
    if((SwpmMemberUtils::is_member_logged_in()) || ($member_level == "2")) { 
        $args['menu'] = 'logged-in';
    } 
    $member_level = SwpmMemberUtils::get_logged_in_members_level();
    else if((SwpmMemberUtils::is_member_logged_in()) || ($member_level == "3")) { 
        $args['menu'] = 'nexusmitglied';
    } else 
    {
        $args['menu'] = 'logged-out';
    }
    return $args;
}  
add_filter( 'wp_nav_menu_args', 'my_wp_nav_menu_args' );

标签: phphtmlwordpress

解决方案


因为您使用||(or) 运算符,所以如果成员已登录,则第一条语句始终有效。因此永远不会到达 else if。

改为使用&&。您也只需创建$member_level一次。省略 if 语句中的额外大括号,因为它们不是必需的,只会使代码混乱。对纯字符串使用单引号。Php 需要双引号之间的变量,因此单引号的解析速度总是比双引号快。

$member_level = SwpmMemberUtils::get_logged_in_members_level();

if(SwpmMemberUtils::is_member_logged_in() && $member_level == '2') { 
    $args['menu'] = 'logged-in';
} else if(SwpmMemberUtils::is_member_logged_in() && $member_level == '3') { 
    $args['menu'] = 'nexusmitglied';
}

推荐阅读