nested list of posts using the_date
-
Okay here is some php code that displays posts grouped by the_date for use in a sidebar:
<ul>
<?php if (have_posts()) :
while (have_posts()) : the_post();
echo the_date('F j','<li>','</li>');
echo "<li><a href=\"";
echo the_permalink();
echo "\">";
echo the_title();
echo " by ";
echo the_author_posts_link();
echo "</li>";
endwhile;
endif; ?>
</ul>I want to find a way to nest the posts that appear for each use of the_date in a new
<ul>tag but I can’t think through it. Can anybody assist? Thanks!!See it in use here: http://wp.sacrag.com on the top left (recent posts)
-
I’m uncertain as to what you’re trying to do. Are you saying that you want to do a new UL every time the_date changes? I really don’t see why you’d want to do that in this case, but hey, to each his own.
the_date has a unique property, as you may have noticed. It won’t print the same thing twice in a row. If you look at your recent posts for Sept. 19th, you’ll see that the September 19th only printed once for two posts, even though the_date was called twice (think about it).
You can use this property to your advantage here.
<ul>
<?php if (have_posts()) :
while (have_posts()) : the_post();
echo the_date('F j','</ul><ul><li>','</li>');
echo "<li><a href=\"";
echo the_permalink();
echo "\">";
echo the_title();
echo " by ";
echo the_author_posts_link();
echo "</li>";
endwhile;
endif; ?>
</ul>This is a bit unpleasant, I grant you, since it leaves a useless
<ul></ul>at the top of the result. You could work around this by handling the changing date code yourself. For this, you’d need get_the_time(), like so:<ul>
<?php if (have_posts()) :
$start_loop = true;
while (have_posts()) : the_post();
$curr_date = get_the_time('F j');
if (!$start_loop && $curr_date != $old_date) {
echo "</ul><ul>";
}
$start_loop = false;
$old_date = $curr_date;
echo the_date('F j','<li>','</li>');
echo "<li><a href=\"";
echo the_permalink();
echo "\">";
echo the_title();
echo " by ";
echo the_author_posts_link();
echo "</li>";
endwhile;
endif; ?>
</ul>This one is slightly more complex. Basically, we ignore the first run through the loop using a boolean variable, then for the rest of the runs, if the date string changes, we close the UL and start a new one.
Thanks! That was too many
<ul>s but I played around with it and changed
if (!$start_loop && $curr_date != $old_date) {
echo "</ul><ul>“;
to
if (!$start_loop && $curr_date != $old_date) {
echo "</li></ul>“;and
the_date('F j','<li>‘,’</li>‘);
to
the_date('F j','<li>‘,’<ul>‘);and got what I wanted.
That don’t seem right. You’ve got one too many
</li>‘s in there now. Your page doesn’t validate because of it.I think you were right, but
echo "</ul></li>“;
after the if block works right and validates.Check it here in Recent Posts http://sacrag.com
The topic ‘nested list of posts using the_date’ is closed to new replies.