如果用户没有元,则限制某些产品的访问权限

时间:2015-12-29 06:45:25

标签: php wordpress woocommerce

我们有一家商店,可与WordPress和WooCommerce合作。

几乎所有产品都会调用api,即更新客户端数据库。但是,我们不需要向用户销售产品,而且还没有指定他们的" club_card"元。

有没有办法检查,用户是否指定了这样的元素,并限制购买产品的访问权限,如果不是

2 个答案:

答案 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;
}