Raf*_*ngh 5 html javascript php wordpress woocommerce
我目前正在尝试将 WooCommerce 中的默认国家/地区搜索器添加到注册页面,而使用以下代码段可以使用默认国家/地区列表:
<?php
$countries_obj = new WC_Countries();
$countries = $countries_obj->get_allowed_countries();
woocommerce_form_field('billing_country',array(
'type' => 'select',
'class' => array('chzn-drop'),
'label' => __('Country'),
'placeholder' => __('Choose your country.'),
'options' => $countries,
'required' => true,
'clear' => true
));
?>
Run Code Online (Sandbox Code Playgroud)
它当然与从 WooCommerce 中选择的原始国家/地区不同,所以我想知道是否有人知道将此国家/地区选择字段添加到注册页面的正确方法。
编辑:如果我理解正确,您需要加载一个 JavaScript 库以使下拉列表正常工作,有人如何将其准确加载到注册页面上,以及如何将默认国家/地区设置为“比利时”?
Edit2:似乎与国家选择器的这部分脚本有关:
<script type='text/javascript' src='//uklederwaren.be/wp-content/plugins/woocommerce/assets/js/frontend/country-select.min.js?ver=2.6.14'></script>
Run Code Online (Sandbox Code Playgroud)
不完全确定如何将其准确添加到注册页面,因为我确定它与允许国家/地区的循环有关,而不是什么,因此我们将不胜感激!
Edit3:我找到了一个关于如何设置默认国家/地区的附带问题的答案,这可以通过在 woocommerce_form_field 数组中添加“默认”=>“XX”来完成。XX 代表国家/地区代码,因此对于比利时,这将是 BE。
提前感谢您提供更多信息。
结论:问题在 HelgaTheVviking 和 Raunak Gupta 的帮助下得到解决,我目前整个注册页面的完整代码包括所有部分(和自定义增值税页面)如下:
/* ---------------------- Registration page ----------------------- */
//Add extra fields in registration form
add_action('woocommerce_register_form_start','my_extra_register_fields');
function my_extra_register_fields(){
?>
<p class="woocommerce-FormRow form-row form-row-first">
<label for="reg_billing_first_name"><?php _e('First Name','woocommerce'); ?><span class="required">*</span></label>
<input type="text" class="input-text" name="billing_first_name" id="reg_billing_first_name" value="<?php if(! empty($_POST['billing_first_name'])) esc_attr_e($_POST['billing_first_name']); ?>"/>
</p>
<p class="woocommerce-FormRow form-row form-row-last">
<label for="reg_billing_last_name"><?php _e('Last Name','woocommerce'); ?><span class="required">*</span></label>
<input type="text" class="input-text" name="billing_last_name" id="reg_billing_last_name" value="<?php if(! empty($_POST['billing_last_name'])) esc_attr_e($_POST['billing_last_name']); ?>"/>
</p>
<div class="clearfix"></div>
<p class="woocommerce-FormRow woocommerce-FormRow--wide form-row form-row-wide">
<label for="reg_billing_company"><?php _e('Company Name','woocommerce'); ?><span class="required">*</span></label>
<input type="text" class="input-text" name="billing_company" id="reg_billing_company" value="<?php if(! empty($_POST['billing_company'])) esc_attr_e($_POST['billing_company']); ?>"/>
</p>
<div class="clearfix"></div>
<p class="woocommerce-FormRow woocommerce-FormRow--wide form-row form-row-wide">
<label for="reg_billing_vat"><?php _e('VAT Number','woocommerce'); ?><span class="required">*</span></label>
<input type="text" class="input-text" name="billing_vat" id="reg_billing_vat" value="<?php if(! empty($_POST['billing_vat'])) esc_attr_e($_POST['billing_vat']); ?>" maxlength="15" placeholder="Enter VAT Number"/>
</p>
<div class="clearfix"></div>
<?php
wp_enqueue_script('wc-country-select');
woocommerce_form_field('billing_country',array(
'type' => 'country',
'class' => array('chzn-drop'),
'label' => __('Country'),
'placeholder' => __('Choose your country.'),
'required' => true,
'clear' => true,
'default' => 'BE'
));
?>
<p class="woocommerce-FormRow form-row form-row-first">
<label for="reg_billing_postcode"><?php _e('Postcode / ZIP','woocommerce'); ?><span class="required">*</span></label>
<input type="text" class="input-text" name="billing_postcode" id="reg_billing_postcode" value="<?php if(! empty($_POST['billing_postcode'])) esc_attr_e($_POST['billing_postcode']); ?>"/>
</p>
<p class="woocommerce-FormRow form-row form-row-last">
<label for="reg_billing_city"><?php _e('Town / City','woocommerce'); ?><span class="required">*</span></label>
<input type="text" class="input-text" name="billing_city" id="reg_billing_city" value="<?php if(! empty($_POST['billing_city'])) esc_attr_e($_POST['billing_city']); ?>"/>
</p>
<div class="clearfix"></div>
<p class="woocommerce-FormRow woocommerce-FormRow--wide form-row form-row-wide">
<label for="reg_billing_address_1"><?php _e('Address','woocommerce'); ?><span class="required">*</span></label>
<input type="text" class="input-text" name="billing_address_1" id="reg_billing_address_1" value="<?php if(! empty($_POST['billing_address_1'])) esc_attr_e($_POST['billing_address_1']); ?>" placeholder="Street address"/>
</p>
<p class="woocommerce-FormRow woocommerce-FormRow--wide form-row form-row-wide">
<input type="text" class="input-text" name="billing_address_2" id="reg_billing_address_2" value="<?php if(! empty($_POST['billing_address_2'])) esc_attr_e($_POST['billing_address_2']); ?>" placeholder="Apartment,suite,unit etc. (optional)"/>
</p>
<div class="clearfix"></div>
<p class="woocommerce-FormRow woocommerce-FormRow--wide form-row form-row-wide">
<label for="reg_billing_phone"><?php _e('Phone','woocommerce'); ?><span class="required">*</span></label>
<input type="text" class="input-text" name="billing_phone" id="reg_billing_phone" value="<?php if(! empty($_POST['billing_phone'])) esc_attr_e($_POST['billing_phone']); ?>"/>
</p>
<div class="clearfix"></div>
<?php
}
//Registration form fields Validation
add_action('woocommerce_register_post','my_validate_extra_register_fields',10,3);
function my_validate_extra_register_fields($username,$email,$validation_errors){
if(isset($_POST['billing_first_name']) && empty($_POST['billing_first_name'])){$validation_errors->add('billing_first_name_error',__('A first name is required!','woocommerce'));}
if(isset($_POST['billing_last_name']) && empty($_POST['billing_last_name'])){$validation_errors->add('billing_last_name_error',__('A last name is required!','woocommerce'));}
if(isset($_POST['billing_company']) && empty($_POST['billing_company'])){$validation_errors->add('billing_company_error',__('A Company name is required!','woocommerce'));}
if(isset($_POST['billing_vat']) && empty($_POST['billing_vat'])){$validation_errors->add('billing_vat_error',__('VAT number is required!','woocommerce'));}
if(isset($_POST['billing_country']) && empty($_POST['billing_country'])){$validation_errors->add('billing_country_error',__('A country is required!','woocommerce'));}
if(isset($_POST['billing_city']) && empty($_POST['billing_city'])){$validation_errors->add('billing_city_error',__('A city is required!','woocommerce'));}
if(isset($_POST['billing_postcode']) && empty($_POST['billing_postcode'])){$validation_errors->add('billing_postcode_error',__('A postcode is required!','woocommerce'));}
if(isset($_POST['billing_state']) && empty($_POST['billing_state'])){$validation_errors->add('billing_state_error',__('A state is required!','woocommerce'));}
if(isset($_POST['billing_address_1']) && empty($_POST['billing_address_1'])){$validation_errors->add('billing_address_1_error',__('An address is required!','woocommerce'));}
if(isset($_POST['billing_phone']) && empty($_POST['billing_phone'])){$validation_errors->add('billing_phone_error',__('A phone number is required!','woocommerce'));}
return $validation_errors;
}
//Below code save extra fields when new user register
add_action('woocommerce_created_customer','my_save_extra_register_fields');
function my_save_extra_register_fields($customer_id){
if(isset($_POST['billing_first_name'])){
update_user_meta($customer_id,'first_name',sanitize_text_field($_POST['billing_first_name']));
update_user_meta($customer_id,'billing_first_name',sanitize_text_field($_POST['billing_first_name']));
}
if(isset($_POST['billing_last_name'])){
update_user_meta($customer_id,'last_name',sanitize_text_field($_POST['billing_last_name']));
update_user_meta($customer_id,'billing_last_name',sanitize_text_field($_POST['billing_last_name']));
}
if(isset($_POST['billing_company'])){
update_user_meta($customer_id,'billing_company',sanitize_text_field($_POST['billing_company']));
}
if(isset($_POST['billing_vat'])){
update_user_meta($customer_id,'billing_vat',sanitize_text_field($_POST['billing_vat']));
}
if(isset($_POST['billing_country'])){
update_user_meta($customer_id,'billing_country',sanitize_text_field($_POST['billing_country']));
}
if(isset($_POST['billing_city'])){
update_user_meta($customer_id,'billing_city',sanitize_text_field($_POST['billing_city']));
}
if(isset($_POST['billing_postcode'])){
update_user_meta($customer_id,'billing_postcode',sanitize_text_field($_POST['billing_postcode']));
}
if(isset($_POST['billing_state'])){
update_user_meta($customer_id,'billing_state',sanitize_text_field($_POST['billing_state']));
}
if(isset($_POST['billing_address_1'])){
update_user_meta($customer_id,'billing_address_1',sanitize_text_field($_POST['billing_address_1']));
}
if(isset($_POST['billing_phone'])){
update_user_meta($customer_id,'billing_phone',sanitize_text_field($_POST['billing_phone']));
}
if(isset($_POST['email'])){
update_user_meta($customer_id,'billing_email',sanitize_text_field($_POST['email']));
}
}
Run Code Online (Sandbox Code Playgroud)
感谢所有在这个过程中帮助过我的人,以及我之前的问题,我的整个项目即将结束,所以我真的要感谢 Stackoverflow 社区的大力支持!
该woocommerce_form_field()
函数支持一种country
类型,所以我认为这可以工作:
/**
* Add new register fields for WooCommerce registration.
*/
function wooc_extra_register_fields() {
wp_enqueue_script( 'wc-country-select' );
woocommerce_form_field( 'billing_country', array(
'type' => 'country',
'class' => array('chzn-drop'),
'label' => __('Country'),
'placeholder' => __('Choose your country.'),
'required' => true,
'clear' => true
));
}
add_action( 'woocommerce_register_form_start', 'wooc_extra_register_fields' );
Run Code Online (Sandbox Code Playgroud)
编辑您需要将国家选择脚本入队以获得 JS 辅助下拉列表。
如果您看到 WooCommerce Checkout 页面的源 HTML,那么您将看到它使用了
select2
JS 插件。因此,您需要woocommerce_form_field()
在页脚中然后调用 select2 JS 函数中传递一个额外的 ID/类。
所以你的完整代码是
//to add billing_country
function wh_extra_register_fields()
{
$countries_obj = new WC_Countries();
$countries = $countries_obj->get_allowed_countries();
woocommerce_form_field('billing_country', array(
'type' => 'select',
'input_class' => array('myClass'), //<--check this line
'label' => __('Country'),
'placeholder' => __('Choose your country.'),
'options' => $countries,
'required' => true,
'clear' => true,
'default' => 'BE' //<--check this line
));
}
add_action('woocommerce_register_form_start', 'wh_extra_register_fields');
//to add js code in My Account page footer
function wh_AccountPageJS()
{
if (is_account_page())
{
echo '<script>jQuery(".myClass").select2();</script>';
}
}
add_action('wp_footer', 'wh_AccountPageJS', 100);
Run Code Online (Sandbox Code Playgroud)
代码位于functions.php
活动子主题(或主题)的文件中。或者也可以在任何插件 php 文件中。
代码经过测试并有效。 版本 3.0。
希望这可以帮助!
归档时间: |
|
查看次数: |
8199 次 |
最近记录: |