Я хочу отображать ссылки на сообщения из группы категорий по годам. Сгруппируйте по годам, потому что WordPress по умолчанию повторяет дату для каждого сообщения. Я пытаюсь использовать код, но я получил все сообщения в текущем году. Как мне это сделать? Пример, который я хочу сделать:
2010
- киньте ссылку 20
- киньте ссылку 19
- киньте ссылку 18
- …
- киньте ссылку 8
2009 г.
- киньте ссылку 7
- киньте ссылку 6
- …
Код:
<?php
query_posts(array('nopaging' => 1, /* desabilitar a paginacao pata obter todos os pots. O padrao e ordenado pela data */));
$prev_year = null;
query_posts('cat=27');
if ( have_posts() ) {
while ( have_posts() ) {
$this_year = get_the_date('Y');
if ($prev_year != $this_year) {
// Year boundary
if (!is_null($prev_year)) {
// A list is already open, close it first
echo '</ul>';
}
echo '<h2 class="titulo-conteudo">'. $this_year . '</h2>';
echo '<div class="barra-amarela-4"></div>';
echo '<ul>';
}
echo '<li>';
// Imprimi o link do post.
the_post(); ?>
<div class="entry">
<h2 id="post-<?php the_ID(); ?>">
<a href="<?php the_permalink(the_title()) ?>"><?php the_title(); ?></a></h2>
</div>
<?php
echo '</li>';
$prev_year = $this_year;
}
echo '</ul>';
}
?>
Я написал этот исходный код на Stack Overflow, но я не видел ваших дальнейших ответов, потому что вы разместили их как ответы, а не как комментарии к моему ответу. Я протестировал код сейчас с определенной категорией, и он работает для меня, но он нуждается в одном важном изменении: вызов
the_post()
(о котором я совсем забыл) должен поступать прямо в началоwhile ( have_posts() )
цикла, иначе год всегда будет отставать на один пост. позади. Я исправил это в исходном ответе.Если вы хотите указать несколько критериев для своего запроса, вы должны объединить их в одном вызове функции. Так что не
query_posts('cat=27'); query_posts('nopaging=1');
, аquery_posts('cat=27&nopaging=1')
. Вы также можете использовать формат массива (как в моем исходном примере), я предпочитаю его для удобства чтения.Последнее изменение: если это не основной цикл вашей страницы (и я подозреваю, что этот код окажется на боковой панели, а не в основном цикле), [лучше не использовать
query_posts()][2]
. Вместо этого попробуйтеget_posts()
использовать результат этого. Я не знал этого, когда писал исходный ответ, но зависание на этом сайте многому вас учит!Когда чьи-то встроенные комментарии написаны не на английском языке и они публикуют сообщения для поддержки на англоязычном форуме, вы должны дать им презумпцию невиновности и не начинать с утверждения «прочитайте вопрос вслух». Это просто грубо.
Джереми Кларк, я должен согласиться с @EAMann ; давайте дадим немного слабину тем, кто не говорит по-английски. В конце концов, это не wp-hackers. 🙂
9 лет спустя я в ужасе от того, что я написал. Должно быть, это был действительно плохой день. Обновляю его сейчас, чтобы ваши комментарии не имели смысла, но в исходной версии я жаловался на грамматику в вопросе.
То, что у вас есть, выглядит хорошо. Поскольку я был здесь в поисках решения другого вопроса, который я разместил, и наткнулся на этот, я подумал, что добавлю, как я это сделал, на одном из моих сайтов:
Это устраняет несколько вызовов query_posts и действительно легко контролирует стиль и т. Д. Надеюсь, это поможет кому-то, кто может захотеть увидеть различные решения для этого 🙂
Отличная работа снова, на вашем ориг. решение.
Вам нужно запустить запрос сообщений, который дает значения как категории, так и года (а также вашего отсутствия разбиения на страницы, что лучше всего сделать с posts_per_page=-1)
См. статью кодекса для query_posts() для получения полной информации о параметрах, которые вы можете передать в новый WP_Query().
Вот код вашего вопроса:
Ваш код сильно сломался при публикации. Из того, что я вижу
query_posts()
, в большинстве случаев несколько — плохая идея. Пожалуйста, исправьте свой код, если вы хотите получить лучшую оценку.Лично я бы использовал плагин для этого, есть много отличных плагинов для архивов. Сейчас я играю в Smart Archives Reloaded. Это позволяет легко получать посты по месяцам/годам в определенной категории:
smart_archives( array( 'format' => 'list', 'include_cat' => 27 ));