问题描述
我要在结帐页面上隐藏帐单地址(而不是删除帐单地址),并在注册时首次设置帐单地址?
I want to hide the billing address from the checkout page (not remove it) and make the billing address set for the first time when registered?
要允许显示在帐单上。pdf
To allow display on the bill .pdf
我添加以下代码:
<?php
add_filter( 'woocommerce_checkout_fields' , 'custom_override_checkout_fields' );
function custom_override_checkout_fields( $fields ) {
unset($fields['billing']['billing_first_name']);
unset($fields['billing']['billing_last_name']);
unset($fields['billing']['billing_company']);
unset($fields['billing']['billing_address_1']);
unset($fields['billing']['billing_address_2']);
unset($fields['billing']['billing_city']);
unset($fields['billing']['billing_postcode']);
unset($fields['billing']['billing_country']);
unset($fields['billing']['billing_state']);
unset($fields['billing']['billing_phone']);
unset($fields['order']['order_comments']);
unset($fields['billing']['billing_address_2']);
unset($fields['billing']['billing_postcode']);
unset($fields['billing']['billing_company']);
unset($fields['billing']['billing_last_name']);
unset($fields['billing']['billing_email']);
unset($fields['billing']['billing_city']);
return $fields;
}
通过添加此代码,账单地址未添加到pdf中bill
And by adding this code, the billing address wasn't added to the pdf bill
那么我应该添加或编辑哪个代码?
So which code shall I add or edit?
谢谢。
推荐答案
第一步:注册时首次设置帐单地址
1)您需要更改WooCommerce设置进行注册。
WooCommerce 设置> 帐户(标签) :
1) You need to change WooCommerce setting for registration.
WooCommerce Settings > Account (tab):
2)在用户注册我的帐户页中添加计费字段:
2) Adding Billing fields in user registration My Account page:
基础:
自定义代码(将该代码复制到活动的子主题或主题的function.php文件中):
if( !is_admin() )
{
// Function to check starting char of a string
function startsWith($haystack, $needle)
{
return $needle === '' || strpos($haystack, $needle) === 0;
}
// Custom function to display the Billing Address form to registration page
function my_custom_function()
{
global $woocommerce;
$checkout = $woocommerce->checkout();
?>
<h3><?php _e( 'Billing Address', 'woocommerce' ); ?></h3>
<?php
foreach ($checkout->checkout_fields['billing'] as $key => $field) :
woocommerce_form_field( $key, $field, $checkout->get_value( $key ) );
endforeach;
}
add_action('register_form','my_custom_function');
// Custom function to save Usermeta or Billing Address of registered user
function save_address($user_id)
{
global $woocommerce;
$address = $_POST;
foreach ($address as $key => $field) :
if(startsWith($key,'billing_'))
{
// Condition to add firstname and last name to user meta table
if($key == 'billing_first_name' || $key == 'billing_last_name')
{
$new_key = explode('billing_',$key);
update_user_meta( $user_id, $new_key[1], $_POST[$key] );
}
update_user_meta( $user_id, $key, $_POST[$key] );
}
endforeach;
}
add_action('woocommerce_created_customer','save_address');
// Registration page billing address form Validation
function custom_validation()
{
global $woocommerce;
$address = $_POST;
foreach ($address as $key => $field) :
// Validation: Required fields
if(startsWith($key,'billing_'))
{
if($key == 'billing_country' && $field == '')
{
$woocommerce->add_error( '' . __( 'ERROR', 'woocommerce' ) . ': ' . __( 'Please select a country.', 'woocommerce' ) );
}
if($key == 'billing_first_name' && $field == '')
{
$woocommerce->add_error( '' . __( 'ERROR', 'woocommerce' ) . ': ' . __( 'Please enter first name.', 'woocommerce' ) );
}
if($key == 'billing_last_name' && $field == '')
{
$woocommerce->add_error( '' . __( 'ERROR', 'woocommerce' ) . ': ' . __( 'Please enter last name.', 'woocommerce' ) );
}
if($key == 'billing_address_1' && $field == '')
{
$woocommerce->add_error( '' . __( 'ERROR', 'woocommerce' ) . ': ' . __( 'Please enter address.', 'woocommerce' ) );
}
if($key == 'billing_city' && $field == '')
{
$woocommerce->add_error( '' . __( 'ERROR', 'woocommerce' ) . ': ' . __( 'Please enter city.', 'woocommerce' ) );
}
if($key == 'billing_state' && $field == '')
{
$woocommerce->add_error( '' . __( 'ERROR', 'woocommerce' ) . ': ' . __( 'Please enter state.', 'woocommerce' ) );
}
if($key == 'billing_postcode' && $field == '')
{
$woocommerce->add_error( '' . __( 'ERROR', 'woocommerce' ) . ': ' . __( 'Please enter a postcode.', 'woocommerce' ) );
}
if($key == 'billing_email' && $field == '')
{
$woocommerce->add_error( '' . __( 'ERROR', 'woocommerce' ) . ': ' . __( 'Please enter billing email address.', 'woocommerce' ) );
}
if($key == 'billing_phone' && $field == '')
{
$woocommerce->add_error( '' . __( 'ERROR', 'woocommerce' ) . ': ' . __( 'Please enter phone number.', 'woocommerce' ) );
}
}
endforeach;
}
add_action('register_post','custom_validation');
}
第二步:隐藏帐单地址checkout whiteout将其删除
您将需要使用CSS定位具有 display:none!important;
规则。
You will need to use CSS targeting the billing block fields with display: none !important;
rule.
这篇关于从结帐页面隐藏帐单地址,但保留信息的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!