首页 文章

如何在woocommerce中的ajax结账中使用自定义结帐字段

提问于
浏览
0

我在我的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处理的 . 结帐页面是一页结帐 .

我需要帮助整理出来 . 提前致谢 .

UPDATE

我按如下方式设置字段:

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' ));


}

2 回答

  • 0

    这是一个在结帐页面上添加自定义字段的插件woocomerce 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>';
    }
    
  • 0

    你有一个激活的插件,通过挂钩到 woocommerce_create_order 过滤器创建订单?我没有't see any other reason why add_gift_box isn' t保存或为什么 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');
    });
    

相关问题