我们有一家商店,可与WordPress和WooCommerce合作。
几乎所有产品都会调用api,即更新客户端数据库。但是,我们不需要向用户销售产品,而且还没有指定他们的" club_card"元。
有没有办法检查,用户是否指定了这样的元素,并限制购买产品的访问权限,如果不是
答案 0 :(得分:0)
最后我使用这个解决方案:
我们在public class Complaint extends CommonEntity {
@NotNull
@ManyToOne
@JoinColumn(name = "customer_id", updatable = false)
private Customer customer;
}
hook
woocommerce_add_to_cart
并检查每件产品,如果有标签显示,此产品仅供俱乐部用户使用:
add_action('woocommerce_add_to_cart', 'on_add_to_cart_check_club_info', 10,2);
答案 1 :(得分:0)
您不需要等到项目被添加然后重新指示。您可以验证是否可以在woocommerce_add_to_cart_validation
过滤器上添加该项目。其余的逻辑非常有效。
add_filter( 'woocommerce_add_to_cart_validation', 'so_34505885_add_to_cart_validation' ), 10, 6 );
function so_34505885_add_to_cart_validation( $passed_validation, $product_id, $product_quantity, $variation_id = '', $variations = array(), $cart_item_data = array() ) {
// If product tagged as for club members
if (has_term( 'club-only', 'product_tag', $product_id )){
$current_user = wp_get_current_user();
if ( !$current_user || $current_user->club_card_number == ''){
wc_add_notice( sprintf( __( 'You must be a club member to purchase this product.', 'your-plugin-textdomain' ), $mnm_item->get_title() ), 'error' );
$passed_validation = false;
}
}
return $passed_validation;
}
甚至更好的是,您甚至可以完全阻止添加到购物车按钮,甚至无法通过切换产品是否可购买来购买无法购买的商品。
add_filter( 'woocommerce_is_purchasable', 'so_34505885_is_purchasable' ), 10, 2 );
function so_34505885_is_purchasable( $purchasable, $product_id ) {
// If product tagged as for club members
if (has_term( 'club-only', 'product_tag', $product_id )){
$current_user = wp_get_current_user();
if ( !$current_user || $current_user->club_card_number == ''){
wc_add_notice( sprintf( __( 'You must be a club member to purchase this product.', 'your-plugin-textdomain' ), $mnm_item->get_title() ), 'error' );
$purchasable = false;
}
}
return $purchasable;
}