Вопрос или проблема
Я хотел бы показать в пользовательском списке таксономий значки вместо имени таксономии, но только для тех, у кого есть связанные изображения, где изображения нет, пусть показывается имя таксономии.
Я также установил плагин taxonomy-images, но он только добавляет изображения, не заменяет имя таксономии. Спасибо.
Вот код, который у меня есть в файле archive{custom type}.php
<?php query_posts( array( 'post_type' => 'custom_type','posts_per_page' => 20 ) ); ?>
<?php if (have_posts()) : while (have_posts()) : the_post(); ?>
<div class="col-md-3 clearfix"><div class="row"><article id="post-<?php the_ID(); ?>" <?php post_class( 'clearfix' ); ?> role="article">
<?php // конец заголовка статьи ?>
<a href="https://wordpress.stackexchange.com/questions/151402/<?php the_permalink() ?>" rel="bookmark" title="<?php the_title_attribute(); ?>">
<section class="entry-content" style="text-align:center;padding:20px;">
<div class="thumcap2"><?php if ( has_post_thumbnail() ) { // проверяем, есть ли у поста назначенный миниатюрный рисунок.
the_post_thumbnail(thumbnail);
}
?></a><a href="https://wordpress.stackexchange.com/questions/151402/<?php the_permalink() ?>" class="title2" rel="bookmark" title="<?php the_title_attribute(); ?>"><?php the_title(); ?></a></div>
</section> <?php // конец раздела статьи ?>
<footer class="article-footer" style="text-align:center;">
<?php
printf( __( ' %4$s', 'bonestheme' ), get_the_time( 'Y-m-j' ), get_the_time( __( 'F jS, Y', 'bonestheme' )), bones_get_the_author_posts_link(), get_the_term_list( get_the_ID(), 'custom_cat', ' ', ' | ', '' ) );
?>
</footer> <?php // конец нижнего колонтитула статьи ?>
</article></div></div> <?php // конец статьи ?>
<?php endwhile; ?><div class="clearfix"></div>
Мне удалось это исправить
без плагина, просто сохранив в темах изображение с именем слага таксономии в формате .png и с этой модификацией кода
<footer class="article-footer" style="text-align:center;">
<?php //$terms= apply_filters( 'taxonomy-images-list-the-terms', '', array('taxonomy' => 'custom_cat',)); ?>
<?php //print_r( $terms); ?>
<?php $terms = get_the_terms( $post->ID, 'custom_cat' );
$numcat=sizeof($terms);
foreach ( $terms as $term ) {
$term_link = get_term_link( $term, 'custom_cat' );
if( file_exists( TEMPLATEPATH .'/images/'. $term->slug .'.png') ){
?>
<a rel="tag" href="https://wordpress.stackexchange.com/questions/151402/<?php echo $term_link; ?>"><img title="<?php echo $term->name; ?>" style="height: 21px; width: 21px;" src="<?php echo get_template_directory_uri() . '/images/' . $term->slug . '.png' ?>" alt="<?php echo $term->name; ?>"></a>|
<?php }else{ ?>
<a rel="tag" href="https://wordpress.stackexchange.com/questions/151402/<?php echo $term_link; ?>"><?php echo $term->name; ?></a>|
<?php } }
//printf( __( ' %4$s', 'bonestheme' ), get_the_time( 'Y-m-j' ), get_the_time( __( 'F jS, Y', 'bonestheme' )), bones_get_the_author_posts_link(), get_the_term_list( get_the_ID(), 'custom_cat', ' ', ' | ', '' ) );
?>
</footer> <?php // конец нижнего колонтитула статьи ?>
Ответ или решение
Чтобы отобразить изображения таксономии вместо их названий в кастомном списке таксономий в WordPress, вы можете следовать следующему пошаговому руководству. Этот подход будет использовать плагин Taxonomy Images и собственные изображения (которые вы предварительно должны добавить в папку вашей темы).
Шаг 1: Подготовьте изображения
Во-первых, убедитесь, что у вас есть изображения для всех таксономий, для которых вы хотите отобразить изображения вместо названий. Сохраните изображения в формате .png
с именами, соответствующими слагам ваших таксономий, в папке images
вашей темы.
Шаг 2: Модификация archive{custom_type}.php
После подготовки изображений следующим шагом будет редактирование вашего файла archive{custom_type}.php
, чтобы использовать эти изображения. На основе кода, который вы привели, изменить его можно так:
<footer class="article-footer" style="text-align:center;">
<?php
$terms = get_the_terms($post->ID, 'custom_cat');
if ($terms && !is_wp_error($terms)) {
foreach ($terms as $term) {
$term_link = get_term_link($term, 'custom_cat');
$image_path = TEMPLATEPATH . '/images/' . $term->slug . '.png';
if (file_exists($image_path)) {
?>
<a rel="tag" href="<?php echo esc_url($term_link); ?>">
<img src="<?php echo esc_url(get_template_directory_uri() . '/images/' . $term->slug . '.png'); ?>"
alt="<?php echo esc_attr($term->name); ?>"
title="<?php echo esc_attr($term->name); ?>"
style="height: 21px; width: 21px;">
</a> |
<?php
} else {
?>
<a rel="tag" href="<?php echo esc_url($term_link); ?>">
<?php echo esc_html($term->name); ?>
</a> |
<?php
}
}
}
?>
</footer>
Пояснение к коду
-
Получение терминов таксономии: Мы используем функцию
get_the_terms
, чтобы получить термины, связанные с постом. Здесь мы проверяем, есть ли термины и не возникла ли ошибка. -
Проверка наличия изображения: Используется конструкция
file_exists
, чтобы определить, существует ли файл изображения для данного слага таксономии. -
Отображение изображения или имени: Если изображение для термина найдено, оно будет отображаться в виде тега
<img>
. Если изображения нет, будет показано имя термина.
Шаг 3: Оптимизация и тестирование
После выполнения этих шагов протестируйте свою страницу, чтобы убедиться, что изображения отображаются корректно. Убедитесь, что стили изображений соответствуют вашему дизайну. Вы можете добавить CSS-стили для улучшения их отображения.
Заключение
Следуя описанным выше шагам, вы сможете эффективно заменить названия таксономий на их иконки в вашем кастомном типе записи. Это не только улучшит визуальную составляющую вашего сайта, но и сделает интерфейс более интуитивно понятным для пользователей. Если вы столкнетесь с дополнительными трудностями, возможно, нужно будет рассмотреть изменения в плагине Taxonomy Images или другие кастомные решения.