WooCommerce:特定用户角色的账户仪表板文本显示异常排查
问题解决:WooCommerce仪表板按用户角色显示文本
你的代码问题出在条件判断逻辑错误,还有依赖用户角色数组的第一个元素不可靠:
- 原代码里
$role[0]=="Corporate"||"Partner"的写法不对,"Partner"本身是真值,不管前面的条件是否成立,整个判断都会为真,所以所有登录用户都能看到文本。 - 用户可能拥有多个角色,
$role[0]不一定是你要判断的那个角色,直接取第一个元素会导致判断失效。
下面是两种正确的写法:
写法1:检查用户角色数组(直接修改模板)
替换你原有的PHP代码:
<p> <?php if ( is_user_logged_in() ) { $user = wp_get_current_user(); // 检查用户角色数组中是否包含目标角色 if ( in_array( 'Corporate', $user->roles ) || in_array( 'Partner', $user->roles ) ) { printf('Bulk rate discount is available at listed rates: '); } } ?> </p>
写法2:用WordPress官方函数更可靠(推荐)
WordPress的user_can函数可以直接检查用户是否拥有某个角色(或权限),比直接遍历角色数组更稳妥:
<p> <?php if ( is_user_logged_in() ) { $user = wp_get_current_user(); if ( user_can( $user, 'Corporate' ) || user_can( $user, 'Partner' ) ) { printf('Bulk rate discount is available at listed rates: '); } } ?> </p>
额外提醒
不要直接修改WooCommerce的核心模板文件,下次插件更新时你的修改会被覆盖。建议用子主题复制woocommerce/templates/myaccount/dashboard.php到子主题的对应目录再修改,或者使用woocommerce_account_dashboard钩子添加内容,这样更安全。
内容的提问来源于stack exchange,提问作者TurnItOffAndOnAgain
相关产品推荐
相关产品推荐

