在此代码中,第一个while循环仅检查具有$ message字段的帖子数是否多于一个。如果是,则定义变量$ morethanonce,并且break应该退出循环,因为不再需要它。然后第二个while循环应该执行。
但由于某种原因,第一个while循环中断会阻止第二个循环运行。
当然,我可以删除休息,这不是绝对必要的,一切正常,但我希望有人向我解释为什么会发生这种情况。
<?php
function availability_warning () {
global $post;
$closed_messages_query = new WP_Query;
$closed_messages_query->query('post_type=ok_product&showposts=50&orderby=title&order=ASC');
$i = 0;
while ($closed_messages_query->have_posts()) : $closed_messages_query->the_post();
$message = get_post_meta($post->ID, "ok_product_closed_message", true);
if ($message) {
$i++;
if ($i == 2){
$morethanone = "yes";
break;
}
}
endwhile;
$i = 0;
while ($closed_messages_query->have_posts()) : $closed_messages_query->the_post();
$message = get_post_meta($post->ID, "ok_product_closed_message", true);
if ($message) {
$i++;
if ($i == 1) {
if ($morethanone == 'yes'){ echo '<div class="prod-warnings"><ul id="warnings" class="morethanone">';}
else {echo '<div class="prod-warnings"><ul id="warnings">';}
}
echo '<li>'.$message.'</li>';
}
endwhile;
if ($i > 0) { echo '</ul></div>'; }
}
?>
答案 0 :(得分:1)
好的,你的问题不是break命令。 问题在于条件。你使用“while($ closed_messages_query-&gt; have_posts())” 要在附加循环中使用相同的查询,您需要“回滚”查询,否则它将从访问的最后一行继续。
更新:如果你想继续使用你的代码,循环使用似乎是错误的,至少放线
$closed_messages_query->rewind_posts();
在第一个endwhile;
在任何情况下,您的代码都有点过于复杂,这是一个简化的小尝试(可以更好地重构以获得更好的外观和性能)。我不是一个wordpress专家,但这是我的看法(修正你的评论)
<?php
function availability_warning () {
global $post;
$closed_messages_query = new WP_Query;
$closed_messages_query->query('post_type=ok_product&showposts=50&orderby=title&order=ASC');
if ( $closed_messages_query->have_posts() )
{
$i = 0;
while ($closed_messages_query->have_posts()) : $closed_messages_query->the_post();
$message = get_post_meta($post->ID, "ok_product_closed_message", true);
if ($message) {
$i++;
if ($i == 2)
echo '<div class="prod-warnings"><ul id="warnings" class="morethanone">';
else
echo '<div class="prod-warnings"><ul id="warnings">';
echo '<li>'.$message.'</li>';
}
endwhile;
if ($i > 0) {
echo '</ul></div>';
}
}
}
?>
答案 1 :(得分:0)
基本上, break
允许您在获得预期数据后立即退出循环:无需再循环(不会将任何内容更改为结果 - 但不会吃掉任何CPU)
至于为什么你不进入第二个循环,我不确定(我不知道你正在使用的类),但我会说用{{1加载数据可能会在the_post()
对象中使一些内部指针前进。
当指针足够高时,没有任何项目可以循环。
在第二个循环之前,您似乎没有重新初始化内部指针。