在wordpress中过滤类别

时间:2011-08-18 07:40:26

标签: php wordpress filter categories

我想为get_categories函数添加一个过滤器。

我试过了:

function wpr_cat_filter($args) {
  $args['include'] = '37';
  return $args;
} 
add_filter('get_categories','wpr_cat_filter');

但它似乎没有用。什么错误的想法?

1 个答案:

答案 0 :(得分:0)

实际上似乎并未应用过滤器。

如果你检查“get_categories”函数(在wp-includes / category.php中),则没有应用“get_categories”过滤器:

function &get_categories( $args = '' ) {
        $defaults = array( 'taxonomy' => 'category' );
        $args = wp_parse_args( $args, $defaults );

        $taxonomy = apply_filters( 'get_categories_taxonomy', $args['taxonomy'], $args );

        // Back compat
        if ( isset($args['type']) && 'link' == $args['type'] ) {
                _deprecated_argument( __FUNCTION__, '3.0', '' );
                $taxonomy = $args['taxonomy'] = 'link_category';
        }

        $categories = (array) get_terms( $taxonomy, $args );

        foreach ( array_keys( $categories ) as $k )
                _make_cat_compat( $categories[$k] );

        return $categories;
}

另外,如果您检查来源:

wordpress$ grep -Ri "apply_filters" * | grep get_categories
wp-includes/default-widgets.php:            wp_dropdown_categories(apply_filters('widget_categories_dropdown_args', $cat_args));
wp-includes/default-widgets.php:        wp_list_categories(apply_filters('widget_categories_args', $cat_args));
wp-includes/category.php:   $taxonomy = apply_filters( 'get_categories_taxonomy', $args['taxonomy'], $args );

也许它只是一个过滤器的占位符,您可以自己添加或稍后添加。

如果您想要该过滤器,请更改get_category功能:

function &get_categories( $args = '' ) {
        $defaults = array( 'taxonomy' => 'category' );
        $args = wp_parse_args( $args, $defaults );
        $args = apply_filters( 'get_categories', $args );

        $taxonomy = apply_filters( 'get_categories_taxonomy', $args['taxonomy'], $args );

        // Back compat
        if ( isset($args['type']) && 'link' == $args['type'] ) {
                _deprecated_argument( __FUNCTION__, '3.0', '' );
                $taxonomy = $args['taxonomy'] = 'link_category';
        }

        $categories = (array) get_terms( $taxonomy, $args );

        foreach ( array_keys( $categories ) as $k )
                _make_cat_compat( $categories[$k] );

        return $categories;
}

您可能希望使用wordpress提交错误或在邮件列表中询问,以找出未应用此过滤器的原因!