【问题标题】:PHP iterating through a count shows incorrect sequencePHP遍历计数显示不正确的序列
【发布时间】:2014-09-03 08:36:56
【问题描述】:

这是一个 wordpress 项目,但实际上更多的是 PHP。我正在执行查询以带回最多 12 个帖子。每组三个帖子都包含在一个名为 jobsN 的 div 中。该 div 中的每个帖子(项目)返回为 item1item2item3

item1 类工作得很好,但 jobs 类不会以 1-2-3-4 的形式返回。它以 1-0-0-0 的形式返回。我无法弄清楚我的计数出了什么问题。

正如您从下面的 HTML 中看到的那样,工作计数存在一些问题。这部分在这里处理:

    <?php if ($count == 3) {?></div><?php $count = 0; ?><div class="jobs
<?php echo $count; ?>"><?php }; ?>

这是完整的查询:

<?php 
            query_posts(array( 
                'post_type' => 'custom_job',
                'showposts' => 12 
            ) );  
        ?>

        <?php if ( have_posts() ): $contcount = 0; $count = 0;?>
        <?php $contcount++; ?>
        <div class="jobs<?php echo $contcount; ?>">
        <?php while (have_posts()) : the_post(); $count++;?>
            <div class="item-<?php echo $count ?>">
                <h2><a href="<?php the_permalink() ?>"><?php the_title(); ?></a></h2>
                <p><?php echo get_the_excerpt(); ?></p>
                <a href="<?php the_permalink() ?>">Learn more</a> -->
            </div>
            <?php if ($count == 3) {?></div><?php $count = 0; ?><div class="jobs<?php echo $count; ?>"><?php }; ?>
        <?php endwhile; ?>
        </div>
        <?php endif; ?>

这是我返回的 HTML:

<div class="jobs1">
        <div class="item-1">
            content
        </div>
        <div class="item-2">
            content
        </div>
        <div class="item-3">
            content
        </div>
</div>
<div class="jobs0">
        <div class="item-1">
            content
        </div>
        <div class="item-2">
            content
        </div>
        <div class="item-3">
            content
        </div>
    </div>
<div class="jobs0">
        <div class="item-1">
            content
        </div>
        <div class="item-2">
            content
        </div>
        <div class="item-3">
            content
        </div>
</div>
<div class="jobs0">
        <div class="item-1">
            content
        </div>
</div

【问题讨论】:

  • 永远不要使用query_posts。它不可靠,会破坏主要查询并且在大多数情况下在分页时完全失败。而是使用WP_Query

标签: php wordpress iteration


【解决方案1】:

这行是问题所在:

<?php if ($count == 3) {?></div><?php $count = 0; ?><div class="jobs<?php echo $count; ?>"><?php }; ?>

如果 $count = 3,则意味着您将显示一个新的工作 div,但同时您也使 $count = 0,那么您将其回显为 0。

将此行转换为:

<?php if ($count == 3) {?></div><?php $count = 0; $countcount++; ?><div class="jobs<?php echo $countcount; ?>"><?php }; ?>

【讨论】:

  • 虽然变量是 contcount,而不是 countcount,但它仍然有效。所以一旦我改变它就可以了:)
【解决方案2】:

使用这条线

&lt;?php if ($count == 3) {?&gt;&lt;/div&gt;&lt;?php $count = 0; $contcount++; ?&gt;&lt;div class="jobs&lt;?php echo $contcount; ?&gt;"&gt;&lt;?php }; ?&gt;

而不是

&lt;?php if ($count == 3) {?&gt;&lt;/div&gt;&lt;?php $count = 0; ?&gt;&lt;div class="jobs&lt;?php echo $count; ?&gt;"&gt;&lt;?php }; ?&gt;

解决方案:

我在$count==3 时更新了$contcount++ 并在echo 类中使用jobs&lt;?php echo $contcount

【讨论】:

  • 如果你在输出之前增加 $contcount,你将在第二个块中得到 3 而不是 2
  • 第一次在外面使用,while 2 将在下一次使用见上文。我已经更新了它,当它必须再次回显时a
【解决方案3】:

试试这个,不是 100% 确定它会起作用

<?php 
    query_posts(array( 
        'post_type' => 'custom_job',
        'showposts' => 12 
    ) );  
?>

<?php if ( have_posts() ): $contcount = 0; $count = 0;?>
<?php $contcount++; ?>
    <div class="jobs<?php echo $contcount; ?>">
        <?php while (have_posts()) : the_post(); $count++;?>
            <div class="item-<?php echo $count ?>">
                <h2><a href="<?php the_permalink() ?>"><?php the_title(); ?></a></h2>
                <p><?php echo get_the_excerpt(); ?></p>
                <a href="<?php the_permalink() ?>">Learn more</a>
            </div>
            <?php if ($count == 3): ?>
                <?php $count = 0; $countcount++;?>
                <div class="jobs<?php echo $contcount; ?>"></div>
            <?php endif; ?>
        <?php endwhile; ?>
    </div>
<?php endif; ?>

编辑:编辑了可能的错误。

【讨论】:

  • It 在第一个 "endif" 语法错误时出错,意外的 'endif' (T_ENDIF)
【解决方案4】:

您在 PHP 中使用了错误的计数器:

你的代码有这一行:

<?php if ($count == 3) {?></div><?php $count = 0; ?><div class="jobs<?php echo $count; ?>"><?php }; ?>

应该是这样的

<?php if ($count == 3) { ?></div><?php $count = 0; $contcount++; ?><div class="jobs<?php echo $contcount; ?>"><?php }; ?>

因为$count 存储项目,$contcount 存储项目块

【讨论】:

  • 再次看到 $contcount 的 1 的问题值在 while 循环之外使用,您的代码将在开始时将 1-1 放置两次
  • 这一行的结束 } 似乎有问题。
  • 已解决,我忘了加';'在 $countcount 的末尾。检查更正的代码行
猜你喜欢
  • 2019-09-10
  • 2022-10-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-03-30
  • 2015-10-21
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多