为自定义帖子类型中的每个帖子分配一个号码?

时间:2016-05-19 16:47:41

标签: wordpress custom-post-type custom-taxonomy

我正在构建一个页面,该页面在网格中显示帖子列表(可能会随机显示)。

这些帖子是自定义帖子类型,每个帖子都分配给单一的组织分类。

对于每个帖子,我想显示相关的号码。我不是指帖子ID,因为它不够具体。基本上,我想将自定义帖子类型视为自己的帖子列表。因此,该帖子类型中的第一篇帖子将是#1,第二篇将是#2,依此类推。

同样,如果通过分类法可以做到这一点,那就更好了。但我一定只是为自定义帖子类型中的帖子编号而定。

到目前为止我的解决方案是:在functions.php中创建一个循环自定义帖子类型的函数,并为每个帖子指定一个数字(从第一个帖子开始)作为自定义字段。只要加载显示帖子的页面,就会运行此函数。因此,该函数首先在其自己的循环中运行,然后页面执行正常循环并获取每个数字。

此解决方案在美容方面起作用。我得到了我想要的结果。但是,它不是很有效,因为它会在页面加载时运行。

有更好的方法吗?也许是一种在发布帖子时自动为帖子分配号码的方法?我了解如果删除帖子,则会跳过该号码。这是可以接受的。

我希望这很清楚。

我为了清晰起见对此进行了编辑,并更新了当前已更改的解决方案。我还删除了我在这里的代码块,因为它不再需要了。

3 个答案:

答案 0 :(得分:0)

试用此代码

已编辑的代码

在functions.php文件中添加该功能

function Get_Post_Number($postID){
$temp_query = $wp_query;
$postNumberQuery = new WP_Query('orderby=date&posts_per_page=-1');
$counter = 1;
$postCount = 0;
if($postNumberQuery->have_posts()) :
    while ($postNumberQuery->have_posts()) : $postNumberQuery->the_post();
        if ($postID == get_the_ID()){
            $postCount = $counter;
        } else {
            $counter++;
        }
endwhile; endif;
wp_reset_query();
$wp_query = $temp_query;
return $postCount;
}

这是你的循环

   <ul id="uselist">
    <?php
    query_posts( array(
    'post_type' => 'use',
    'order' => 'desc',
    'posts_per_page' => 6
    ) );

    if ( have_posts() ) : 
        while ( have_posts() ) : the_post(); 

    $currentID = get_the_ID();
    $currentNumber = Get_Post_Number($currentID);

            $usecategory = get_term_by('id', get_field('use_category'), 'usecategory');
        ?>
            <li>
                <div class="use" style="border-bottom:15px solid <?php the_field('category_colour', $usecategory); ?>;">
                    <div class="useimage" style="background-image:url(<?php the_field('image'); ?>);">
                        <?php if (get_field('display_vimeo_video') == 'yes') { ?>
                            <div class="playicon"><img src="<?php echo bloginfo('template_url'); ?>/images/playicon.png" /></div>
                        <?php } ?>
                    </div>
                    <div class="useinfo">
                        <div class="usecatimage">
                            <img src="<?php the_field('category_image', $usecategory); ?>" />
                        </div>
                        <div class="usecatandtitle">
                            <h2 class="usecat"><a href="<?php the_permalink(); ?>"><?php echo $usecategory->name; ?> / Use <?php echo $currentNumber ; ?></a></h2>
                            <h3 class="usetitle"><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></h3>
                        </div>
                        <div class="usename">
                            <?php the_field('name'); ?>, <?php the_time('M d'); ?>
                        </div>
                    </div>
                </div>
            </li>
        <?php

        endwhile;
    else :
    endif;
    ?>
</ul>

我没有尝试过这段代码,但它应该有用。

答案 1 :(得分:0)

我在下面添加了2行,一个设置了帖子计数,另一个按顺序打印了这个数字:$ postNumber

<ul id="uselist">
        <?php
        query_posts( array(
        'post_type' => 'use',
        'order' => 'desc',
        'posts_per_page' => 6
        ) );

        if ( have_posts() ) : 

             $postNumber = 1; //add a sequential post number!

            while ( have_posts() ) : the_post(); 
                $usecategory = get_term_by('id', get_field('use_category'), 'usecategory');
            ?>
                <li>



                    <div class="use" style="border-bottom:15px solid <?php the_field('category_colour', $usecategory); ?>;">
                        <div class="useimage" style="background-image:url(<?php the_field('image'); ?>);">
                            <?php if (get_field('display_vimeo_video') == 'yes') { ?>
                                <div class="playicon"><img src="<?php echo bloginfo('template_url'); ?>/images/playicon.png" /></div>
                            <?php } ?>
                        </div>
                        <div class="useinfo">
                            <div class="usecatimage">
                                <img src="<?php the_field('category_image', $usecategory); ?>" />
                            </div>
                            <div class="usecatandtitle">
                                <h2 class="usecat"><a href="<?php the_permalink(); ?>"><?php echo $usecategory->name; ?> / # <?php echo $postNumber++; ?> //POST NUMBER WILL INCREASE SEQUENTIALLY HERE</a></h2>
                                <h3 class="usetitle"><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></h3>
                            </div>
                            <div class="usename">
                                <?php the_field('name'); ?>, <?php the_time('M d'); ?>
                            </div>
                        </div>
                    </div>
                </li>
            <?php
            endwhile;
        else :
        endif;
        ?>
    </ul>

答案 2 :(得分:0)

我想你可以使用Custom Fields轻松解决这个问题。对于自定义帖子类型中的每个帖子,添加自定义元字段,例如termocolor并手动输入该字段的值。 并使用get_post_meta()在页面中显示值。

post_number