2016-10-17 3 views
3

Для моего сайта я использую плагин Вайоты Woocommerce для таблицы Grid, но я хотел бы ограничить это только для некоторых ролей «Администратор» и «Оптовик». (мой сайт для оптовиков и «нормального» клиента)Wordpress - Изменить параметр плагина в function.php

В любом случае я думал просто отключить плагин, проверив роль пользователя, поэтому я попробовал следующее решение: https://wordpress.stackexchange.com/questions/159085/deactivate-plugin-for-a-specific-user-group Не работает.

У меня есть переменная в моем плагине с именем $ vartable_disabled, которая является логической, которая «отключает глобально» плагин.

Так что я имею в виду сделать что-то в моей functions.php, как:

add_action('admin_init', 'my_option_change_plugins');  
function my_option_change_plugins() 
{ 
    global $current_user; 
    if (!in_array('administrator' || 'wholesaler', $current_user->roles)) { 
     deactivate_plugins(// activate for variation-table 
      $vartable_disabled == 0 
         $vartable_position == 'under' 
     ); 
    } else { // desactivate for those than can't use it 
     activate_plugins(
      $vartable_disabled == 1 
         $vartable_position == 'side' 
     ); 
    } 

Но уверен, что я делаю что-то неправильно, я попробовал много другое дело целый день, невозможно понять его ,

Любой может помочь?

Приветствия

ответ

0

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

Во всяком случае, вместо этого я работал с разработчиком плагина (спасибо Спирос) и решением было подключить непосредственно в плагин (functionnality добавлены в новую версию плагина;))

Следующий код был добавлен :

// if the table is disabled for this product display the default select menus 
$checkcat = array(); 
if (is_array($vartable_categories_exc) && is_array($pcids)) { 
    $checkcat = array_intersect($pcids, $vartable_categories_exc); 
} 

$checkrole = array(); 
if (is_array($vartable_roles_exc) && is_user_logged_in()) { 
    $user_info = get_userdata(get_current_user_id()); 
    $checkrole = array_intersect($user_info->roles, $vartable_roles_exc); 
} 
if (!is_user_logged_in() && is_array($vartable_roles_exc) && in_array('guest', $vartable_roles_exc)) { 
    $checkrole['guest'] = 'guest'; 
} 

if ( 
    ((get_post_meta($product->id, 'disable_variations_table', true) == 1 || !empty($checkcat)) || $vartable_disabled == 1 || !empty($checkrole)) 
    && get_post_meta($product->id, 'disable_variations_table', true) != 2 
    && $vartable_shortcd != 1) { 
    // Enqueue variation scripts 
    wp_enqueue_script('wc-add-to-cart-variation'); 

    // Load the template 
    wc_get_template('single-product/add-to-cart/variable.php', array(
     'available_variations' => $product->get_available_variations(), 
     'attributes'    => $product->get_variation_attributes(), 
     'selected_attributes'  => $product->get_variation_default_attributes() 
    )); 
    return; 
} 

Спасибо всем за ваше время/помощь.

0

deactivate_plugins это необходимо. базовое имя плагина. Но вы передаете переменные.

https://codex.wordpress.org/Function_Reference/deactivate_plugins

+0

Привет Arshid. Фактически я пробовал эту деактивировать в зависимости от роли. Дело в том, что после этого невозможно реактивировать плагин на основе ролей (я думаю, что активация плагина выполняется при запуске). Во всяком случае, я хотел бы отчасти «отключить звук» или приостановить плагин на основе ролей. – bkseen

+0

Я бы хотел отключить плагин для конкретной роли пользователя, если я не могу просто динамически изменять параметр моего другого плагина. – bkseen

+0

Почему вы добавляете два знака равенства '$ vartable_disabled == 1' –

0

Я нашел частичное решение с функцией "update_option()"

add_action('admin_init', 'my_filter_the_plugins'); 
function my_filter_the_plugins() 
{ 
    global $current_user; 
    if (in_array('administrator', $current_user->roles)) { 
     update_option('vartable_disabled', 0); 
    } else { // activate for those than can use it 
     update_option('vartable_disabled', 1); 
    } 
} 

С, что мой плагин вариант переключателя в '1' (отключено) .. но дело в том, это не имеет значения, поскольку он всегда идет только для первой строки.

Я немного потерял, я не понимаю, почему это работает в одном направлении, но не в другом.

Мой плагин fonction является:

if (((get_post_meta($product->id, 'disable_variations_table', true) == 1 || !empty($checkcat)) || $vartable_disabled == 1) && $vartable_shortcd != 1) { 
    // Enqueue variation scripts 
    wp_enqueue_script('wc-add-to-cart-variation'); 

    // Load the template 
    wc_get_template('single-product/add-to-cart/variable.php', array(
     'available_variations' => $product->get_available_variations(), 
     'attributes'    => $product->get_variation_attributes(), 
     'selected_attributes'  => $product->get_variation_default_attributes() 
    )); 
    return; 
} 
0

Я думаю, что это маленькое недоразумение точки. Плагин не может быть активирован для пользователя и деактивирован для другого (в чистой концепции активации/деактивации плагинов). Он глобально активирован или глобально deactivated.

Указано это, в зависимости от того, как запрограммирован ваш плагин, его функции могут быть отключены для определенных пользователей или групп. Вместо того, чтобы пробовать метод дезактивации, вы можете, например, найти части, где находится ваш плагин admits to be filtered, и воспользоваться этим. Если нет фильтров, вы можете попробовать:

$current_user = wp_get_current_user(); 

if (!in_array(array('administrator' , 'wholesaler') , (array) $current_user->roles)) { 
    update_option('vartable_disabled' , 1); // Assuming 'vartable_disabled' parameter really disables the plugin for the current user 
} 

Кроме того, так вы можете скрыть все HTML, связанные с этой опцией (флажки, элементы меню и другие).

+0

Да, это было непонимание с самого начала. – bkseen

+0

Однако я попробовал ваше решение и добавил: else { \t \t update_option ('vartable_disabled', 0); \t} но он имеет такое же поведение .. просто отключив ('1') параметр плагина (vartable_disable), но никогда не включайте его ('0'), когда я переключаюсь между admin/guest – bkseen

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