Wordpress - 更改function.php

时间:2016-10-17 00:59:46

标签: php wordpress user-roles custom-wordpress-pages

对于我的网站,我使用插件 Woocommerce Variations to Table Grid ,但我想仅限于某些角色'管理员'和'批发商'。 (我的网站是批发商和'普通'客户)

无论如何,我想通过检查用户角色来停用插件,所以我尝试了以下解决方案: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'
        );
    }

但是我确实做错了什么,我整天尝试了很多不同的事情,无法弄明白。

任何人都可以提供帮助吗?

干杯

4 个答案:

答案 0 :(得分:0)

deactivate_plugins是必要的。基本插件名称。但是你传递变量。

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

答案 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' (禁用)..但问题是,它并不重要,因为它总是只用于第一行..

我有点迷失,我不明白为什么它以某种方式起作用而不是另一种方式。

我的插件功能是:

   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;
}

答案 2 :(得分:0)

我认为对某一点有一点误解。不能为用户激活插件,而为另一个插件停用插件(在插件激活/取消激活的纯概念中)。它是全局已激活或全局已停用

这样说,根据插件的编程方式,可以禁用某些用户或组的功能。例如,您可以继续尝试停用方法,找到插件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(复选框,菜单元素等)。

答案 3 :(得分:0)

它最终没有按预期工作,因为要更改一个选项,你需要一种"管理员"权利,所以对于其他角色,如"客户"它并没有像预期的那样改变选项。

无论如何,我使用插件开发人员(感谢Spyros)并且解决方案是直接挂钩插件(现在添加到新插件版本的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;
}

感谢大家的时间/帮助。