我有一个代码:
<?php $loop = some array with posts;
while ( $loop->have_posts() ) : $loop->the_post(); ?>
<div class="class">
<p>(data)</p>
</div>
<?php endwhile; ?>
现在我想要为最后一个循环更改div类(从“class”到“class2”)。怎么做?
示例:
当“带有帖子的某个数组”现在有4条记录时,我得到了:
<div class="class"><p>data</p></div>
<div class="class"><p>data</p></div>
<div class="class"><p>data</p></div>
<div class="class"><p>data</p></div>
我想得到:
<div class="class"><p>data</p></div>
<div class="class"><p>data</p></div>
<div class="class"><p>data</p></div>
<div class="class2"><p>data</p></div> <!-- this one is different -->
无论有多少数组元素,我都在寻找能够发挥作用的东西。
坦克!
答案 0 :(得分:5)
这里有很多答案但没有提到$wp_query->post_count
和$wp_query->current_post
在循环中都很有用:
<?php
$loop = array(); //some array with posts;
while ( $loop->have_posts() ) :
$loop->the_post();
$class = 'class';
if($loop->post_count == $loop->current_post+1){ // if this is the last item
$class = 'class2';
}?>
<div class="<?php print $class ;?>">
<p>(data)</p>
</div>
<?php endwhile; ?>
答案 1 :(得分:4)
<?php
$num_rows = mysql_num_rows($result1);
$i = 0;
while ($row = mysql_fetch_array($result1, MYSQL_ASSOC)) {
$i++;
/*
your code
*/
if ( $i == ( $num_rows - 1 ) )
//you're on last line...
}
?>
取自http://www.phpbuilder.com/board/showthread.php?t=10359504,只需根据您的需要进行调整,您就可以轻松更改循环中的最后一次迭代
答案 2 :(得分:1)
您可以使用WP_query对象。您有两个有用的实例(post_count和current_post)。
// Example
<?php $query = new WP_Query(array('cat' => 112));
if ( $query->have_posts() ) : while ( $query->have_posts() ) : $query->the_post(); ?>
然后
<div class="post<? if(($query->current_post + 1) == $query->post_count) echo ' last'?>">
简单快捷。 ;)
答案 3 :(得分:0)
你能做的最好的事情可能就是把最后的调用放在while循环之外,并改变你的while循环逻辑,以便它尽早退出。而不是:
while ($post = getPost()) {
printPost($post);
}
做类似
的事情$last = getPost();
$post = getPost();
while ($post != null) {
printPost($last);
$last = $post;
$post = getPost();
}
printSpecial($post);
编辑:我一直在假设您不知道帖子的数量,直到您迭代它们为止,并且返回帖子直到用尽的界面是唯一一个可用。如果您有一个计数并且可以通过编号访问它们,那么其他建议将正常工作。事实上,如果你可以指望帖子的数量很少,那么你最好只是将它们读入一个数组,并使用for
循环而不是while
循环。
答案 4 :(得分:0)
<?php $loop = some array with posts;
while ( $loop->have_posts() ) : $loop->the_post();
$class = $loop->have_posts() ? 'class' : 'class2'; ?>
<div class="<?php echo $class ?>">
<p>(data)</p>
</div>
<?php endwhile; ?>
答案 5 :(得分:0)
如果您可以控制$ loop的数据结构,则可以将int转换为迭代器并在其上使用CachingIterator。如果你不控制有点复杂可能是将Iterator构建为包装器:
<?php
class PostIterator implements Iterator {
private $have_post;
function __construct($loop) {
$this->loop = $loop;
}
function rewind() {
$this->have_post = $this->loop->have_posts(); // looks like we have to call "next" to get the first element, too
}
function next() {
$this->have_post = $loop->have_posts();
}
function valid() {
return $this->have_post;
}
function key() {
return 0; // not used in this case, better implementation might have aocunter or such
}
function current() {
return $this->loop->the_post();
}
}
$ci = new CachingIterator(new PostIterator($loop)
foreach ($ci as $data) {
if (!$ci->hasNext()) {
// last element
}
}
?>
答案 6 :(得分:0)
在while ( $loop->have_posts() ) : $loop->the_post();
<?php
$postCount = 0;
// Start of The Loop
if (++$postCount == 1) {
// FIRST POST
}
if ($postCount == sizeof($posts)) {
// LAST POST IN LOOP
}
// End of The Loop
?>
来源:
http://wordpress.org/support/topic/last-post-in-the-loop?replies=4#post-954762