WooCommerce添加用户会员计划为body类代码故障排查
问题原因与修复方案
核心问题:函数提前返回导致后续代码无法执行
在am_membership_class_filter函数里,第一个会员计划判断结束后立刻执行了return $classes;,这会直接终止函数运行——后面针对platinum和pro的判断代码永远不会被触发,自然无法添加对应的body类。
修复后的完整代码
add_filter( 'body_class', 'am_add_slug_body_class' ); function am_add_slug_body_class( $classes ) { global $post; if ( isset( $post ) ) { $classes[] = $post->post_type . '-' . $post->post_name; } return $classes; } /* Add Logged-Out Body Class */ add_filter('body_class','am_logged_in_filter'); function am_logged_in_filter($classes) { if( !is_user_logged_in() ) { $classes[] = 'logged-out'; } // 已登录用户无需添加空类,直接返回原数组即可 return $classes; } /* Add Membership Plan Body Classes */ add_filter('body_class','am_membership_class_filter'); function am_membership_class_filter($classes) { if( wc_memberships_is_user_member( null, 'prime' ) ) { $classes[] = 'prime'; } if( wc_memberships_is_user_member( null, 'platinum' ) ) { $classes[] = 'platinum'; } if( wc_memberships_is_user_member( null, 'pro' ) ) { $classes[] = 'pro'; } // 所有判断完成后统一返回 return $classes; }
额外优化说明
- 移除了
am_logged_in_filter中给已登录用户添加空类的逻辑,空类对前端样式无任何作用,纯粹浪费资源。 - 调整会员判断函数结构,将所有条件判断放在统一的
return语句之前,确保每个会员计划的判断都能被执行到。
内容的提问来源于stack exchange,提问作者Laurapnunez
相关产品推荐
相关产品推荐

