Если у меня есть цикл из запроса категории, например:
<?php $the_query = new WP_Query('cat=1&showposts=50&orderby=title&order=asc');?>
<ul>
<?php while ($the_query->have_posts()) : $the_query->the_post();?>
<li>.. </li><?php wp_reset_query(); ?>
<?php endwhile; ?>
</ul>
Как бы создать предложение if, которое разбивает список через определенный интервал и запускает новый. Например, в 10-м посте верните a </ul>
и начните новый <ul>
в 11.
Это неверно, но для иллюстрации моей цели:
<?php $count =0;
while($count <=50){
if ($count == 9){
echo "<li><a href='<?php the_permalink(); ?>'>
<?php the_title(); ?></a></li></ul>";
}
elseif ($count == 10){
echo "<ul><li><a href='<?php the_permalink(); ?>'>
<?php the_title(); ?></a></li>";
}
else {
echo "<li><a href='<?php the_permalink(); ?>'><?php the_title(); ?></a></li>";
}
Как правильно включить эту логику в цикл?
Ответы:
Создать столбцы для вашего запроса и удобного отображения
В темах, вероятно, более полезно иметь что-то, что хорошо вписывается в теги шаблона и цикл. Мой первый ответ не был сосредоточен на этом. Кроме того, я думал, что это слишком сложно для быстрого принятия.
Более простой подход, который пришёл мне в голову, заключался в том, чтобы расширить «цикл» столбцами и до сих пор пришел к этому решению:
Объект WP_Query_Columns « дополняет » любой стандартный запрос WP столбцами, которые можно легко повторить. Первый параметр - это переменная запроса, а второй параметр - количество элементов, отображаемых в столбце:
Чтобы использовать его, просто добавьте класс WP_Query_Columns из этого списка в файл theme.php .
Расширенное использование
Если вам нужен номер столбца, который вы отображаете в данный момент (например, для некоторых четных / нечетных классов CSS, вы также можете получить его из foreach:
И общее количество столбцов также доступно:
Пример двадцать десять
Я мог бы быстро взломать двадцать десять тем для теста и таким образом добавить заголовки над любым циклом. Он вставлен в loop.php, начало - код темы:
Для более длинного ответа:
(именно так я и подошел к вышеприведенному материалу, но лучше объясняет, как на самом деле решить проблему с помощью простых математических операций. Мое новое решение - перебирать что-то заранее вычисленное.)
Это зависит от того, сколько вам на самом деле нужно, чтобы решить проблему.
Например, если количество элементов в столбце равно одному, это очень просто:
Даже с этим простым кодом видно, что нужно принять несколько решений:
Последний вопрос довольно интересен для вывода HTML, поскольку вы, вероятно, хотите заключить не только элементы, но и столбец с элементами HTML.
К счастью, с помощью кода мы можем установить все это в переменные и создать код, который всегда будет соответствовать нашим потребностям.
А иногда даже мы не можем даже ответить на каждый вопрос с самого начала. Например, общее количество элементов: существует ли какое-либо, несколько, точное число, которое совпадает с целым числом столбцов в целом?
Даже ответ Яна Фабри может работать в некоторых случаях (как в моем примере выше для сценария «один элемент на столбец»), вас может заинтересовать что-то, что работает для любого количества элементов, возвращаемых WP_Query.
Сначала по математике:
Этот код не запускается, поэтому давайте поместим это в простой текстовый пример
Это на самом деле работает и уже выводит некоторые данные:
Это уже очень хорошо имитирует, как это может выглядеть в шаблоне WordPress:
(Я не выполнил последний пример в среде WP, но он должен быть по крайней мере синтаксически правильным.)
источник
Это более общий вопрос программирования, но вот основная идея:
источник
wp_reset_query();
не связано с переменной $ the_query. Это не нужно вообще, верно?$the_query->the_post()
перезапишет глобальную$post
переменную иwp_reset_query()
восстановит ее (вызываяwp_reset_postdata()
- чего может быть достаточно само по себе?).$wp_query
но$the_query
был использован в примере. Однако я ошибся, добавлю его ко второму ответу для полноты.<ul></ul>
.Там нет необходимости создавать отдельный вар для подсчета, так как вар запроса уже пересчитывает по адресу:
$wp_query->current_post
. Кроме того, вам необходимо учесть окончательную запись в списке, чтобы у вас не было пустых<ul></ul>
в разметке.источник
WP_Query
также есть$post_count
переменная, вы можете использовать это вместоcount($the_query->posts)
. Зак, ты можешь "не принять" мой ответ и принять другой, если он лучше решил твою проблему.Добавьте
get_columns_array()
функцию в ваш function.php. Затем вы можете легко перебрать свои столбцы:В вашей теме вы затем цикл foreach над столбцами:
Я установил размер столбца по умолчанию равным 10. Вы можете использовать второй параметр, чтобы установить размер столбца самостоятельно. Нравится 7
get_columns_array($post_count, 7);
.источник
Вот еще один подход, который вы можете использовать:
источник