首页 文章

从Checkout页面检索自定义字段值

提问于
浏览
2

在WooCommerce Checkout页面上,我添加了一个客户必须输入结账的额外字段 .

我想在woocommerce_cart_calculate_fees动作挂钩中访问此字段的值 .

我通过使用woocommerce->客户数据和订单数据尝试了几种方法但却无法获得 Value . 非常感谢任何帮助 .

/* WooCommerce Add Extra Fees */
add_action( 'woocommerce_cart_calculate_fees','endo_handling_fee' );
function endo_handling_fee() {
 global $woocommerce, $post;

 if ( is_admin() && ! defined( 'DOING_AJAX' ) )
      return;

 // Get the order ID
 $order = new WC_Order($post->ID);
 // to escape # from order id 
 $order_id = trim(str_replace('#', '', $order->get_order_number()));

 // Here is where I want to get the field value
 $orderFee = get_post_meta( $order_id, 'decedents_name_field', true );

}

1 回答

  • 0

    我遇到了同样的问题 . 如果购物车中的产品数量少于一定数量并且用户想要交货(我的自定义字段),则需要支付运费 . 我最终要做的就是通过AJAX将数据发送到服务器,如下所示:

    jQuery("select#delivery_pickup_field").change(function(e) {
        var data = {
            action: 'woocommerce_delivery_fee',
            security: wc_checkout_params.apply_delivery_nonce,
            delivery_option: this.value 
        };
    
        jQuery.ajax({
            type: 'POST',
            url: wc_checkout_params.ajax_url,
            data: data,
            success: function (code) {
                if (code === '0') {
                    jQuery('body').trigger('update_checkout');
                }
                console.log(code);
            },
            dataType: 'html'
        });
        return false;
    });
    

    然后获取该数据并将其放入SESSION变量中

    // Give server access to status of delivery select
    add_action('wp_ajax_woocommerce_delivery_fee', 'ajax_add_delivery_fee', 10);
    add_action('wp_ajax_nopriv_woocommerce_delivery_fee', 'ajax_add_delivery_fee', 10);
    function ajax_add_delivery_fee() {
        if(isset($_POST['delivery_option'])) {
            session_start();
            $_SESSION['delivery_option'] = $_POST['delivery_option'];
            return 1;
        }
        return 0;
    }
    

    从那里,您的服务器现在可以访问您的自定义字段具有的任何值 .

    // Adding delivery fee if fewer than 6 items is in cart
    add_action( 'woocommerce_cart_calculate_fees', 'minimum_delivery_fee' );
    function minimum_delivery_fee($instance) {
        global $woocommerce;
        @session_start();
        $order_meta = $_SESSION['delivery_option'];
    
        if(($woocommerce->cart->cart_contents_count < 6) && ($order_meta == 'delivery')) {
            $woocommerce->cart->add_fee( __('Delivery Fee', 'woocommerce'), 15 );
        }
    }
    

    正如helgatheviking指出的那样,该订单尚未提交但不存在 . 我能看到你获得所需数据的唯一方法是通过AJAX将其发送到服务器 .

    如果这令人困惑,请查看我用于更多信息的source .

相关问题