Получить последние записи с миниатюрами в WordPress

11 нояб. 2016 г., 01:16:39
Просмотры: 18.3K
Голосов: 4

Я хочу получить несколько последних записей. Для этого я использую wp_get_recent_posts. Но получаю только первую картинку.

<?php $args = array( 'numberposts' => '3' );

$recent_posts = wp_get_recent_posts($args);
foreach( $recent_posts as $recent ){
    echo '<li><a href="' . get_permalink($recent["ID"]) . '">' . $recent["post_title"].'</a> </li> ';
        if ( has_post_thumbnail() ) { 
        the_post_thumbnail('thumbnail');
    }
}
?>
0
Все ответы на вопрос 2
0

На самом деле, условие всегда возвращает false, потому что вы не передаете ID записи в функцию has_post_thumbnail(), и функция всегда получает значение по умолчанию, которое равно null.

has_post_thumbnail( $recent["ID"] ).

То же самое с функцией get_the_post_thumbnail().

get_the_post_thumbnail( $recent["ID"] ).


$args = array( 'numberposts' => '3' );

$recent_posts = wp_get_recent_posts($args);

foreach( $recent_posts as $recent ){
   if ( has_post_thumbnail( $recent["ID"]) ) {
      echo  get_the_post_thumbnail($recent["ID"],'thumbnail');
    }
}

Но если вы используете функции has_post_thumbnail(); и get_the_post_thumbnail() внутри WordPress The_Loop, то вам не нужно передавать ID записи.


$args = array( 'posts_per_page' => '3' );
$recent_posts = new WP_Query($args);
while( $recent_posts->have_posts() ) { 

   $recent_posts->the_post() ; 

   if ( has_post_thumbnail() ) {
      echo  get_the_post_thumbnail();
    }
}

wp_reset_postdata();
11 нояб. 2016 г. 01:47:38
0

Чтобы использовать функцию the_post_thumbnail, необходимо инициализировать цикл. Лучше сделать так:

<?php 
$args = array( 'posts_per_page' => '3' );
$recent_posts = new WP_Query($args);
while( $recent_posts->have_posts() ) :  
    $recent_posts->the_post() ?>
    <li>
        <a href="<?php echo get_permalink() ?>"><?php the_title() ?></a> 
        <?php if ( has_post_thumbnail() ) : ?>
            <?php the_post_thumbnail('thumbnail') ?>
        <?php endif ?>    
    </li>
<?php endwhile; ?>
<?php wp_reset_postdata(); # сбросить данные запроса, чтобы другие запросы/циклы работали корректно ?> 

(Я поместил миниатюру внутри тегов <li>, потому что любой контент кроме <li> внутри <ol> или <ul> является невалидным HTML.)

11 нояб. 2016 г. 01:49:59