【发布时间】:2020-06-19 22:15:40
【问题描述】:
我有一个使用以下代码创建的自定义结帐字段:
add_action( 'woocommerce_before_order_notes', 'add_custom_checkout_field' );
function add_custom_checkout_field( $checkout ){
woocommerce_form_field( 'number_id', array(
'type' => 'number',
'class' => array( 'form-row-wide' ),
'label' => 'Amount',
'placeholder' => 'Place your number here',
'required' => false,
), $checkout->get_value( 'number_id' ) );
}
我希望此字段显示在下订单按钮之前的空间中。我尝试执行以下操作,但没有成功:
add_action( 'woocommerce_review_order_before_submit', 'review_order_before_submit_state_message' );
function review_order_before_submit_state_message() {
$amount = WC()->session->get('number_id');
$message = "Amount you entered is: <strong>".$amount;
echo '<ul class="woocommerce-info">'.$message.'</ul>';
}
这个金额也可以根据客户的输入而改变,所以也尝试了 javascript,但购物车没有刷新:
add_action( 'wp_footer', 'bbloomer_checkout_radio_choice_refresh' );
function bbloomer_checkout_radio_choice_refresh() {
if ( ! is_checkout() ) return;
?>
<script type="text/javascript">
jQuery( function($){
$('form.checkout').on('change', 'input[name=number_id]', function(e){
e.preventDefault();
var p = $(this).val();
$.ajax({
type: 'POST',
url: wc_checkout_params.ajax_url,
data: {
'action': 'woo_get_ajax_data',
'radio': p,
},
success: function (result) {
$('body').trigger('update_checkout');
}
});
});
});
</script>
<?php
}
// WP Ajax Function
add_action( 'wp_ajax_woo_get_ajax_data', 'woo_get_ajax_data' );
add_action( 'wp_ajax_nopriv_woo_get_ajax_data', 'woo_get_ajax_data' );
function woo_get_ajax_data() {
if ( isset($_POST['number_id']) ){
$number_id = sanitize_key( $_POST['number_id'] );
WC()->session->set('number_id', $number_id );
echo json_encode( $number_id );
}
die();
}
谁能告诉我我做错了什么?谢谢。
更新
add_action( 'wp_ajax_woo_get_ajax_data', 'woo_get_ajax_data' );
add_action( 'wp_ajax_nopriv_woo_get_ajax_data', 'woo_get_ajax_data' );
function woo_get_ajax_data() {
if ( isset($_POST['number_id']) ){
$number_id = sanitize_key( $_POST['number_id'] );
WC()->session->set('number_id', $number_id );
echo json_encode( $number_id );
}
die();
}
【问题讨论】:
-
你也可以发布
woo_get_ajax_data函数吗? -
我没有 woo_get_ajax_data,因为我从bloomer 中挑选了这段代码,并尝试了 billing_city 和 billing_phone 的 javascript,它成功了。
-
如果你希望你的 ajax 返回任何东西,你需要这个。
-
add_action( 'wp_ajax_woo_get_ajax_data', 'woo_get_ajax_data' ); add_action( 'wp_ajax_nopriv_woo_get_ajax_data', 'woo_get_ajax_data' ); function woo_get_ajax_data() { if ( isset($_POST['number_id']) ){ $number_id = sanitize_key( $_POST['number_id'] ); WC()->session->set('number_id', $number_id ); echo json_encode( $number_id ); } die(); } -
所以 - 您没有将
$_POST['number_id']设置为您的 ajax 函数
标签: javascript php session woocommerce checkout