如何从非管理员用户的类别列表小部件中排除类别

How to exclude a category from the category list widget for non admin users

我试图从 Shopproduct archive 页面上的类别列表小部件中排除 one category users other than the administrator。但由于某种原因,它不起作用。

任何帮助,谢谢。

function exclude_category( $terms, $taxonomies, $args ) {
    $new_terms = array();

    /*if ( !is_admin()  && ( is_product() || is_shop() || is_product_category() || is_product_tag() ) ){ */
    if ( !is_admin() || is_product() || is_shop() || is_product_category() || is_product_tag()  ){  
        foreach ( $terms as $key => $term ) {
            if( is_object ( $term ) ) {
                if ( 'some-category' == $term->slug && $term->taxonomy = 'product_cat' ) {
                    unset($terms[$key]);
                }
            }
        }
    }
    return $terms;
}
add_filter( 'get_terms', 'exclude_category', 10, 3 );

我受到了启发:

排除 WooCommerce 上的产品类别

改为使用以下条件检查:

  • 要检查用户是否为管理员,您可以使用从 wp_get_current_userDocs 函数返回的用户对象的 roles 属性。
  • 要检查您是否在 woocommerce 页面上(即 is_product() || is_shop() || is_product_category() || is_product_tag()),您可以简单地使用这个 is_woocommerce() 函数。

所以整个代码将是:

add_filter('get_terms', 'exclude_category', 10, 3);

function exclude_category($terms, $taxonomies, $args)
{
    $roles = wp_get_current_user()->roles;

    if 
      (
        !in_array('administrator', $roles)
        &&
        is_woocommerce() 
      ) 
    {
        foreach ($terms as $key => $term) 
        {
            if (is_object($term)) 
            {
                if ('decor' == $term->slug && $term->taxonomy == 'product_cat') 
                {
                    unset($terms[$key]);
                }
            }
        }
    }
    return $terms;
}

注:

  • 我使用 'decor' 作为类别 slug 在我的网站上测试这个片段,所以不要忘记用你自己的类别 slug 替换它。

结果如下:


排除 Wordpress 上的类别

add_filter('get_terms', 'exclude_category', 10, 3);

function exclude_category($terms, $taxonomies, $args)
{
    $roles = wp_get_current_user()->roles;

    if (
        !in_array('administrator', $roles)
       ) 
    {
        foreach ($terms as $key => $term) 
        {
            if (is_object($term)) 
            {
                if ('uncategorized' == $term->slug && $term->taxonomy == 'category') 
                {
                    unset($terms[$key]);
                }
            }
        }
    }
    return $terms;
}

注:

  • 我使用 'uncategorized' 作为类别 slug 在我的网站上测试这个片段,所以不要忘记用你自己的类别 slug 替换它。

排除 WooCommerce 中的多个类别

您可以设置一个数组并使用in_array 函数进行条件检查。像这样:

$excluded_cat_slugs = array ('hoodies', 'decor');  

if(in_array($term->slug, $excluded_cat_slugs) && $term->taxonomy == 'product_cat')

排除 Wordpress 中的多个类别

$excluded_cat_slugs = array ('uncategorized', 'test-category');  

if(in_array($term->slug, $excluded_cat_slugs) && $term->taxonomy == 'category')