我有一个循环,并且该循环中只有粘性帖子。所以我的逻辑是这样的:
“如果粘贴帖子是”空“打破循环”。
该代码按预期工作,看起来像这样:
<?php //we will get "Sticky Posts" only with this loop and exlude Featured Category
$category = get_cat_ID('Featured');
$col = 1; //Let's create first column
$sticky = get_option( 'sticky_posts' );
$args = array(
/* Add whatever you need here - see http://codex.wordpress.org/Class_Reference/WP_Query */
'paged' => $paged,
'category__not_in' => array($category),
'post__in' => $sticky,
'ignore_sticky_posts' => 1
);
$temp = $wp_query;
$wp_query = null;
$wp_query = new WP_Query($args);
/*Below is IMPORTANT PART*/
if($wp_query->have_posts()):?><?php while ( $wp_query->have_posts() ) :
$wp_query->the_post();if(empty($sticky))break;?>
<div <?php post_class('col'.$col); ?> id="post-<?php the_ID(); ?>">
<?php if ($col == 1) echo '<div class="row">';//If column 1 create first row ?>
<?php if ($col == 2) echo '<div class="row2">';//If column 2 create second row ?>
<h3 class="mytitle"><a href="<?php the_permalink(); ?>" title="<?php echo esc_attr( sprintf( __( 'Permalink to %s', 'override' ), the_title_attribute( 'echo=0' ) ) ); ?>" rel="bookmark"><?php the_title(); ?></a></h3>
<div class="entry">
<?php if ( has_post_thumbnail() ):?>
<div class="featured_img">
<?php
the_post_thumbnail();
echo '<div class="featured_caption">' . get_post(get_post_thumbnail_id())->post_excerpt . '</div>';
?>
</div><!--/featured_img-->
<?php endif; ?>
<?php // let's enable more link on pages...
global $more;
$more = 0;
?>
<?php the_content(__('Read more','override')); ?>
<div class="clear"></div>
<div class="custom_fields"><?php the_meta(); ?></div><br/>
<p class="postmetadata">
<?php _e('Filed under:','override'); ?> <?php the_category(', ') ?> <?php _e('by','override'); ?> <?php the_author(); ?><br/><?php the_tags(__('Tags:','override'), ', ', '<br />'); ?>
<?php _e('Posted on: ','override'); ?><?php the_time(get_option('date_format')); ?><br/>
<?php if ( comments_open() ) {
comments_popup_link(__('No Comments »','override'), __('1 Comment »','override'), __('% Comments »','override'));}
else {
_e('Comments are disabled!','override');
}
?>
<?php edit_post_link(__(' Edit','override'), __(' |','override'), ''); ?>
</p>
</div><!--/entry-->
</div><!--/post_class-->
<?php /*Enable Two Column Layout*/
if($col==1) {
$col=2;
echo "</div>";
}
else if($col==2) {
$col=1;
echo "</div>";
}
endwhile; ?>
<?php endif; ?><!--END if THE LOOP (Sticky)-->
<?php
$wp_query = null;
$wp_query = $temp;
wp_reset_query();
?>
现在在这个工作代码之前,我尝试了一个不同的逻辑,如下所示:
“如果NOT EMPTY继续循环”所以现在代码中的所有内容保持不变,除了:
if($wp_query->have_posts()):?><?php while ( $wp_query->have_posts() ) :
$wp_query->the_post();if(empty($sticky))break;?>
所以现在代码变为:
if($wp_query->have_posts()):?><?php while ( $wp_query->have_posts() ) :
$wp_query->the_post();if(!empty($sticky))continue;?>
现在这是我感到困惑的地方,因为if(!empty($sticky))continue;
部分无法按预期工作,因为我的循环CONTINUES (返回其他帖子)即使没有“Stickies”。如果没有胶粘物,我认为循环将停止但事实并非如此。
我的var_dump($sticky)
如果有粘性帖子array(1) { [0]=> int(214) }
,则会显示此信息,如果没有粘性物品array(0) { }
则显示此信息。
我的问题是:如果使用if(!empty($sticky))continue;
,为什么循环会继续返回其他帖子(我认为如果它们存在,它将仅返回“Stickies”并且如果它们不在,则返回NOTHING。)
谢谢!
答案 0 :(得分:1)
首先,让我说你的逻辑与你的代码不完全一致:)。
根据我的理解来自您的代码,您希望迭代返回的所有帖子 WP_Query()
,但只渲染粘性的帖子。您的if
位于wile
循环内,因此您必须检查当前帖子是否有粘性。但是,if(empty($sticky))
不会这样做。它检查是否有任何粘性帖子 。检查当前帖子的方法是if(is_sticky(the_ID()))
。
现在,关于continue
:
来自php manual:
在循环结构中使用continue来跳过剩下的部分 当前循环迭代并在该条件下继续执行 评估,然后是下一次迭代的开始。
正如您所看到的,continue
不会停止循环,而是尝试启动下一次迭代,忽略当前步骤的其余代码。如果当前帖子不是粘性的话,那就是你想要的,换句话说就是if(!is_sticky(the_ID()))
。
但是,我认为您根本不需要任何检查,因为您已经指定希望WP_Query()
仅获取stickies('post__in' => $sticky
)。< / p>
答案 1 :(得分:0)
我不太了解wordpress代码,但在该代码中,$sticky
变量永远不会在while循环中更新。所以也许你必须在if条件之前添加$sticky = get_option( 'sticky_posts' );
。