Вопрос или проблема
Я хочу добавить изображение автора для каждого миниатюры на главной странице.
Я пробовал <?php echo get_avatar( get_the_author_meta( 'ID' ), 32 ); ?>
, но он выдает одно и то же изображение на каждой миниатюре.
Вот полный код для миниатюр:
<?php
$recentp_args = array( 'numberposts' => '4' );
$recent_posts = wp_get_recent_posts($recentp_args);
foreach( $recent_posts as $recent ){ ?>
<article>
<a href="https://wordpress.stackexchange.com/questions/325260/<?php echo get_permalink($recent["ID"]); ?>">
<?php
$thumb = get_the_post_thumbnail( $recent["ID"], 'featuredmedium', array( 'class' => 'lazyload' ) );
if ( !empty($thumb) ) { // проверяем, есть ли у поста миниатюра.
echo $thumb;
} else {
echo '<img src="'.get_bloginfo('template_url').'/images/photo_default.png" width="320" height="167" alt="" />';
}
?>
<h2 class="title"><?php echo $recent["post_title"]; ?></h2>
<?php echo apply_filters( 'the_content', limit_words(strip_tags($recent["post_content"]),38) ); ?>
<?php echo get_avatar( get_the_author_meta( 'ID' ), 32 ); ?>
</a>
</article>
<?php } ?>
<?php echo get_avatar( get_the_author_meta( 'ID') , 150); ?>
Это именно то, что я использую.
Я думаю, что проблема в “foreach( $recent_posts as $recent )”, я рекомендую использовать
if ( $wp_query->have_posts() ) :
Я рекомендую ознакомиться с https://developer.wordpress.org/reference/classes/wp_query/ и не забывать сбрасывать цикл после завершения
wp_reset_postdata();
Здесь есть несколько ошибок <?php echo get_avatar( get_the_author_meta( 'ID' ), 32 ); ?>
не сработает, потому что вы не находитесь в Цикле. Если вы хотите использовать функции, которые не принимают конкретный ID поста, но используют глобальный пост, вы должны быть в цикле. Вместо использования foreach вам нужно использовать стандартный цикл постов WordPress, что также означает, что вам нужно получить посты как объект запроса вместо массива. Измените вашу строку недавних постов на $recent_posts = new WP_Query($recentp_args);
и замените ваш цикл foreach на следующий
if ($recent_posts->have_posts()) :
while $recent_posts->have_posts():
$recent_posts->the_post;
Тогда get_the_author_meta()
должен работать.
Ответ или решение
Для добавления изображения автора к каждому миниатюрному превью на вашей главной странице в WordPress, требуется некоторое внимание к тому, как происходит цикличный обход постов. В вашем коде используется массив постов, но это приводит к проблеме, когда функция get_the_author_meta()
возвращает одно и то же изображение для всех постов.
Решение проблемы
Чтобы исправить ситуацию, вам нужно использовать стандартный цикл WordPress, который позволяет использовать функции внутри цикла, такие как get_the_author_meta()
. Давайте разберем ваш код и внесем необходимые изменения.
Измененный код
<?php
// Запрашиваем последние 4 поста
$recentp_args = array( 'posts_per_page' => 4 );
$recent_posts = new WP_Query($recentp_args); // Используем WP_Query
if ($recent_posts->have_posts() ) :
while ($recent_posts->have_posts() ) : $recent_posts->the_post(); // Стандартный цикл WordPress
?>
<article>
<a href="<?php the_permalink(); ?>"> <!-- Используем the_permalink() для получения ссылки на пост -->
<?php
// Получаем миниатюру поста
$thumb = get_the_post_thumbnail( get_the_ID(), 'featuredmedium', array( 'class' => 'lazyload' ) );
if ( !empty($thumb) ) {
echo $thumb;
} else {
echo '<img src="'.get_bloginfo('template_url').'/images/photo_default.png" width="320" height="167" alt="" />';
}
?>
<h2 class="title"><?php the_title(); ?></h2> <!-- Используем the_title() -->
<?php echo apply_filters('the_content', wp_trim_words(get_the_content(), 38)); // Ограничиваем количество слов ?>
<?php echo get_avatar( get_the_author_meta('ID'), 32 ); // Получаем изображение автора ?>
</a>
</article>
<?php
endwhile;
wp_reset_postdata(); // Сбрасываем данные поста
endif;
?>
Объяснение изменений
-
Использование
WP_Query
: Мы заменили массивwp_get_recent_posts()
на объектWP_Query
. Это позволяет использовать стандартный цикл WordPress, что необходимо для корректной работы функций, связанных с постами. -
Цикл
while
: Мы заменили конструкциюforeach
на стандартный циклwhile
. Это дает возможность WordPress правильно обрабатывать данные текущего поста и использовать функции, такие какget_the_author_meta()
. -
Функции вывода: В код добавлены функции
the_permalink()
иthe_title()
, что делает код более читаемым и упрощает восстановление ссылок и заголовков постов. -
Сброс постов: Использование
wp_reset_postdata()
освобождает память и гарантирует, что данные поста вернутся к предыдущему состоянию после окончания цикла.
Заключение
Эти изменения обеспечат динамическое получение изображения автора для каждого поста, что сделает ваш сайт более профессиональным и иммерсивным для пользователей. Внедрив этот код, вы повысите качество своего контента, что может положительно сказаться на SEO и взаимодействии пользователей с вашим сайтом.