我目前使用woocommerce和gravity form插件设置wordpress网站。我正在销售自行车车轮,在我的产品页面上,我使用重力表来显示不同的自定义选项。如果选择一个轮子或两个轮子,选项会有所不同。
我想要实现的目标
如果选择两个轮子,我想增加5%的折扣,如果选择了四个+,我想增加10%。此折扣将应用于产品,因为它已添加到购物车中。
我正在尝试创建一个自定义插件,该插件使用javascript从重力表单输入中获取值,并挂钩到woocommerce以编辑总价格,然后再将其添加到购物车中。
到目前为止我有什么
custom.js
jQuery(document).ready(function () {
jQuery('.cart').submit(function () {
var noOfWheels = jQuery(".rdoWheel input[type='radio']:checked").val();
console.log(noOfWheels)
var data = {
action: 'my_discount',
wheels: noOfWheels
};
jQuery.ajax({
type: 'POST',
url: discountAjax.ajax_url,
data: data,
success: function (data) {
//do nothing
},
});
return false;
});
});
discount.php
add_action('wp_enqueue_scripts', 'load_script');
function load_script() {
wp_enqueue_script('discount', plugin_dir_url( __FILE__ ) . 'custom/custom.js', array( 'jquery' ) );
wp_localize_script('discount', 'discountAjax', array('ajaxurl' => admin_url('admin-ajax.php')));
}
add_action('wp_ajax_woocommerce_discount', 'calculate', 10);
add_action('wp_ajax_nopriv_woocommerce_discount', 'calculate', 10);
function calculate() {
if (isset($_POST['wheels'])) {
global $woocommerce;
$wheels = $_POST['wheels'];
if ($wheels === "1") {
$val = 0;
} elseif ($wheels === "2"){
$val = 10;
}
session_start();
$_SESSION['val'] = $val;
}
}
add_action('woocommerce_before_calculate_totals', 'add_discount');
function add_discount( $cart_object) {
@session_start();
if (isset($_SESSION['val'])) {
$wheels = $_SESSION['val'];
foreach ( $cart_object->cart_contents as $key => $value ) {
$c_price = $value['data']->price;
$discountAmount = $c_price * $wheels/100;
$value['data']->price = $value['data']->price - $discountAmount;
}
//for testing purpose
echo $_SESSION['val'];
echo 'completed';
unset($_SESSION['val']);
}
}
发生了什么
似乎woocommerce功能根本没有发射。当我用firebug检查时,我看到我的ajax请求通过没关系,然后没有别的。如果我删除除add_discount函数之外的所有内容,那么它将通过并应用折扣。我似乎无法使用javascript / ajax。