Фильтр категорий в WordPress - PullRequest
1 голос
/ 18 августа 2011

Я хочу добавить фильтр в функцию get_categories.

Я пробовал это:

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

, но, похоже, он не работаетЛюбые иды, что не так?

1 Ответ

0 голосов
/ 19 августа 2011

Фильтр фактически не применяется.

Если вы проверите функцию "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 или спросить в их списке рассылки, чтобы узнать, почему этот фильтр не применяется!

...