将自定义增值税字段添加到 woocommerce 电子邮件

时间:2021-05-05 09:14:26

标签: javascript php html wordpress woocommerce

我真的被困住了,在阳光下尝试了每一个电子邮件钩。我使用了由其他人开发的过时的 PHP 代码,并针对新的 woocommerce 挂钩对其进行了修改(因为该代码已有 4 年历史)。一切正常,但我需要客户字段“billing_vat”出现在新订单管理电子邮件中。我将分享我的代码,任何帮助将不胜感激!!

谢谢

//create vat number billing field
add_filter('woocommerce_billing_fields' , 'display_billing_vat_fields');
function display_billing_vat_fields($billing_fields){
$billing_fields['billing_vat'] = array(
    'type' => 'text',
    'label' =>  __('VAT number',  'woocommerce' ),
    'class' => array('form-row-wide'),
    'required' => false,
    'clear' => true,
    'priority' => 30, // To change the field location increase or decrease this value
);

return $billing_fields;
}


// Printing the Billing Address on My Account
add_filter( 'woocommerce_my_account_my_address_formatted_address', 
'custom_my_account_my_address_formatted_address', 10, 3 );
function custom_my_account_my_address_formatted_address( $fields, $customer_id, $type ) {

if ( $type == 'billing' ) {
    $fields['vat'] = get_user_meta( $customer_id, 'billing_vat', true );
}

return $fields;
}

// Checkout -- Order Received (printed after having completed checkout)
add_filter( 'woocommerce_order_formatted_billing_address', 
'custom_add_vat_formatted_billing_address', 10, 2 );
function custom_add_vat_formatted_billing_address( $fields, $order ) {
$fields['vat'] = $order->get_meta('billing_vat');

return $fields;
}

// Creating merger VAT variables for printing formatting
add_filter( 'woocommerce_formatted_address_replacements', 
'custom_formatted_address_replacements', 10, 2 );
function custom_formatted_address_replacements( $replacements, $args  ) {
$replacements['{vat}'] = ! empty($args['vat']) ? $args['vat'] : '';
$replacements['{vat_upper}'] = ! empty($args['vat']) ? strtoupper($args['vat']) : '';

return $replacements;
}

//Defining the Spanish formatting to print the address, including VAT.
add_filter( 'woocommerce_localisation_address_formats', 'custom_localisation_address_format' );
function custom_localisation_address_format( $formats ) {
foreach($formats as $country => $string_address ) {
    $formats[$country] = str_replace('{company}\n', '{company}\n{vat_upper}\n', $string_address);
}
return $formats;

}

add_filter( 'woocommerce_customer_meta_fields', 'custom_customer_meta_fields' );
function custom_customer_meta_fields( $fields ) {
$fields['billing']['fields']['billing_vat'] = array(
    'label'       => __( 'VAT number', 'woocommerce' )
);

return $fields;

}

add_filter( 'woocommerce_admin_billing_fields', 'custom_admin_billing_fields' );
function custom_admin_billing_fields( $fields ) {
$fields['vat'] = array(
    'label' => __( 'VAT number', 'woocommerce' ),
    'show'  => true
);

return $fields;

}

add_filter( 'woocommerce_found_customer_details', 'custom_found_customer_details' );
function custom_found_customer_details( $customer_data ) {
$customer_data['billing_vat'] = get_user_meta( $_POST['user_id'], 'billing_vat', true );

return $customer_data;

}

add_filter('woocommerce_email_order_meta_fields', 'supine_add_email_order_meta_fields', 10, 3 );
function supine_add_email_order_meta_fields( $fields, $sent_to_admin, $order_obj ) {

$billing = get_post_meta( $order_obj->get_order_number(), 'billing_vat', true );

return $fields;

}

1 个答案:

答案 0 :(得分:0)

发布后不久,我找到了解决方法。我必须定义新密钥“billing_vat”,以便它与其他用户信息一起发布。除了最后一个 add_filter 钩子之外,上面的所有代码都是正确的。将其替换为以下代码,并且您已在结帐、管理后端和订单电子邮件中添加了一个可选的 vat_number 字段。这是替换最后一个“add_filter”钩子的代码片段:

// VAT Number in emails
add_filter( 'woocommerce_email_order_meta_keys', 
'supine_vat_number_display_email' );

function supine_vat_number_display_email( $keys ) {
 $keys['VAT Number'] = '_billing_vat';
 return $keys;
}

代码位于您活动子主题的functions.php 中。已测试并正常工作。