Цикл по количеству постов в Wordpress, затем повторение той же петли в следующем наборе и т. Д. - PullRequest
0 голосов
/ 10 июня 2009

Я посмотрел, посмотрел и попытался найти ответ на то, что я искал, но я еще не нашел ответ на этот вопрос:

Я пытаюсь сгенерировать цикл Wordpress, который берет все сообщения из одной категории и отображает их по три в тегах <li></li>.

Вывод должен выглядеть так:

<li>My post title | Another Title | Third title</li>
<li>The next post title | A different post | Post #6</li>
<li>And so on | And so forth</li>

Мне нужно это, чтобы просмотреть все записи в категории до конца, а затем выйти из цикла.

На данный момент мой код полностью не работает, но я предоставил то, с чем я работаю ниже. Если у кого-то есть какое-то решение, я бы с радостью предоставил вам безумный реквизит, поскольку это преследовало меня три дня без какого-либо решения.

<?php // Loop through posts three at a time
$recoffsetinit = '0';
$recoffset = '3';
query_posts('cat=1&showposts=0');
$post = get_posts('category=1&numberposts=3&offset='.$recoffsetinit.');
while (have_posts()) : the_post(); 
?>
<li>
<?php
$postslist = get_posts('cat=1&order=ASC&orderby=title');
foreach ($postslist as $post) : setup_postdata($post);
 static $count = 0; if ($count == "3") { break; } else { ?>
 <a href="<?php the_permalink() ?>"></a>
<?php $count++; } ?>
<?php endforeach; ?>
<?php $recoffsetinit = $recoffset + $recoffsetinit; ?>
</li>
<?php endwhile; ?>

Ответы [ 3 ]

1 голос
/ 11 июня 2009

Я взломал ваше решение, чтобы оно заработало. Это заняло немного времени, так как мой код-фу не то, что вы бы назвали "хорошим" Вот решение:

<ul>
<?php
query_posts('category=1&showposts=0');
$posts = get_posts('category_name=my_cat&order=ASC&orderby=title&numberposts=0'); 
$postsPerLine = 3;
$currentPostNumber = 0;

foreach ($posts as $post) :

    if ($currentPostNumber == 0) {
            echo '<li>';
    }
            ?>

    <a href="<?php the_permalink(); ?>"></a>

    <?php
$currentPostNumber++;

    if ($currentPostNumber >= $postsPerLine) { 
            $currentPostNumber = 0;
            echo '</li>';
    }

  endforeach;
  ?>
</ul>

Спасибо за ввод!

0 голосов
/ 09 июля 2009

Просто поймайте сразу все сообщения для категории, затем итерируйте по ней. Создайте ссылку на каждый пост, добавьте разделитель и на каждом третьем посте начните новый <li>

<ul>
<?php
global $post;
$postsPerLine = 3;
$counter = 0;
$myposts = get_posts('category=1&orderby=title&order=ASC');

foreach($myposts as $post) :
    echo (++$counter % postsPerLine) ? : '<li>';
?>
    <a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></li>
<?php
    echo ($counter % postsPerLine) ? ' | ' : '</li>';
endforeach;

?>
</ul>
0 голосов
/ 11 июня 2009

Нет WordPress для тестирования и нет времени, но что-то вроде этого может быть лучшим способом для этого?

<?php

$postList = get_posts('cat=1&order=ASC&orderby=title');
$postsPerLine = 3;

echo "<ul>";
echo buildPosts($postList, $postsPerLine);
echo "</ul>";

function buildPosts($list, $perLine) {

    $out = '';
    $currentPostNumber = 0;

    foreach ($list as $post) {

        if ($currentPostNumber == 0) {
            $out .= '<li>';
        }

        $out .= "<a href='" . the_permalink() . "'></a> ";

        $currentPostNumber++;

        if ($currentPostNumber <= $perLine) { 
            $currentPostNumber = 0;
            $out .= '</li>';
        }

    }
    return $out;
}

?>
...