我正在构建一个页面,该页面在网格中显示帖子列表(可能会随机显示)。
这些帖子是自定义帖子类型,每个帖子都分配给单一的组织分类。
对于每个帖子,我想显示相关的号码。我不是指帖子ID,因为它不够具体。基本上,我想将自定义帖子类型视为自己的帖子列表。因此,该帖子类型中的第一篇帖子将是#1,第二篇将是#2,依此类推。
同样,如果通过分类法可以做到这一点,那就更好了。但我一定只是为自定义帖子类型中的帖子编号而定。
到目前为止我的解决方案是:在functions.php中创建一个循环自定义帖子类型的函数,并为每个帖子指定一个数字(从第一个帖子开始)作为自定义字段。只要加载显示帖子的页面,就会运行此函数。因此,该函数首先在其自己的循环中运行,然后页面执行正常循环并获取每个数字。
此解决方案在美容方面起作用。我得到了我想要的结果。但是,它不是很有效,因为它会在页面加载时运行。
有更好的方法吗?也许是一种在发布帖子时自动为帖子分配号码的方法?我了解如果删除帖子,则会跳过该号码。这是可以接受的。
我希望这很清楚。
我为了清晰起见对此进行了编辑,并更新了当前已更改的解决方案。我还删除了我在这里的代码块,因为它不再需要了。
答案 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