@Emmet1

Как в вордпресс получить даты публикаций постов по годам?

Есть допустим обычные посты.
На странице вывода постов нужно получить все даты по годам, когда публиковались посты в виде списка и ссылки.
То есть чтобы , чтобы был список
<ul>
<li><a href="test.ru/2022/">2022</a></li>//вывод всех постов за 2022
<li><a href="test.ru/2021/">2021</a></li>//вывод всех постов за 2021
</ul>


Как это можно реализовать?
  • Вопрос задан
  • 110 просмотров
Пригласить эксперта
Ответы на вопрос 1
artzolin
@artzolin Куратор тега WordPress
php, WordPress разработка сайтов artzolin.ru
Перед выводом ссылки вы можете проверять существуют ли посты, относящиеся к текущему году, но это породит много довольно лишних запросов в базу. Если такой задачи нет, то можно реализовать через простой счетчик

$year = 2008;
$current_year = date( 'Y' );

echo '<ul>';

while ( $year <= $current_year ) {
	echo '<li><a href="' . get_year_link( $year ) . '">' . $year . '</a></li>';
	$year++;
}

echo '</ul>';


Если все-таки нужно проверять существование постов, то можете запрашивать один, из каждого года таким образом:

$year = 2008;
$current_year = date( 'Y' );

echo '<ul>';

while ( $year <= $current_year ) {

	$args = array(
		'year'        => $year,
		'post_status' => 'publish, future, draft, pending',
		'posts_per_page' => 1,
		'fields' => 'ids'
	);

	$posts = get_posts( $args );

	if ( is_array( $posts ) && !empty( $posts ) ) {
		echo '<li><a href="' . get_year_link( $year ) . '">' . $year . '</a></li>';
	}

	$year++;
}
echo '</ul>';


Если вы заранее не знаете в котором году был опубликован первый пост, его можно получить с помощью сортировки ASC

$args = array(
	'posts_per_page' => 1,
	'order' => 'ASC'
);

$posts = get_posts( $args );

if ( $posts ) {
	$year = date( 'Y', strtotime( $posts[0]->post_date ) );
}


PS. Если у вас не посты, а другой тип записи, нужно указывать аргумент post_type
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы