我用可变产品设置了Woocommerce。
这些产品的属性都有变化,可能的值为1千克,2千克和5千克。
我还创建了一个“Aziende”用户组。我想要一些产品变化仅显示“Aziende”客户。我不希望其他客户看到这些变化。
例如:Aziende客户看到选项“1kg,2kg,5kg”,而其他客户角色只看到1kg选项。
在Woocommerce中这可能吗?
答案 0 :(得分:1)
是。如果您覆盖文件woocommerce/templates/single-product/add-to-cart/variable.php
,则会找到变体选择框的代码。
你可以做点什么:
首先,在处理角色时,我总是包含此代码段:
function user_has_role( $role, $user_id = null ) {
if ( is_numeric( $user_id ) )
$user = get_userdata( $user_id );
else
$user = wp_get_current_user();
if ( empty( $user ) )
return false;
return in_array( $role, (array) $user->roles );
}
所以它可以用作:
if(user_has_role("Aziende")){
//do stuff
}
现在有了这个功能,并知道要更改哪个模板,你应该可以在该文件中执行某些操作。它可能是这样的:
// Get terms if this is a taxonomy - ordered
if ( taxonomy_exists( $name ) ) {
$terms = wc_get_product_terms( $post->ID, $name, array( 'fields' => 'all' ) );
foreach ( $terms as $term ) {
if ( ! in_array( $term->slug, $options ) ) {
continue;
}
if($name == 'pa_weight' && $term->slug != '1kg' ) { // or whatever your attribute is called, and whatever the attribute term is called.
if(!user_has_role('aziende'){
continue;
}
}
echo '<option value="' . esc_attr( $term->slug ) . '" ' . selected( sanitize_title( $selected_value ), sanitize_title( $term->slug ), false ) . '>' . apply_filters( 'woocommerce_variation_option_name', $term->name ) . '</option>';
}
} else {
foreach ( $options as $option ) {
if($name == 'pa_weight' && $option != '1kg' ) { // or whatever your attribute is called, and whatever the attribute term is called.
if(!user_has_role('aziende'){
continue;
}
}
echo '<option value="' . esc_attr( sanitize_title( $option ) ) . '" ' . selected( sanitize_title( $selected_value ), sanitize_title( $option ), false ) . '>' . esc_html( apply_filters( 'woocommerce_variation_option_name', $option ) ) . '</option>';
}
}
此代码未测试,因此我不知道它是否有效。但它应该指向正确的指针。