WordPress类别小工具仅显示带有子项的类别

时间:2019-11-06 作者:fionchadd

我试图修改内置的WordPress类别小部件,使其仅在有子对象时显示类别。

我使用的代码是:

function exclude_widget_subcategories($args){
  $all_categories = get_all_category_ids();

  $exclude_categories = array();

  foreach($all_categories as $category_id){
    $category = get_category($category_id);

if($category->parent!=0){
        $exclude_categories[] = $category_id;
    }
  }
  $exclude = implode(",",$exclude_categories); // The IDs of the excluding categories
  $args["exclude"] = $exclude;
  return $args;
}
add_filter("widget_categories_args","exclude_widget_subcategories");
它只显示顶级类别,但是我的客户有各种子类别,这些子类别本身也有子类别,她希望这些子类别显示在类别小部件中。

有没有一种方法可以修改这段代码,以便不排除非父类别的类别,而是排除没有子类别的类别?

2 个回复
SO网友:Gaffen

我建议如下:

function exclude_widget_subcategories($args){
  $all_categories = get_terms(\'category\', array(\'parent\' => 0, \'fields\' => \'ids\'));

  $exclude_categories = array();

  foreach($all_categories as $category_id){
    $children = get_term_children($category_id, \'category\');

    if(count($children)!=0){
        $exclude_categories[] = $category_id;
    }
  }
  $exclude = implode(",",$exclude_categories); // The IDs of the excluding categories
  $args["exclude"] = $exclude;
  return $args;
}
add_filter("widget_categories_args","exclude_widget_subcategories");
get_terms(\'category\', array(\'parent\' => 0, \'fields\' => \'ids\')); 获取属于“0”子级的所有类别wordpress术语,即它们是顶级项。它还指定只返回id,而不是term对象。更多文档here

get_term_children 虽然需要注意的是,您需要将分类法的名称传递给函数调用,但这应该是不言自明的。更多文档here

请注意,我尚未对此进行测试,因此可能存在语法错误-如果有,请告诉我,我可以进一步提供帮助:)

SO网友:fionchadd

我的客户澄清了他们的问题,结果表明他们只想在类别小部件中显示一个特定的子类别,而不是任何有自己孩子的子类别。

我将我使用的代码修改为以下代码(其中1373是特定子类别的ID),实现了这一效果:

function exclude_widget_subcategories($args){
  $all_categories = get_all_category_ids();

  $exclude_categories = array();

  foreach($all_categories as $category_id){
    $category = get_category($category_id);

if($category_id!=1373) {
    if($category->parent!=0){
        $exclude_categories[] = $category_id;
    }
  }
  }
  $exclude = implode(",",$exclude_categories); // The IDs of the excluding categories
  $args["exclude"] = $exclude;
  return $args;
}
add_filter("widget_categories_args","exclude_widget_subcategories");
我不确定这是否是正确的答案,因为它没有回答我最初提出的问题,但它确实解决了我在这种情况下的问题!

相关推荐

Categories manage

我正在尝试向CPT中添加特定类别,只有在添加新帖子时,您才能看到与这些帖子类型相关的类别。此外,我希望能够从后端添加类别,而不是从代码添加类别,因为我有很多类别将要更改。如果有一个插件可以做到这一点,那很好,但我也希望了解它是如何做到的。非常感谢