Если нет миниатюры записи, показать содержимое поста

7 окт. 2016 г., 13:45:31
Просмотры: 14.1K
Голосов: 3

Перед тем как задать этот вопрос, я поискал в 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();
?>

Буду очень благодарен за помощь. Заранее спасибо всем.

0
Все ответы на вопрос 2
1

Функция the_post_thumbnail выводит миниатюру, поэтому можно попробовать такой вариант:

if ( has_post_thumbnail() ) {
  the_post_thumbnail();
} else {
  the_content();
}

Надеюсь, это поможет

7 окт. 2016 г. 17:07:22
Комментарии

Спасибо за ответ, @David. К счастью, мне удалось решить это самостоятельно. Все равно спасибо, ваш ответ в любом случае правильный. Удачи!

Nancy Nancy
8 окт. 2016 г. 10:09:01
0

Я понял, что у меня было две проблемы с кодом на странице, где нужно было отображать содержимое записи:

  1. Я разместил следующий код:

        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. Вместо кода из пункта 1 мне следовало использовать только:

      the_content();
      

Это дало мне нужный результат. Проблема решена. Надеюсь, это кому-то поможет в будущем. P.S. Я пытался правильно отформатировать ответ, но что-то пошло не так. Буду рад, если кто-то поправит форматирование.

7 окт. 2016 г. 14:34:14