2016-10-10 8 views
1

Я нашел решение этой проблемы и добавил код здесь: Hide billing address from checkout page but keep the informationДобавить платежный адрес в WooCommerce страницу регистрации

под «2) Добавление полей биллинга в регистрации пользователя Мой аккаунт»

Это успешно добавлен платежный адрес в регистрационную форму. Поля из регистрационной формы отлично подают данные в базу данных Woocommerce.

Это означает, что выпадающее меню «state» не обновляет, когда я меняю раскрывающийся список «Страна». Выпадающее меню состояния делает правильное обновление в зависимости от страны, выбранной на странице проверки, а также под правым адресом в области «Моя учетная запись», но не на новой странице регистрации. Так как на данный момент эта страница регистрации работает только для США.

Любые рекомендации относительно того, как код должен быть изменен, чтобы правильно изменить раскрывающееся окно состояния «State», было бы очень полезно.

Спасибо! Марк

+0

К сожалению, это не ясно. Вам нужен ответ на это или нет? –

+0

Да, любая помощь будет оценена по достоинству. Все еще пытаюсь решить эту проблему. –

+0

Меня тоже интересует ответ на этот вопрос. – JPashs

ответ

1

Для добавления полей биллинга на странице регистрации вы можете использовать этот фрагмент кода:

<?php 

// 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 zk_add_billing_form_to_registration(){ 
    global $woocommerce; 
    $checkout = $woocommerce->checkout(); 
    ?> 
    <?php foreach ($checkout->get_checkout_fields('billing') as $key => $field) : ?> 

     <?php if($key!='billing_email'){ 
      woocommerce_form_field($key, $field, $checkout->get_value($key)); 
     } ?> 

    <?php endforeach; 
} 
add_action('woocommerce_register_form_start','zk_add_billing_form_to_registration'); 

// Custom function to save Usermeta or Billing Address of registered user 
function zk_save_billing_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]); 
     } 
    } 

} 
add_action('woocommerce_created_customer','zk_save_billing_address'); 


// Registration page billing address form Validation 
function zk_validation_billing_address(){ 
    global $woocommerce; 
    $address = $_POST; 
    foreach ($address as $key => $field) : 
     // Validation: Required fields 
     if(startsWith($key,'billing_')){ 
      if($key == 'billing_country' && $field == ''){ 
       $woocommerce->add_error('<strong>' . __('ERROR', 'woocommerce') . '</strong>: ' . __('Please select a country.', 'woocommerce')); 
      } 
      if($key == 'billing_first_name' && $field == ''){ 
       $woocommerce->add_error('<strong>' . __('ERROR', 'woocommerce') . '</strong>: ' . __('Please enter first name.', 'woocommerce')); 
      } 
      if($key == 'billing_last_name' && $field == ''){ 
       $woocommerce->add_error('<strong>' . __('ERROR', 'woocommerce') . '</strong>: ' . __('Please enter last name.', 'woocommerce')); 
      } 
      if($key == 'billing_address_1' && $field == ''){ 
       $woocommerce->add_error('<strong>' . __('ERROR', 'woocommerce') . '</strong>: ' . __('Please enter address.', 'woocommerce')); 
      } 
      if($key == 'billing_city' && $field == ''){ 
       $woocommerce->add_error('<strong>' . __('ERROR', 'woocommerce') . '</strong>: ' . __('Please enter city.', 'woocommerce')); 
      } 
      if($key == 'billing_state' && $field == ''){ 
       $woocommerce->add_error('<strong>' . __('ERROR', 'woocommerce') . '</strong>: ' . __('Please enter state.', 'woocommerce')); 
      } 
      if($key == 'billing_postcode' && $field == ''){ 
       $woocommerce->add_error('<strong>' . __('ERROR', 'woocommerce') . '</strong>: ' . __('Please enter a postcode.', 'woocommerce')); 
      } 
      /* 
      if($key == 'billing_email' && $field == ''){ 
       $woocommerce->add_error('<strong>' . __('ERROR', 'woocommerce') . '</strong>: ' . __('Please enter billing email address.', 'woocommerce')); 
      } 
      */ 
      if($key == 'billing_phone' && $field == ''){ 
       $woocommerce->add_error('<strong>' . __('ERROR', 'woocommerce') . '</strong>: ' . __('Please enter phone number.', 'woocommerce')); 
      } 

     } 
    endforeach; 
} 
add_action('register_post','zk_validation_billing_address'); 
+0

Отличный плагин, но проверка не работает, никаких идей? – Godge

+0

Я думал, что сработал, но, оказывается, нет. Отключение функции сохранения, похоже, делает работу по валидации, но я не могу найти способ заставить их работать вместе :( – Godge

 Смежные вопросы

  • Нет связанных вопросов^_^