Перечислите термины таксономии текущих сообщений в виджете в Wordpress
Мне бы очень хотелось знать, существует ли виджет, который позволил бы мне отображать связанные с текущей страницей термины таксономии (предпочтительно иерархически) в виджете.
Например, если в текущем сообщении есть термин таксономии "Том Хэнкс" в таксономии "Актер", в виджете будет указано "Актер", а затем "Том Хэнкс". Несмотря на то, что в таксономии "Актеров" есть много других действующих лиц, перечислены только те, которые находятся на текущей странице.
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;
}
Если я не ошибаюсь, вы хотите что-то вроде этого: есть плагин, который отображает пользовательскую таксономию, выбранную для соответствующего сообщения , но она будет отображаться под сообщением, а не в области виджетов
Вы можете взглянуть на него Список терминов таксономии
Здесь будут показаны все термины таксономий, которые вы выбрали