【问题标题】:Filter categories in wordpress在 wordpress 中过滤类别
【发布时间】:2011-10-29 13:22:43
【问题描述】:

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

我试过了:

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

但它似乎不起作用。有什么问题吗?

【问题讨论】:

  • 您是否在 wp-content/plugins 中安装并在管理面板中激活它?你如何测试这个?
  • 是的,插件在plugins目录下并且被激活。为了测试这一点,我创建了一个页面并回显了 get_categories() 输出。

标签: php wordpress filter categories


【解决方案1】:

过滤器实际上似乎没有应用。

如果您检查“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 提交错误或在他们的邮件列表中询问,以找出未应用此过滤器的原因!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-12-11
    • 2015-02-25
    • 2019-08-11
    • 1970-01-01
    • 2012-06-19
    • 2022-01-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多