我将小部件类别放在仪表板的主侧边栏上。比,在代码上,我使用:
<?php get_sidebar('left'); ?>
并为类别创建代码。现在,我想隐藏 tag_ID=6 的类别及其所有子类别。
我该怎么做?
试过这个教程,但似乎我没有这$cat_args = "orderby=name&show_count={$c}&hierarchical={$h}";
条线?我使用的是 WordPress 的最新版本,3.4.2
该教程似乎过时了,所以我不会依赖它。没有必要在 WordPress 源代码中进行修改 - 创建一个简单的插件,它可以连接到正确的过滤器。
在您的情况下,这些过滤器是widget_categories_dropdown_args
(当您在小部件选项中选择“显示为下拉菜单”时)和widget_categories_args
(如果小部件将列表显示为带有链接的普通文本)。
有了这些知识,您现在可以编写实际的插件(我称它为 Myplugin,我认为您应该重命名它) - 只需将该 PHP 代码放入文件中wp-content/plugins/myplugin.php
:
<?php
/**
* @package Myplugin
* @version 1.0
*/
/*
Plugin Name: Myplugin
Plugin URI: http://example.com
Description:
Author: You
Version: 1.0
Author URI: http://example.com
*/
// Create a list with the ID's of all children for
// the given category-id
function myplugin_recursive_filter($catid) {
$result = array($catid);
$cats = get_categories(array(
'child_of' => $catid,
));
foreach($cats as $category) {
$result[] = $category->cat_ID;
}
return implode(",", $result);
}
// Actual filter function. Just set the "exclude"
// entry to a comma separated list of category ID's
// to hide.
function myplugin_filter_categories_args($args) {
// 6 is the "tag_ID"
$args['exclude'] = myplugin_recursive_filter(6);
// or hard code the list like that:
//$args['exclude'] = '6,10,11,12';
// but you'd have to include the ID's of the
// children, because "eclude" is not recursive.
return $args;
}
// Register the filter to the relevant tags
add_filter('widget_categories_dropdown_args',
'myplugin_filter_categories_args', 10, 1);
add_filter('widget_categories_args',
'myplugin_filter_categories_args', 10, 1);
该函数myplugin_recursive_filter
是必需的,因为exclude
-entry 不是递归的(除非您在小部件选项中选中“显示层次结构”)。如果您的类别没有太大变化,您可以用硬编码的 ID 列表(与孩子)替换函数调用以获得更好的性能。