【发布时间】:2018-08-02 08:02:41
【问题描述】:
我已经像这样在结帐页面中放置了一个选择框。
function rx_wc_reward_points_check() {
$reward_points = '<select class="rx-rewad-points" id="rx-redemption-points">
<option value="1250">$25.00 Off (1250 Points) </option>
<option value="2500">$50.00 Off (2500 Points) </option>
<option value="5000">$100.00 Off (5000 Points) </option>
<option value="7000">$150.00 Off (7000 Points) </option>
</select>';
$reward_points .= '<a class="button alt" name="rx_reward_points_btn" id="rx_reward_points" value="Apply" data-value="Reward Points">Apply Now</a>';
echo $reward_points;
}
add_action( 'woocommerce_checkout_after_customer_details', 'rx_wc_reward_points_check', 10, 0 );
之后我将它添加到函数文件中
function rx_wc_deduct_reward() {
global $woocommerce;
$reward_value = $_POST['rewardpoints'];
WC()->cart->add_fee( 'Fee', -$reward_value );
echo 'success';
exit;
}
add_action( 'wp_ajax_rx_wc_deduct_reward', 'rx_wc_deduct_reward' );
add_action( 'wp_ajax_nopriv_rx_wc_deduct_reward', 'rx_wc_deduct_reward' );
这是用于ajax部分
jQuery(document).ready( function() {
jQuery('#rx_reward_points').on('click', function() {
var selectedrewad = jQuery( "#rx-redemption-points option:selected" ).val();
jQuery.ajax({
type : "post",
url : ajax_var.ajaxurl,
data : { action: "rx_wc_deduct_reward", rewardpoints : selectedrewad },
success: function(response) {
console.log(response)
if(response == "success") {
console.log('done');
}
else {
console.log("Your vote could not be added")
}
}
});
})
})
但它不起作用。我在“rx_wc_deduct_reward”函数中犯了一些错误。我不知道该怎么做。
感谢任何帮助。
【问题讨论】:
-
请记住,精明的用户可以将奖励点的任何值发布到服务器。所以你的后端代码应该检查用户有那么多点,不知道有没有。
-
你想说什么?我无法正确理解。对不起
-
$reward_value = $_POST['rewardpoints'];不保证是下拉列表中的值。它可能等于 10,000,000,或 -1,或“你好”,因为用户可以更改它。在将其应用于购买之前,您的服务器代码应检查其是否有效。
标签: php jquery ajax wordpress woocommerce