Вывести часть текста поста если нет миниатюры?

Ссылка скопирована
PHP
1 ответ

Добрый день.
Подскажите, как вывести часть текста поста, если нет миниатюры? А если есть миниатюра, текст выводить не надо.

Код

<article <?php post_class( 'preview preview-' . get_post_type() . ' do-spot' ); ?> id="post-<?php the_ID(); ?>">  	<div class="preview-wrapper">  		<?php if ( ( has_post_thumbnail() && ! post_password_required() ) || koji_get_fallback_image_url() ) : ?>  			<a href="<?php the_permalink(); ?>" class="preview-image">  				<?php 				if ( has_post_thumbnail() && ! post_password_required() ) { 					$image_size = koji_get_preview_image_size(); 					the_post_thumbnail( $image_size ); 				} else { 					koji_the_fallback_image(); 				} 				?> 				 			</a>  		<?php endif; ?> 		 		<div class="preview-inner"> 			 			<h2 class="preview-title"><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></h2> 			 			<?php  			// Output the post meta 			koji_the_post_meta( $post->ID, 'preview' ); ?>  		</div><!-- .preview-inner --> 		 	</div><!-- .preview-wrapper -->  </article>

<article <?php post_class( 'preview preview-' . get_post_type() . ' do-spot' ); ?> id="post-<?php the_ID(); ?>"> <div class="preview-wrapper"> <?php if ( ( has_post_thumbnail() && ! post_password_required() ) || koji_get_fallback_image_url() ) : ?> <a href="<?php the_permalink(); ?>" class="preview-image"> <?php if ( has_post_thumbnail() && ! post_password_required() ) { $image_size = koji_get_preview_image_size(); the_post_thumbnail( $image_size ); } else { koji_the_fallback_image(); } ?> </a> <?php endif; ?> <div class="preview-inner"> <h2 class="preview-title"><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></h2> <?php // Output the post meta koji_the_post_meta( $post->ID, 'preview' ); ?> </div><!-- .preview-inner --> </div><!-- .preview-wrapper --> </article>

Дополнительно

Ответы:

Добавил код после !-- .preview-inner --, вроде получилось. Так правильно?

<?php if( !has_post_thumbnail() ): ?>    <a href="<?php the_permalink(); ?>"><?php the_excerpt(); ?></a>      <?php endif; ?>

<?php if( !has_post_thumbnail() ): ?> <a href="<?php the_permalink(); ?>"><?php the_excerpt(); ?></a> <?php endif; ?>

  • да
Нужно решить такую задачу?

Опишите проблему, и специалист поможет с настройкой, исправлением ошибки или доработкой сайта. Подберём понятный план работ без лишней переписки.

Заказать помощь
Лучший ответ
1
Mobile-редакция Ответ

Да, это делается через проверку has_post_thumbnail(), но важно решить, что считать отсутствием картинки. В вашем шаблоне есть не только миниатюра записи, но и fallback-изображение koji_get_fallback_image_url(). Если текст нужен только когда нет именно featured image, проверяйте ! has_post_thumbnail(). Если текст нужен только когда вообще нечего показывать вместо картинки, проверяйте и миниатюру, и fallback.

Для варианта «нет миниатюры — показать excerpt» код лучше поставить внутри карточки, там где выводится содержимое записи:

if (! has_post_thumbnail() && ! post_password_required()) {
    $excerpt = get_the_excerpt();
 
    if ($excerpt === '') {
        $excerpt = wp_strip_all_tags(get_the_content());
    }
 
    echo '<a class="preview-excerpt" href="' . esc_url(get_permalink()) . '">';
    echo esc_html(wp_trim_words($excerpt, 28, '...'));
    echo '</a>';
}

if (! has_post_thumbnail() && ! post_password_required()) { $excerpt = get_the_excerpt(); if ($excerpt === '') { $excerpt = wp_strip_all_tags(get_the_content()); } echo '<a class="preview-excerpt" href="' . esc_url(get_permalink()) . '">'; echo esc_html(wp_trim_words($excerpt, 28, '...')); echo '</a>'; }

Ваш вариант с the_excerpt() внутри ссылки в целом рабочий, если он находится внутри цикла WordPress. Но the_excerpt() сразу печатает HTML, поэтому его сложнее экранировать и контролировать по длине. Для карточек безопаснее брать текст через get_the_excerpt(), обрезать wp_trim_words() и выводить через esc_html(). Если в теме fallback-картинка выводится почти всегда, то условие ! has_post_thumbnail() покажет текст даже рядом с fallback. Если это не нужно, используйте условие ! has_post_thumbnail() && ! koji_get_fallback_image_url(). После правки проверьте карточки с миниатюрой, без миниатюры и с запароленной записью.

Другие ответы (0)

Пока нет других ответов. Будьте первым, кто поможет автору.

Ответить на вопрос

комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Вам также может быть интересно