以编程方式将产品添加到购物车中,并在从特定类别购买时将价格设置为零

时间:2020-11-23 作者:Jordy Steyaert

Wordpress/Woocommerce相关问题。

我想在添加某个类别的物品后,通过编程将“免费礼物”添加到购物车中。这种免费礼物实际上也是一种他们可以单独从商店购买的产品,但当它与上述类别的商品组合时,将作为免费礼物。

到目前为止,我有一个工作代码,一旦添加了特定类别的项目,就可以添加额外的产品。但我不知道如何在购物车中将此商品的价格设置为零。

/*
* Automatically adding the product to the cart.
*/

function aaptc_add_product_to_cart( $item_key, $product_id ) {

    $product_category_id    = 92; // set category id

    $product_cats_ids   = wc_get_product_term_ids( $product_id, \'product_cat\' );

    if ( ! is_admin() && in_array( $product_category_id, $product_cats_ids ) ) {
        $free_product_id = 7506;  // Product Id of the free product which will get added to cart
        $found      = false;

        //check if product already in cart
        if ( sizeof( WC()->cart->get_cart() ) > 0 ) {
            foreach ( WC()->cart->get_cart() as $cart_item_key => $values ) {
                $_product = $values[\'data\'];
                if ( $_product->get_id() == $free_product_id )
                    $found = true;
                
            }
            // if product not found, add it
            if ( ! $found )
                WC()->cart->add_to_cart( $free_product_id );
                        function return_custom_price($price, $product) {
                            $myPrice = 0;

                            global $current_user;
                            $price = $myPrice;
                            $post_id = $post->$free_product_id;
                            return $price;
                        }
                        add_filter(\'woocommerce_get_price\', \'return_custom_price\', 10, 2);
                        
        } else {
            // if no products in cart, add it
            WC()->cart->add_to_cart( $free_product_id );
                        function return_custom_price($price, $product) {
                            $myPrice = 0;

                            global $current_user;
                            $price = $myPrice;
                            $post_id = $post->$free_product_id;
                            return $price;
                        }
                        add_filter(\'woocommerce_get_price\', \'return_custom_price\', 10, 2);
        }        
    }    
}

add_action( \'woocommerce_add_to_cart\', \'aaptc_add_product_to_cart\', 10, 2 );
我很确定代码片段的以下部分在编程上是错误的,但我不确定如何实现免费添加产品的零价格。

function return_custom_price($price, $product) {
                            $myPrice = 0;

                            global $current_user;
                            $price = $myPrice;
                            $post_id = $post->$free_product_id;
                            return $price;
                        }
add_filter(\'woocommerce_get_price\', \'return_custom_price\', 10, 2);

1 个回复
SO网友:J.K.

这并不是你的代码问题的真正答案,但我解决了这个问题,用零价格创建了相同的产品,并将该版本作为免费礼物使用。然而,我想知道您使用的代码是否有效(没有零价格部分),因为我只有一个代码可以;“买一送一”;而且不是基于产品类别,而是基于一个产品ID。当我使用您发布的代码时,似乎什么都没有发生。。。

相关推荐

站点运行状况:检测到活动的PHP会话

我是WordPress开发的新手,我刚刚创建了我的第一个主题。在我的wp admin中"Site Health" 告诉我已检测到PHP会话(严重错误),下面是消息:PHP会话是通过session\\u start()函数调用创建的。这会干扰REST API和环回请求。在发出任何HTTP请求之前,会话应该由session\\u write\\u close()关闭。我需要PHP的$_SESSION 对于主题脚本,我将其添加到我的函数中。要正确初始化会话的php文件:<?php&#x