我的 wooCommerce 安装上有一个 Ajax 结帐,我正在尝试捕获结帐时的自定义字段。我正在使用下面的代码来尝试捕获名为add_gift_box的字段,该字段在我的结帐页面上看起来很好。
add_action( 'woocommerce_checkout_update_order_meta', 'my_custom_checkout_field_update_order_meta' );
function my_custom_checkout_field_update_order_meta( $order_id ) {
if ($_POST['add_gift_box']) {
update_post_meta( $order_id, '_add_gift_box', esc_attr($_POST['add_gift_box']));
}
}
当我按下"下订单"按钮时,它会创建一个新订单,但此字段的值不会保存在数据库中。我认为连钩子都不会被解雇。正如我所说,一切都由Ajax处理。结帐页面是一页结帐。
我需要帮助解决这个问题。提前谢谢。
更新
我按如下方式设置字段:
add_action( 'woocommerce_after_checkout_billing_form', 'add_box_option_to_checkout' );
function add_box_option_to_checkout( $checkout ) {
woocommerce_form_field( 'add_gift_box', array(
'type' => 'radio',
'class' => array('add_gift_box form-row-wide'),
'label_class' => array('checkbox'),
'input_class' => array('input-checkbox'),
'required' => true,
'options' => array(
'option_1' => 'option1</br>' ,
'option_2' =>'option2</br>',
'option_3' =>'option3</br>',
'option_4' =>'option4</br>',
'option_5' =>'option5</br>',
'option_6' =>'option6</br>',
'option_7' =>'option7</br>',
),
'label' => __('Select Option'),
'placeholder' => __(''),
), $checkout->get_value( 'add_gift_box' ));
}
这里有一个插件,可以在结帐页面上添加自定义字段 伍康梅斯 https://wordpress.org/plugins/woo-custom-checkout-field/
或者如果你想通过代码添加,你可以从这里开始
https://www.cloudways.com/blog/custom-field-woocommerce-checkout-page/
add_action("woocommerce_after_order_notes"、"customise_checkout_field"(;
function customise_checkout_field($checkout)
{
echo '<div id="customise_checkout_field"><h2>' . __('Heading') . '</h2>';
woocommerce_form_field('customised_field_name', array(
'type' => 'text',
'class' => array(
'my-field-class form-row-wide'
) ,
'label' => __('Customise Additional Field') ,
'placeholder' => __('Guidence') ,
'required' => true,
) , $checkout->get_value('customised_field_name'));
echo '</div>';
}
您是否激活了一个插件,该插件通过挂钩到过滤器来创建订单woocommerce_create_order
?我看不出任何其他原因为什么add_gift_box没有被保存或为什么woocommerce_checkout_update_order_meta
没有被解雇。
来自 include/class-wc-checkout.php 的原始代码是
/**
* Action hook to adjust order before save.
* @since 3.0.0
*/
do_action( 'woocommerce_checkout_create_order', $order, $data );
// Save the order.
$order_id = $order->save();
do_action( 'woocommerce_checkout_update_order_meta', $order_id, $data );
因此,您可以在主题目录中创建日志文件,以查看哪些钩子像这样触发:
add_action('woocommerce_checkout_update_order_meta', function ($order_id) {
file_put_contents(__DIR__ . '/woocommerce_checkout_update_order_meta.log', 'woocommerce_checkout_update_order_meta fired for order id ' . $order_id);
});
add_action('woocommerce_checkout_create_order', function () {
file_put_contents(__DIR__ . '/woocommerce_checkout_create_order.log', 'woocommerce_checkout_create_order fired');
});