我正在尝试在Woocommerce商店中实施“兑换优惠券”功能,我已经找到了有用的教程,但我无法使其正常工作。
我已经做过的事情:
使用以下代码创建新的页面模板:
<div class="redeem-coupon">
<form id="ajax-coupon-redeem">
<p>
<input type="text" name="coupon" id="coupon"/>
<input type="submit" name="redeem-coupon" value="Redeem Offer" />
</p>
<p class="result"></p>
</form><!-- #ajax-coupon-redeem -->
将此添加到我的主题的functions.php文件中:
add_action( 'wp_ajax_spyr_coupon_redeem_handler', 'spyr_coupon_redeem_handler' );
add_action( 'wp_ajax_nopriv_spyr_coupon_redeem_handler', 'spyr_coupon_redeem_handler' );
将此添加到我的主题的functions.php文件中:
function spyr_coupon_redeem_handler() {
// Get the value of the coupon code
$code = $_REQUEST['coupon_code'];
// Check coupon code to make sure is not empty
if( empty( $code ) || !isset( $code ) ) {
// Build our response
$response = array(
'result' => 'error',
'message' => 'Code text field can not be empty.'
);
header( 'Content-Type: application/json' );
echo json_encode( $response );
// Always exit when doing ajax
exit();
}
// Create an instance of WC_Coupon with our code
$coupon = new WC_Coupon( $code );
// Check coupon to make determine if its valid or not
if( ! $coupon->id && ! isset( $coupon->id ) ) {
// Build our response
$response = array(
'result' => 'error',
'message' => 'Invalid code entered. Please try again.'
);
header( 'Content-Type: application/json' );
echo json_encode( $response );
// Always exit when doing ajax
exit();
} else {
// Coupon must be valid so we must
// populate the cart with the attached products
foreach( $coupon->product_ids as $prod_id ) {
WC()->cart->add_to_cart( $prod_id );
}
// Build our response
$response = array(
'result' => 'success',
'href' => WC()->cart->get_cart_url()
);
header( 'Content-Type: application/json' );
echo json_encode( $response );
// Always exit when doing ajax
exit();
}
}
创建“kody.js”:
jQuery( document ).ready( function() {
jQuery( '#ajax-coupon-redeem input[type="submit"]').click( function( ev ) {
// Get the coupon code
var code = jQuery( 'input#coupon').val();
// We are going to send this for processing
data = {
action: 'spyr_coupon_redeem_handler',
coupon_code: code
}
// Send it over to WordPress.
jQuery.post( woocommerce_params.ajax_url, data, function( returned_data ) {
if( returned_data.result == 'error' ) {
jQuery( 'p.result' ).html( returned_data.message );
} else {
// Hijack the browser and redirect user to cart page
window.location.href = returned_data.href;
}
})
// Prevent the form from submitting
ev.preventDefault();
});
});
使用以下代码调用functions.php中的脚本:
function my_scripts_method() {
wp_register_script('kody',
get_template_directory_uri() . '/js/kody.js',
array('jquery'),
'1.0' );
enqueue the script
wp_enqueue_script('kody');
}
add_action('wp_enqueue_scripts', 'my_scripts_method');
这是奇怪的事情:它有点工作。我已经设置了一个页面,我可以输入优惠券代码,粘贴代码,点击“兑换”,然后将与优惠券相关的产品添加到购物车。但是,它不适用于预先定义的折扣。
“兑换优惠券”页面也只是半工作。当有人将字段留空或输入错误的代码时,它应该显示错误消息 - 它只会执行前者。输入错误的代码会导致重定向到购物车。
我对Ajax和JS的了解非常有限,我试图找到其他一些教程,但没有任何运气。
代码有问题吗?这是从2014年开始,因此Wordpress引擎可能会发生变化,从而引发麻烦。
提前感谢您的回复!
此致
答案 0 :(得分:0)
问题解决了,如果有人遇到与提供的教程类似的问题,这就是你要做的事情:
要应用折扣,请添加以下代码:
global $woocommerce;
WC()->cart->add_discount( $code );
就在这些界限之下:
// Coupon must be valid so we must
// populate the cart with the attached products
foreach( $coupon->product_ids as $prod_id ) {
WC()->cart->add_to_cart( $prod_id );
要显示无效的代码消息,请执行以下操作:
// Check coupon to make determine if its valid or not
if( ! $coupon->id && ! isset( $coupon->id ) ) {
对此:
// Check coupon to make determine if its valid or not
if( ! $coupon->id && ! isset( $coupon_id ) ) {
现在一切正常。
(还更改了标题,以便其他人在将来更容易找到此帖子。)