【发布时间】:2018-12-19 05:56:40
【问题描述】:
我们正在使用 Klarna Checkout(第三方插件)为我们的 WooCommerce 平台处理付款。
将产品添加到购物车后,会出现 Klarna 结帐表单,其中包含所需的详细信息,例如 电子邮件 和 联系电话。
当用户输入他们的电子邮件时,我会确定它是否是一封新电子邮件,并给予 50% 的折扣:
our-custom.js
var j = jQuery.noConflict();
// check every second if email is filled
var check_is_email_done = setInterval(function() {
var is_email_done = j('.klarna-widget-form-user .email').text();
if(is_email_done.length > 0) {
console.log('email is filled: ' + is_email_done);
var notFound = j('.fortnox-users td').filter(function(){
return j(this).text() == is_email_done;
}).get();
var token = notFound.length;
if(token > 0) {
console.log('Old customer..');
} else {
console.log('New customer..');
// call new_customer_discount() method in functions.php
j.ajax({
type: 'GET',
url: ajaxurl,
cache: false,
data: { action: 'newcustomerdiscount'},
success: function(data) {
console.log('newcustomerdiscount' + data);
},
error: function(xhr,status,error) {
console.log('newcustomerdiscount error:'+error);
}
});
}
clearInterval(check_is_email_done);
}
},1000);
functions.php
function new_customer_discount() {
//echo "new_customer_discount123";
$my_total = wc_format_decimal(WC()->cart->total, 2);
echo 'Total: '.$my_total;
do_action('woocommerce_calculate_totals', function($cart) {
if ( is_admin() && ! defined( 'DOING_AJAX' ) )
return;
print_r($cart);
$computed_price = 0;
// Loop Through cart items
foreach ( $cart->get_cart() as $cart_item ) {
// Get the product id (or the variation id)
$product_id = $cart_item['data']->get_id();
// GET THE NEW PRICE (code to be replace by yours)
if($computed_price > 0)
$prod_price = $computed_price * .50; // 50% discount
// Updated cart item price
$cart_item['data']->set_price( $prod_price );
}
});
}
我上面的代码流程是当我确定一个客户是否是新客户时,我调用 functions.php 中的new_customer_discount() 方法然后执行带有回调的do_action
你知道我怎样才能在functions.php中正确执行上面的钩子吗?任何帮助是极大的赞赏。谢谢
【问题讨论】:
标签: php jquery ajax wordpress woocommerce