在Woocommerce中检查购物车项目中的产品类别

时间:2018-07-02 12:30:44

标签: php wordpress woocommerce cart custom-taxonomy

在woocommerce中,我尝试使用以下方式检入特定产品类别的购物车项目:

<local:CustomLabel x:Name="c00" Content="{Binding BestIndividual[0]}" Margin="0" Style="{StaticResource ContentChangedAnimated}"
        BorderThickness="2,2,0,0" BorderBrush="Black" />

我一直无法实现。当我add_action('woocommerce_before_cart', 'fs_check_category_in_cart'); function fs_check_category_in_cart() { // Set $cat_in_cart to false $cat_in_cart = false; // Loop through all products in the Cart foreach ( WC()->cart->get_cart() as $cart_item_key => $cart_item ) { $product = $cart_item['data']; echo '<pre>',print_r($product),'</pre>'; // If Cart has category "download", set $cat_in_cart to true if ( has_term( 'downloads', 'product_cat', $product->get_id() ) ) { $cat_in_cart = true; break; } } // Do something if category "download" is in the Cart if ( $cat_in_cart ) { // For example, print a notice wc_print_notice( 'Category Downloads is in the Cart!', 'notice' ); // Or maybe run your own function... // .......... } } 进行进一步检查时 数组的末尾看起来像:

print_r( $product )

该数组末尾的1将其自身附加到我尝试引用的任何变量。所以我得到

            [current_class_name:WC_Data_Store:private] => WC_Product_Data_Store_CPT
            [object_type:WC_Data_Store:private] => product-simple
    )

    [meta_data:protected] => 
)
1

如果有人知道这个数字可能从哪里来的话,就会使我感到压力!

对于记录也做downloads1 的情况,数组末尾也有1。

感谢您的帮助。

1 个答案:

答案 0 :(得分:1)

要使用WordPress has_term()条件函数检查购物车商品中的产品类别,您还需要使用$cart_item['product_id'] 来检查产品变体中的产品类别。

这样,由于产品变化类型不处理任何自定义分类标准,因此它会在父变量产品中检查产品类别。因此,现在它适用于所有情况。

所以您重新访问的代码将是:

add_action('woocommerce_before_cart', 'check_product_category_in_cart');
function check_product_category_in_cart() {
    // HERE set your product categories in the array (can be IDs, slugs or names)
    $categories = array('downloads');
    $found      = false; // Initializing

    // Loop through cart items      
    foreach ( WC()->cart->get_cart() as $cart_item ) {
        // If product categories is found
        if ( has_term( $categories, 'product_cat', $cart_item['product_id'] ) ) {
            $found = true; // Set to true
            break; // Stop the loop
        }
    }

    // If any defined product category is found, we display a notice
    if ( $found ) {
        wc_print_notice( __('Product Category "Downloads" is in Cart items!'), 'notice' );
    }
}

代码进入您的活动子主题(或活动主题)的function.php文件中。经过测试,可以正常工作。