Если нет миниатюры записи, показать содержимое поста
Перед тем как задать этот вопрос, я поискал в Google и на этом форуме, но не нашел ответа на свой вопрос, хотя он может показаться повторяющимся.
В общем, я создал пользовательский тип записи, который использует миниатюру. Теперь я хочу настроить, чтобы если миниатюра не существует, показывалось содержимое поста (в моем случае это встроенное видео YouTube).
Пока что я добавил в functions.php следующее:
function zm_get_backend_preview_thumb($post_ID) {
$post_thumbnail_id = get_post_thumbnail_id($post_ID);
if ($post_thumbnail_id) {
$post_thumbnail_img = wp_get_attachment_image_src($post_thumbnail_id, 'thumbnail');
return $post_thumbnail_img[0];
}
}
function zm_preview_thumb_column_head($defaults) {
$defaults['featured_image'] = 'Изображение';
return $defaults;
}
add_filter('manage_posts_columns', 'zm_preview_thumb_column_head');
function zm_preview_thumb_column($column_name, $post_ID) {
if ($column_name == 'featured_image') {
$post_featured_image = zm_get_backend_preview_thumb($post_ID);
if ($post_featured_image) {
echo '<img src="' . $post_featured_image . '" />';
}
}
}
add_action('manage_posts_custom_column', 'zm_preview_thumb_column', 10, 2);
}
А на странице, где я хочу показать видео вместо миниатюры, у меня следующий код:
<?php
// Аргументы WP_Query
$args = array (
'post_type' => array( 'zm_gallery' ),
);
// Запрос
$query_gallery = new WP_Query( $args );
// Цикл
if ( $query_gallery->have_posts() ) {
while ( $query_gallery->have_posts() ) {
$query_gallery->the_post();
echo '<ul>';
echo '<li>';
$name = get_post_meta($post->ID, 'ExternalUrl', true);
if( $name ) { ?>
<a href="<?php echo $name; ?>"target="_blank"><?php the_post_thumbnail(); ?></a>
<?php
} else {
the_post_thumbnail();
}
echo '</li>';
echo '</ul>';
}
} else {
if ( "" === $post->post_content ) {
the_post_thumbnail();
} else {
the_content();
}
}
// Восстановление оригинальных данных поста
wp_reset_postdata();
?>
Буду очень благодарен за помощь. Заранее спасибо всем.
Я понял, что у меня было две проблемы с кодом на странице, где нужно было отображать содержимое записи:
Я разместил следующий код:
if ( "" === $post->post_content ) { the_post_thumbnail(); } else { the_content(); }
в неправильном месте.
Мне следовало разместить этот код после строки:
if( $name ) { ?> <a href="<?php echo $name; ?>"target="_blank"><?php the_post_thumbnail(); ?></a> <?php } else { //ЗДЕСЬ ДОЛЖЕН БЫТЬ МОЙ КОД }
Вместо кода из пункта 1 мне следовало использовать только:
the_content();
Это дало мне нужный результат. Проблема решена. Надеюсь, это кому-то поможет в будущем. P.S. Я пытался правильно отформатировать ответ, но что-то пошло не так. Буду рад, если кто-то поправит форматирование.
