0

我将小部件类别放在仪表板的主侧边栏上。比,在代码上,我使用:

<?php get_sidebar('left'); ?>

并为类别创建代码。现在,我想隐藏 tag_ID=6 的类别及其所有子类别。

我该怎么做?

试过这个教程,但似乎我没有这$cat_args = "orderby=name&show_count={$c}&hierarchical={$h}";条线?我使用的是 WordPress 的最新版本,3.4.2

4

1 回答 1

1

该教程似乎过时了,所以我不会依赖它。没有必要在 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 列表(与孩子)替换函数调用以获得更好的性能。

于 2012-10-16T08:40:48.397 回答