2014-09-22 5 views
1

Я использую плагин (User Profiles Made Easy), который позволяет пользователю выбирать свою собственную роль при регистрации на моем сайте. Он хорошо справляется с этим, но то, что он не делает, это позволить мне условно отображать/скрывать другие поля в зависимости от роли, которую они выбирают.Регистрация Wordpress/WooCommerce

Я думал о Gravity Form и их надстройке регистрации пользователей, но он не позволит пользователю выбирать свою роль при регистрации.

Взаимодействие с WooCommerce заключается в следующем: когда покупатель проверяет, я мог собрать дополнительные данные в это время (а не во время регистрации), но я хотел бы показывать только поля, относящиеся к их выбранной роли. Есть идеи?

+0

Возможно, стоит прочитать следующее: http://docs.woothemes.com/document/tutorial-customising-checkout-fields-using-actions-and-filters/ – danyo

ответ

0

Заимствование из моего учебника по cutomizing WooCommerce checkout Я думаю, что мы можем просто обернуть определенные поля роль/возможность условной логики через current_user_can().

// Add a new checkout field 
function kia_filter_checkout_fields($fields){ 
    if(current_user_can('some_capability')){ 

     $fields['extra_fields'] = array(
       'some_field' => array(
        'type' => 'text', 
        'required'  => true, 
        'label' => __('Some field') 
        ) 
       ); 
    } 

    return $fields; 
} 
add_filter('woocommerce_checkout_fields', 'kia_filter_checkout_fields'); 

// display the extra field on the checkout form 
function kia_extra_checkout_fields(){ 

    if(current_user_can('some_capability')){ 

     $checkout = WC()->checkout(); ?> 

     <div class="extra-fields"> 
     <h3><?php _e('Additional Fields'); ?></h3> 

     <?php foreach ($checkout->checkout_fields['extra_fields'] as $key => $field) : ?> 

       <?php woocommerce_form_field($key, $field, $checkout->get_value($key)); ?> 

      <?php endforeach; ?> 

    <?php } ?> 
    </div> 

<?php } 
add_action('woocommerce_checkout_after_customer_details' ,'kia_extra_checkout_fields'); 

// save the extra field when checkout is processed 
function kia_save_extra_checkout_fields($order_id, $posted){ 
    if(current_user_can('some_capability' && isset($posted['some_field'])) { 
     update_post_meta($order_id, '_some_field', sanitize_text_field($posted['some_field'])); 
    } 
} 
add_action('woocommerce_checkout_update_order_meta', 'kia_save_extra_checkout_fields', 10, 2); 

// display the extra data on order recieved page and my-account order review 
function kia_display_order_data($order_id){ 
    if(current_user_can('some_capability')){ 
?> 
     <h2><?php _e('Additional Info'); ?></h2> 
     <table class="shop_table shop_table_responsive additional_info"> 
      <tbody> 
       <tr> 
        <th><?php _e('Some Field:'); ?></th> 
        <td data-title="Telephone"><?php echo get_post_meta($order_id, '_some_field', true); ?></td> 
       </tr> 
      </tbody> 
     </table> 
<?php } 
} 
add_action('woocommerce_thankyou', 'kia_display_order_data', 20); 
add_action('woocommerce_view_order', 'kia_display_order_data', 20); 


// display the extra data in the order admin panel 
function kia_display_order_data_in_admin($order){ 
    if(current_user_can('some_capability')){ 
?> 
     <div class="order_data_column"> 
      <h4><?php _e('Extra Details', 'woocommerce'); ?></h4> 
      <?php 
       echo '<p><strong>' . __('Some field') . ':</strong>' . get_post_meta($order->id, '_some_field', true) . '</p>'; ?> 
     </div> 
<?php } 
} 
add_action('woocommerce_admin_order_data_after_order_details', 'kia_display_order_data_in_admin'); 
Смежные вопросы