在循环内打印当前邮政索引号

时间:2011-06-23 作者:MANnDAaR

我正在WordPress上工作,我有以下代码来获取循环中的帖子。

        <?php
                $posts = $woo_options[\'woo_latest_entries\'];
                query_posts(\'post_type=post&category_name=company\');
                if ( have_posts() ) : while ( have_posts() ) : the_post(); $count++;

        ?>

        /// Post Content Goes Here //

        <?php endwhile; endif; ?>
这些输出在循环中发布类似的内容。。。

Post Goes Here ....

Other Post Goes Here ....

Another Post Goes Here ....
.....
我想要的是在循环中打印当前帖子的索引号。实例

 1. Post Goes Here ....

 2. Other Post Goes Here ....

 3. Another Post Goes Here ....
 .....
我怎样才能做到这一点?谢谢

EDIT

哦!我可以这样做。。

<?php 
echo $wp_query->current_post +1; 
?>
有没有其他/更好的方法?

6 个回复
SO网友:Evan Mattson

实际上,我想根据帖子索引分配ID!

这是我修改过的代码。

<?php

global $wp_query;

$posts = $woo_options[\'woo_latest_entries\'];
query_posts(\'post_type=post&category_name=company\');

if ( have_posts() ) : while ( have_posts() ) : the_post();  $count++;
    $index = $wp_query->current_post + 1;

?>
    <div id="my_post_<?php echo $index; ?>">

        <!-- Post Content Goes Here -->

    </div>

<?php endwhile; endif; ?>

SO网友:mike23

如果这只是一件美观的事情,并且您不需要使用count变量进行进一步编码,那么您可以将您的帖子包装在ol 标签:

<?php if ( have_posts() ) : ?>

    <ol>

        <?php while ( have_posts() ) : the_post(); ?>

            <li> <!-- Post Content Goes Here --> </li>

        <?php endwhile; ?>

    </ol>

<?php endif; ?>

SO网友:Michael

出于某种原因,循环中已经有一个计数器变量;如果这不是用于其他目的,只需回显:

<?php echo $count.\'.\'; ?> /// Post Content Goes Here // 

SO网友:Jerry303

嗨,我偶然碰到了这条线,想知道怎么做。发现这很容易。在主模板文件中,例如索引。php,在循环之前声明一个变量$post\\u idx,并在循环内声明该变量的增量。如下所示:

<?php $post_idx = 0; while ( have_posts() ) : the_post(); ?>
  <?php
    get_template_part( \'content\', get_post_format() );
    $post_idx++;
  ?>
<?php endwhile; ?>
然后,在循环中每次执行的内容模板(例如content.php)中,只需将$post\\u idx设置为全局,然后根据需要使用它:

global $post_idx;
print "<p>{$post_idx}</p>";
就是这样!

SO网友:davidwebca

即使这个问题很老了,我也会把它放在这里,以防来自谷歌搜索的人需要更灵活的答案。

随着时间的推移,我制定了一个解决方案WP_Query 或全局查询不可知。当您使用自定义WP_Query, 您仅限于使用includerequire 能够使用$custom_query, 但在某些情况下(对我来说是大多数情况!),我创建的模板部分有时用于全局查询(如存档模板)或自定义WP_Query (如在首页上查询自定义帖子类型)。这意味着我需要一个全局可访问的计数器,无论查询类型如何。WordPress并没有提供这个功能,但这里介绍了如何通过一些挂钩实现它。

将此放在您的函数中。php

/**
 * Create a globally accessible counter for all queries
 * Even custom new WP_Query!
 */

// Initialize your variables
add_action(\'init\', function(){
    global $cqc;
    $cqc = -1;
});

// At loop start, always make sure the counter is -1
// This is because WP_Query calls "next_post" for each post,
// even for the first one, which increments by 1
// (meaning the first post is going to be 0 as expected)
add_action(\'loop_start\', function($q){
    global $cqc;
    $cqc = -1;
}, 100, 1);

// At each iteration of a loop, this hook is called
// We store the current instance\'s counter in our global variable
add_action(\'the_post\', function($p, $q){
    global $cqc;
    $cqc = $q->current_post;
}, 100, 2);

// At each end of the query, we clean up by setting the counter to
// the global query\'s counter. This allows the custom $cqc variable
// to be set correctly in the main page, post or query, even after
// having executed a custom WP_Query.
add_action( \'loop_end\', function($q){
    global $wp_query, $cqc;
    $cqc = $wp_query->current_post;
}, 100, 1);
此解决方案的优点在于,当您输入自定义查询并返回到常规循环时,它将以任何方式重置为正确的计数器。只要你在一个查询中(WordPress中总是这样,你几乎不知道),你的计数器就会是正确的。这是因为主查询是用同一个类执行的!

示例:

global $cqc;
while(have_posts()): the_post();
    echo $cqc; // Will output 0
    the_title();

    $custom_query = new WP_Query(array(\'post_type\' => \'portfolio\'));
    while($custom_query->have_posts()): $custom_query->the_post();
        echo $cqc; // Will output 0, 1, 2, 34
        the_title();
    endwhile;

    echo $cqc; // Will output 0 again
endwhile;

SO网友:powerbuoy

我想做同样的事情,但不在圈子里。基本上,我想从帖子的ID中找出帖子的索引。下面是我的想法:

<?php
function sleek_get_post_index ($post) {
    $allPosts = get_posts([
        \'post_type\' => $post->post_type,
        \'numberposts\' => -1
    ]);

    $index = 0;

    foreach ($allPosts as $p) {
        $index++;

        if ($p->ID == $post->ID) {
            break;
        }
    }

    return $index;
}
这纯粹是为了设计,因为客户希望帖子旁边有数字,即使帖子本身就在“特色帖子”框中。我还添加了一个前导零,使用:<?php echo str_pad(sleek_get_post_index($post), 2, \'0\', STR_PAD_LEFT) ?>.

结束

相关推荐

如何在调用Get_Posts()后有效地重置POST对象

下面的函数是从我的索引调用的。php位于主内容块的正下方。其目的是写出最新帖子的链接列表。但是,一旦此函数完成,我需要重置post对象(或者后面的侧栏查询认为当前post是此函数执行的最后一篇post)如何将帖子重置回页面的当前帖子?我尝试在函数末尾添加wp\\u reset\\u query(),但它并没有产生我想要的结果(在内容区域中生成多篇帖子)。非常感谢您的帮助。function myFunction(){ $catHidden=get_cat_ID(\'hidden\');&#x