#php #css #shortcode #genesis
#php #css #шорткод #genesis
Вопрос:
Я отчаянно пытаюсь найти решение для добавления условного класса div к отдельным категориям при использовании шорткода Genesis [post_categories] в заголовке записи.
Я хочу применить уникальные цвета к названиям категорий в заголовке записи для статей на домашней странице и для отдельных сообщений. www.mic.com влияет ли это. Вы заметите, что статьи в категории «Мир» имеют текст категории одного цвета, в то время как статьи в категории «Новости» имеют текст категории, отображаемый другим цветом.
Например, если категория «Инфраструктура», я бы хотел, чтобы был класс, который обтекает существующий класс entry-categories.
Я хочу, чтобы это выглядело так:
<div class="infrastructure section"><span class="entry-categories"></span></div>
Если категория «Выборы», я бы хотел, чтобы она отображала:
<div class="elections section"><span class="entry-categories"></span></div>
Код, который мне нужно отредактировать, чтобы получить этот эффект, приведен ниже.
add_shortcode( 'post_categories', 'genesis_post_categories_shortcode' );
/**
* Produces the category links list.
*
* Supported shortcode attributes are:
* after (output after link, default is empty string),
* before (output before link, default is 'Tagged With: '),
* sep (separator string between tags, default is ', ').
*
* Output passes through 'genesis_post_categories_shortcode' filter before returning.
*
* @since 1.1.0
*
* @param array|string $atts Shortcode attributes. Empty string if no attributes.
* @return string Shortcode output
*/
function genesis_post_categories_shortcode( $atts ) {
$defaults = array(
'sep' => ', ',
'before' => __( 'Filed Under: ', 'genesis' ),
'after' => '',
);
$atts = shortcode_atts( $defaults, $atts, 'post_categories' );
$cats = get_the_category_list( trim( $atts['sep'] ) . ' ' );
if ( genesis_html5() )
$output = sprintf( '<span %s>', genesis_attr( 'entry-categories' ) ) . $atts['before'] . $cats . $atts['after'] . '</span>';
else
$output = '<span class="categories">' . $atts['before'] . $cats . $atts['after'] . '</span>';
return apply_filters( 'genesis_post_categories_shortcode', $output, $atts );
}
Я пытался использовать функцию get_the_category_list для условного создания имен классов, но команда не завершает действие. При просмотре моего сайта через firebug новый класс отображает команду в виде текста.
$cats = get_the_category_list( trim( $atts['sep'] ) . ' ' );
if ( genesis_html5() )
$output = sprintf( '<div class="<?php echo $cats[0]->cat_name; ?> section"><span %s>', genesis_attr( 'entry-categories' ) ) . $atts['before'] . $cats . $atts['after'] . '</span></div>';
Есть идеи о том, как добиться этого эффекта?
Большое спасибо!
Ответ №1:
Что-то подобное должно работать (но только для html5):
function custom_terms_shortcode( $atts ) {
$defaults = array(
'after' => '',
'before' => __( 'Filed Under: ', 'genesis' ),
'sep' => ', ',
'taxonomy' => 'category',
);
$atts = shortcode_atts( $defaults, $atts, 'custom_terms' );
$terms = get_the_terms( get_the_ID(), $atts['taxonomy'] );
if ( is_wp_error( $terms ) )
return;
if ( empty( $terms ) )
return;
if ( genesis_html5() ){
$output .= '<span class="entry-terms">';
$output .= $atts['before'];
foreach ($terms as $term) {
$output = '<div class="'. $term->name .'">';
$output .= '<a href="'.esc_attr(add_query_arg( $atts['taxonomy'], $term->slug ),'').'">'.$term->name.'</a>'.$atts['sep'];
$output .= '</div>';
}
$output = substr($output, 0, -2);
$output .= $atts['after'];
$output .= '</span>';
}
return apply_filters( 'genesis_post_terms_shortcode', $output, $terms, $atts );
}