我需要在 WooCommerce 中添加用户会员 ID 作为主体类。
为此,我使用以下代码:
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[] = '';
} else {
$classes[] = 'logged-out';
}
return $classes;
}
/* Add Gold Membership to Body Class */
add_filter('body_class','am_membership_class_filter');
function am_membership_class_filter($classes) {
if( wc_memberships_is_user_member( null, 'prime' ) ) {
$classes[] = 'prime';
}
return $classes;
if( wc_memberships_is_user_member( null, 'platinum' ) ) {
$classes[] = 'platinum';
}
return $classes;
if( wc_memberships_is_user_member( null, 'pro' ) ) {
$classes[] = 'pro';
}
return $classes;
}
但它仅适用于第一个会员计划“prime”(高级),因为白金和专业计划不起作用。
这段代码有问题吗?为什么我的代码不能正常工作?
在最后一个函数中,您在第一个 if 语句之后使用
return $classes;
,之后的代码永远不会执行或读取。
此外,由于您对 3 个函数使用相同的钩子,因此您可以将所有内容合并到一个独特的函数中。
尝试使用以下替换代码代替:
add_filter('body_class','add_custom_body_class');
function add_custom_body_class($classes) {
global $post;
if ( isset( $post ) ) {
$classes[] = $post->post_type . '-' . $post->post_name;
}
if( ! is_user_logged_in() ) {
$classes[] = 'logged-out';
}
foreach( ['prime', 'prime', 'prime'] as $value ) {
if( wc_memberships_is_user_member( null, $value ) ) {
$classes[] = $value;
}
}
return $classes;
}
现在应该可以工作了。