在WordPress的小部件中列出当前帖子的分类术语

时间:2010-12-15 作者:cmurockstar

我非常想知道是否存在一个小部件,它可以让我在小部件中显示当前页面的相关分类术语(最好是分层的)。

例如,如果当前帖子在“Actor”的分类中有一个分类术语“tomhanks”,那么小部件将列出“Actor”,然后列出“tomhanks”。尽管在“参与者”的分类中还有许多其他参与者,但只列出了当前页面中的参与者。

2 个回复
最合适的回答,由SO网友:Jan Fabry 整理而成

这是分类术语列表插件到小部件的简单转换:

class WPSE_5394_Widget extends WP_Widget
{
    public function __construct()
    {
        parent::__construct( \'wpse5394_widget\', \'Taxonomy Terms List\' );
    }

    public function widget( $sidebar_args, $widget_options )
    {
        if ( ! is_single() ) {
            // I don\'t think we can display anything sensible on a page with multiple posts
            return;
        }

        $output = $sidebar_args[\'before_widget\'];

        // If we want to use this we should provide a way to set the title
        if ( ! empty( $widget_options[\'title\'] ) ) {
            $output = $sidebar_args[\'before_title\'] . $widget_options[\'title\'] . $sidebar_args[\'after_title\'];
        }

        // This is the meat of the function: get the taxonomies we want to display, and get the terms for each taxonomy
        $taxonomy_names = apply_filters( \'wpse5394_taxonomies\', array_fill_keys( get_taxonomies(), true ) );
        $taxonomy_terms = \'\';

        foreach ( $taxonomy_names as $taxonomy_name => $dummy ) {
            $taxonomy = get_taxonomy( $taxonomy_name );
            $before = apply_filters( \'wpse5394_taxonomy_before\', \'<p>\' . $taxonomy->label . \': \', $taxonomy );
            $sep = apply_filters( \'wpse5394_taxonomy_sep\', \', \' );
            $after = apply_filters( \'wpse5394_taxonomy_after\', \'</p>\' );
            $terms = get_the_term_list( 0, $taxonomy_name, $before, $sep, $after );
            if ( $terms ) {
                $taxonomy_terms .= $terms;
            }
        }

        if ( ! $taxonomy_terms ) {
            // No taxonomy terms will be displayed - don\'t display the widget
            return;
        }
        $output .= $taxonomy_terms;

        $output .= $sidebar_args[\'after_widget\'];

        echo $output;
    }
}

add_action( \'widgets_init\', \'wpse5394_widgets_init\' );
function wpse5394_widgets_init()
{
    register_widget( \'WPSE_5394_Widget\' );
}
大多数选项都可以通过过滤器设置,如要显示的分类:

add_filter( \'wpse5394_taxonomies\', \'wpse5394_taxonomies\' );
function wpse5394_taxonomies( $taxonomies )
{
    unset( $taxonomies[\'category\'] );
    return $taxonomies;
}

SO网友:Niraj Chauhan

如果我没说错的话,你想要这样的东西:有一个插件,它显示为相应帖子选择的自定义分类法,但它将显示在帖子下方,而不是小部件区域

你可以看看Taxonomy terms List

这将显示您选择的所有分类术语

结束

相关推荐

Saving Taxonomy Terms

我有一个有趣的问题,希望有人能尽快回答。我已经创建了自己的metabox,它基于“我的metabox代码”(下面的列表)正确地显示了我创建的“event\\u types”分类中所有术语的下拉列表。我遇到的问题是,当从下拉列表中选择不同的术语并更新帖子时,能够保存/更新与帖子相关的术语。在对各种代码位进行修补之后,我发现通过手动将term\\u ID number[用逗号分隔]输入数组区域,我得到了我想要的结果。例如,如果在保存帖子时,函数将调用此代码wp_set_post_terms( $post_id