在Woocommerce中使is_purchasable挂钩与版本和产品标签一起使用

时间:2018-11-05 00:10:49

标签: php wordpress woocommerce custom-taxonomy variations

我正试图阻止访问者根据产品标签购买某些产品。

我正在使用'woocommerce_is_purchasable' woocommerce过滤器,但不适用于可变产品。

这是我的代码:

    function remove_add_to_cart_for_tag_id ( $purchasable, $product ){

    if( $product->get_tag_ids() == array(181)) {

      $purchasable = false;

    } else {
      return $purchasable;
    }

    if ( $purchasable && $product->is_type( 'variation' ) ) {
        $purchasable = $product->parent->is_purchasable();
    }

    return $purchasable;

}
add_filter( 'woocommerce_is_purchasable', 'remove_add_to_cart_for_tag_id', 10, 2 );
add_filter( 'woocommerce_variation_is_purchasable', 'remove_add_to_cart_for_tag_id', 10, 2 );

我的代码基于以下示例:Get is_purchasable hook working for Woocommerce product variations too

任何评论都受到好评,谢谢。

1 个答案:

答案 0 :(得分:1)

您的代码中有一些错误和错误。尝试以下替代方法(以使其也适用于产品变体)

add_filter( 'woocommerce_is_purchasable', 'remove_add_to_cart_for_tag_id', 10, 2 );
add_filter( 'woocommerce_variation_is_purchasable', 'remove_add_to_cart_for_tag_id', 10, 2 );
function remove_add_to_cart_for_tag_id ( $purchasable, $product ){
    // For product variations (from variable products)
    if ( $product->is_type('variation') ){
        $parent = wc_get_product( $product->get_parent_id() );
        $tag_ids = $parent->get_tag_ids(); 
    } 
    // For other product types
    else {
        $tag_ids = $product->get_tag_ids();
    }

    if( in_array( 181, $tag_ids ) ) {
        $purchasable = false;
    }

    return $purchasable;
}

代码进入您的活动子主题(或活动主题)的function.php文件中。现在应该可以使用了。