2015-04-02 2 views
0

Я создал Woocommerce с переменными продуктами.Изменение продукта Woocommerce на основе роли пользователя

Эти изделия имеют вариации на атрибут с возможными значениями 1 кг, 2 кг и 5 кг.

Я также создал группу пользователей «Aziende». Я хочу, чтобы некоторые варианты продукта отображались только для клиентов «Aziende». Я не хочу, чтобы эти варианты были видны другим клиентам.

Например: клиенты Aziende видят варианты «1 кг, 2 кг, 5 кг», тогда как другие роли клиентов видят только 1 кг.

Возможно ли это в Woocommerce?

ответ

0

Да. Если вы переопределите файл woocommerce/templates/single-product/add-to-cart/variable.php, вы найдете код для выбора вариантов.

Там вы могли бы сделать что-то вроде:

Прежде всего, я всегда включать этот фрагмент кода при работе с ролями:

function user_has_role($role, $user_id = null) { 

    if (is_numeric($user_id)) 
     $user = get_userdata($user_id); 
    else 
     $user = wp_get_current_user(); 

    if (empty($user)) 
     return false; 

    return in_array($role, (array) $user->roles); 
} 

Так он может быть использован как:

if(user_has_role("Aziende")){ 
    //do stuff 
} 

сейчас имея эту функцию и зная, какой шаблон изменить, вы должны что-то сделать в этом файле. Это может быть по следующим образом:

// Get terms if this is a taxonomy - ordered 
if (taxonomy_exists($name)) { 
    $terms = wc_get_product_terms($post->ID, $name, array('fields' => 'all')); 
    foreach ($terms as $term) { 
     if (! in_array($term->slug, $options)) { 
      continue; 
     } 
     if($name == 'pa_weight' && $term->slug != '1kg') { // or whatever your attribute is called, and whatever the attribute term is called. 
      if(!user_has_role('aziende'){ 
       continue; 
      } 
     } 
     echo '<option value="' . esc_attr($term->slug) . '" ' . selected(sanitize_title($selected_value), sanitize_title($term->slug), false) . '>' . apply_filters('woocommerce_variation_option_name', $term->name) . '</option>'; 
    } 
} else { 
    foreach ($options as $option) { 
     if($name == 'pa_weight' && $option != '1kg') { // or whatever your attribute is called, and whatever the attribute term is called. 
      if(!user_has_role('aziende'){ 
       continue; 
      } 
     } 

     echo '<option value="' . esc_attr(sanitize_title($option)) . '" ' . selected(sanitize_title($selected_value), sanitize_title($option), false) . '>' . esc_html(apply_filters('woocommerce_variation_option_name', $option)) . '</option>'; 
    } 
} 

Этот код не испытано, поэтому я не знаю, если это работает. Но он должен дать вам указатель в правильном направлении.

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