Перечислите термины таксономии текущих сообщений в виджете в Wordpress


Мне бы очень хотелось знать, существует ли виджет, который позволил бы мне отображать связанные с текущей страницей термины таксономии (предпочтительно иерархически) в виджете.

Например, если в текущем сообщении есть термин таксономии "Том Хэнкс" в таксономии "Актер", в виджете будет указано "Актер", а затем "Том Хэнкс". Несмотря на то, что в таксономии "Актеров" есть много других действующих лиц, перечислены только те, которые находятся на текущей странице.

Author: cmurockstar, 2010-12-15

2 answers

Это простое преобразование плагина списка терминов таксономии в виджет:

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;
}
 3
Author: Jan Fabry, 2010-12-29 11:00:34

Если я не ошибаюсь, вы хотите что-то вроде этого: есть плагин, который отображает пользовательскую таксономию, выбранную для соответствующего сообщения , но она будет отображаться под сообщением, а не в области виджетов

Вы можете взглянуть на него Список терминов таксономии

Здесь будут показаны все термины таксономий, которые вы выбрали

 0
Author: Niraj Chauhan, 2010-12-15 09:40:57