如何从非管理员用户的类别列表小部件中排除类别
How to exclude a category from the category list widget for non admin users
我试图从 Shop
和 product 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_user
Docs 函数返回的用户对象的 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')
我试图从 Shop
和 product 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_user
Docs 函数返回的用户对象的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')