首页 文章

Woocommerce订单格式化帐单地址重新排序和自定义帐单字段

提问于
浏览
2

感谢过滤器“WooCommerce管理员帐单字段”,我已通过电子邮件在notificiación页脚中订购了帐单字段,但是当我尝试插入自定义帐单字段时,则不会显示 .

add_filter( 'woocommerce_order_formatted_billing_address' , 'woo_reorder_billing_fields', 10, 2 );

function woo_reorder_billing_fields( $address, $wc_order ) {

    $address = array(
        'first_name'    => $wc_order->billing_first_name,
        'last_name'     => $wc_order->billing_last_name,
        'company'       => $wc_order->billing_company,
        'my_field'      => $wc_order->billing_my_field,
        'country'       => $wc_order->billing_country
        );

    return $address;
}

为了管理编辑,我可以通过过滤器“woocommerce_admin_billing_fields”显示我的自定义结算字段,首先添加字段然后重新排序数组 .

我注意到我之前添加了,我在结帐时使用过滤器“woocommerce_checkout_fields”重新排序了此字段 .

如果“$ wc_order”对象将字段存储在结帐中,为什么不显示我的自定义字段?

有任何想法吗?

提前致谢!

1 回答

  • 3

    是的,这里的解释是:

    我们将注册新的cusotm字段,在此示例中,“VAT”字段用于存储欧盟公司的财务文档 . 有很多关于如何注册自定义字段并在管理员/用户面板中显示它们的文档 .

    add_filter( 'woocommerce_default_address_fields', 'woo_new_default_address_fields' );
    
    function woo_new_default_address_fields( $fields ) {
    
        $fields['vat'] = array(
    
            'label' => __( 'VAT number', 'woocommerce' ),
            'class' => array( 'form-row-wide', 'update_totals_on_change' ),
    
        );
    
        $order = array(
            "first_name",
            "last_name",
            "vat",
            "company",
            "country",
            "address_1", 
            "address_2", 
            "city",
            "state",
            "postcode"
        );
    
        foreach($order as $field) {
    
            $ordered_fields[$field] = $fields[$field];
    
        }
    
        $fields = $ordered_fields;
    
        return $fields;
    
    }
    

    然后将新字段“VAT”仅添加到邮件的帐单字段注册中,我们不希望它出现在地址fileds部分中 .

    add_filter( 'woocommerce_order_formatted_billing_address' , 'woo_custom_order_formatted_billing_address', 10, 2 );
    
    function woo_custom_order_formatted_billing_address( $address, $WC_Order ) {
    
        $address = array(
            'first_name'    => $WC_Order->billing_first_name,
            'last_name'     => $WC_Order->billing_last_name,
            'vat'           => $WC_Order->billing_vat,
            'company'       => $WC_Order->billing_company,
            'address_1'     => $WC_Order->billing_address_1,
            'address_2'     => $WC_Order->billing_address_2,
            'city'          => $WC_Order->billing_city,
            'state'         => $WC_Order->billing_state,
            'postcode'      => $WC_Order->billing_postcode,
            'country'       => $WC_Order->billing_country
            );
    
        return $address;
    
    }
    

    以下代码自定义地址的外观,这是我们必须将调用添加到新VAT字段的位置 . 这允许我们独立定制每个国家/地区的地址视图 .

    add_filter( 'woocommerce_formatted_address_replacements', function( $replacements, $args ){
    
        $replacements['{vat}'] = $args['vat'];
        return $replacements;
    
    }, 10, 2 );
    
    add_filter( 'woocommerce_localisation_address_formats' , 'woo_includes_address_formats', 10, 1);
    
    function woo_includes_address_formats($address_formats) {
    
        $address_formats['ES'] = "{name}\n{company}\n{vat}\n{address_1}\n{address_2}\n{postcode} {city}\n{state}\n{country}";
        $address_formats['default'] = "{name}\n{company}\n{vat}\n{nif}\n{address_1}\n{address_2}\n{city}\n{state}\n{postcode}\n{country}";
    
        return $address_formats;
    
    }
    

    有问题请问!

相关问题