首页 文章

保存结帐自定义字段,将值合并到WooCommerce中的现有字段

提问于
浏览
2

我已经根据可以找到的所有示例为WooCommerce创建了以下自定义结帐字段 .

  • 结算门牌号码 billing_houseno

  • 送货号码 shipping_houseno

输出显示地址字段(街道)和门牌号字段 . 工作得很好 . 在自定义门牌号字段中很好地存储数据,而地址的工作方式与通常情况相同 - 当然 .

我想将以下字段合并为一个:

billing_address_1 现有字段中

  • billing_address_1billing_houseno .
    shipping_address_1 现有字段中
  • shipping_address_1shipping_houseno .

因此它将在一个数据库字段中组合两个字段 .

有没有办法将两个字段存储在一个现有字段中?

3 回答

  • 0

    更新:在您的注释代码链接中,您的代码中存在一些错误:1)在您的bones_add_field_and_reorder_fields函数中,您未设置结算和运输公司,但在几行之后,您尝试将这些值设置为:$ newfields [ 'billing'] ['billing_company'] = $ fields ['billing'] ['billing_company'];
    $ newfields ['shipping'] ['shipping_company'] = $ fields ['shipping'] ['shipping_company'];
    这会引发一些错误......你不应该取消'billing_company'和'shipping_company' . 2)你正在使用$ order-> id,它应该被$ order-> get_id()取代 . 3)我已经使用您更新的代码和我更新的功能测试了所有内容 . 有用…

    使用挂钩在 woocommerce_checkout_update_order_meta 动作钩子中的自定义函数,您将能够合并值 .

    add_action( 'woocommerce_checkout_update_order_meta', 'custom_checkout_field_update_order_meta', 10, 2 );
    function custom_checkout_field_update_order_meta( $order_id ) {
        $separator = '. '; // Separator for merged fields
    
        // Billing fields
        $billing_address_1 = sanitize_text_field( $_POST['billing_address_1'] );
        $billing_houseno   = sanitize_text_field( $_POST['billing_houseno'] );
    
        if( ! ( empty($billing_address_1) && empty($billing_houseno) ) )
            update_post_meta( $order_id, '_billing_address_1', $billing_address_1 . $separator . $billing_houseno );
    
        $shipping_address_1 = sanitize_text_field( $_POST['shipping_address_1'] );
        $shipping_houseno   = sanitize_text_field( $_POST['shipping_houseno'] );
    
        if( ! ( empty($shipping_address_1) && empty($shipping_houseno) ) )
            update_post_meta( $order_id, '_shipping_address_1', $shipping_address_1 . $separator . $shipping_houseno );
    }
    

    代码位于活动子主题(或活动主题)的function.php文件中 .

    这一次,这是经过测试和运作的 .

  • 0

    试试这个

    add_action('woocommerce_checkout_update_order_meta', 'customise_checkout_field_update_order_meta',10,2);
    
    function customise_checkout_field_update_order_meta($order_id, $posted_data)
    {
    //write your code here to update custom data.
    }
    
  • 0
    <?php
    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 ( ! empty( $_POST['billing_houseno'] ) ) {
            $billing_houseno = $_POST['billing_houseno'];
            $billing_address_1 = $_POST['billing_address_1'];
            $new_billing_address = $billing_houseno.'.'.$billing_address_1;
            update_post_meta( $order_id, '_billing_address_1', $new_billing_address );
        }
        if(!empty($_POST['shipping_houseno'])){
            $shipping_houseno = $_POST['shipping_houseno'];
            $shipping_address_1 = $_POST['shipping_address_1'];
            $new_shipping_address = $shipping_houseno.'.'.$shipping_address_1;
            update_post_meta( $order_id, '_shipping_address_1', $new_shipping_address );    
        }
    }
    ?>
    

相关问题