我使用动态定价来折扣项目以互相免费,我想避免让客户将免费产品添加为单独的步骤并让系统添加它。
我从snippet开始,但当项目存在时,我无法让它工作
这是我到目前为止所得到的:
<?php
function add_product_to_cart() {
if ( ! is_admin() ) {
global $woocommerce;
$product_id_gift = 2287;
$found = false;
$product_id = 30;
$incart_free = false;
foreach($woocommerce->cart->get_cart() as $cart_item_key => $values ) {
$_product = $values['data'];
if ( $_product->id == $product_id ){
$incart_free = true;
}
return $incart_free;
}
if( $incart_free == true ) {
//check if product already in cart
if ( sizeof( $woocommerce->cart->get_cart() ) > 0 ) {
foreach ( $woocommerce->cart->get_cart() as $cart_item_key => $values ) {
$_product = $values['data'];
if ( $_product->id == $product_id_gift )
$found = true;
}
// if product not found, add it
if ( $found != true )
$woocommerce->cart->add_to_cart( $product_id_gift );
} else {
// if no products in cart, add it
$woocommerce->cart->add_to_cart( $product_id_gift );
}
}
}
}
add_action( 'init', 'add_product_to_cart' );
?>
谢谢!
答案 0 :(得分:1)
如果我正确理解了您的问题,那么如果购物车中有某些商品,您可以免费提供商品。这是我的解决方案:
1. 在Wordpress中为WooCommerce创建优惠券。优惠券金额 100%和折扣类型&#39;产品%折扣&#39;。转到使用限制 - &gt;产品并指定您想要免费的特定产品,这将使优惠券仅适用于该特定产品。
2. 创建一个第一个检查购物车中是否存在特定商品的功能,如果有,则将您想要空闲的商品添加并折扣到购物车。下面的代码可以解决这个问题(我测试过它并且工作正常,尽管它不是最干净的解决方案):
var static = require('node-static');
var fs = require('fs');
var wwwpath = './www';
var fileServer = new static.Server(wwwpath);
require('http').createServer(function (request, response) {
request.addListener('end', function () {
fileServer.serve(request, response, function (err, result) {
var filepath = wwwpath + request.url;
// browser is checking cache
if (request.headers && request.headers['if-modified-since']) {
var ifModifiedSince = new Date(request.headers['if-modified-since']);
var stats = fs.statSync(filepath);
// file has been edited since
if (stats.mtime.getTime() > (ifModifiedSince.getTime() + 1000)) { // +1000 Date header is no millisecond accurate
response.writeHead(304, 'Not Modified');
response.end();
}
}
// file not found / ...
if (err) {
response.writeHead(err.status, err.headers);
response.end();
}
});
}).resume();
}).listen(8080);
希望这有帮助!
答案 1 :(得分:0)
你的逻辑在这里是完全错误的,因为if ( $_product->id == $product_id_gift )
永远不会是真的,因为 product_id 都不同。
所以逻辑应该是:
1。检查添加到购物车中的所有商品
2。检查购物车中是否有免费产品的产品
3. 如果是,则只需添加免费产品。
所以code
会是这样的:
add_action( 'init', 'add_product_to_cart' );
function add_product_to_cart() {
if ( ! is_admin() ) {
global $woocommerce;
$product_id = 30; //Your product ID here
$free_product_id = 2287; //Free product ID here
$found = false;
//check if product already in cart
if ( sizeof( $woocommerce->cart->get_cart() ) > 0 ) {
foreach ( $woocommerce->cart->get_cart() as $cart_item_key => $values ) {
$_product = $values['data'];
if ( $_product->id == $product_id ){
$found = true;
}
}
// if product not found, add it
if ( $found )
$woocommerce->cart->add_to_cart( $free_product_id );
}
}
}
注意:未经测试。也让我知道输出。