将两个帖子放入自定义帖子类型`Single-cpt.php`

时间:2020-08-07 作者:The Chewy

我有一个自定义的帖子类型,并且在CPT中single-cpt.php 文件我想加入两个职位,而不是一个。

这两篇文章将是用户在相关档案中单击的文章,以及按日期顺序排列的下一篇文章(即WordPress的默认文章排序方法)。原因是这些帖子基本上都是小而有用的信息,有两篇帖子可以创建更好的SEO和用户体验。

通常,当我想在一个归档页面上获取一定数量的帖子时,我会使用WP_Query() 和设置\'posts_per_page\' => 2 但开箱即用的方法在single-cpt.php 文件,因为这样的代码会拉入最新的帖子,而不是在存档页面上单击的帖子(然后是下一个最近的帖子)。

我要寻找的是与WP循环一起工作的东西,这样每个帖子看起来都一样,但会拉入两篇帖子(从存档中选择一篇,然后按日期顺序选择下一篇)。

Note: 如果WP\\u Query()无法做到这一点,那么任何其他方法都是非常受欢迎的。

<?php 
$newsArticles = new WP_Query(array(
    \'posts_per_page\' => 2,
    \'post_type\'=> \'news\'
));
while(  $newsArticles->have_posts()){
        $newsArticles->the_post(); ?>

// HTML content goes here

<?php } ?>
<?php wp_reset_postdata(); ?>
任何帮助都将是惊人的。

3 个回复
最合适的回答,由SO网友:Alan 整理而成

尝试以下操作:

<?php
$current_id = get_the_ID();
$next_post = get_next_post();
$next_id = $next_post->ID;
$cpt = get_post_type();
$cpt_array = array($current_id, $next_id);
$args = array(
   \'post_type\' => $cpt,
   \'post__in\' => $cpt_array,
   \'order_by\' => \'post_date\',
   \'order\' => \'ASC\',
);
$the_query = new WP_Query($args);
if($the_query->have_posts()):
    while($the_query->have_posts() ): $the_query->the_post();
       echo \'<h2>\'.the_title().\'</h2>\';
    endwhile;
endif;
wp_reset_postdata();
?>
经过本地测试,似乎效果良好。获取当前帖子ID获取下一个帖子ID获取当前帖子帖子类型运行查询

SO网友:Ben

如果我理解正确,在您的单个CPT模板上,我会这样做:

$next_post = get_next_post();
它将按时间顺序获取下一个页面对象,然后可以使用内置参数(found here) 要输出所需的内容部分,例如:

echo $next_post->post_title;
将输出下一页标题。

SO网友:Ben

我没有将其放入模板部分,但我认为这将是一个相当简单的下一步。下面是我要做的:

<!-- The original loop -->
<?php if ( have_posts() ) : while ( have_posts() ) : the_post(); ?>
    <?php the_post_thumbnail( \'medium\' ) ?>
    <h3><?php the_title(); ?></h3>
    <span class="date"><?php the_date( ); ?></span> <span class="author"><?php the_author_nickname(); ?></span>
    <?php the_content(); ?>
<?php endwhile; endif; ?>

<!-- Get Next Post Data -->
<?php $next_post = get_next_post(); ?>

<!-- Format Next Post to mimic the above -->
<img src="<?php get_the_post_thumbnail_url( $next_post->ID, \'medium\' ); ?>">
<h3><?php echo $next_post->post_title; ?></h3>
<span class="date"><?php echo $next_post->post_date; ?></span> <span class="author"><?php echo get_the_author_nickname( $next_post->post_author ); ?></span>
<?php echo get_the_content( $next_post->ID ); ?>
这与页面顶部的原始循环相呼应,当处于循环内部时。然后,循环结束,调用下一个post。下一个post调用的标记与原始post相同,因此您最终会在一个post页面上使用类似的post布局。

相关推荐

Get posts for each user

对于学生项目,我使用WordPress和木材(树枝)+ACF在这个项目中,我创建了3种自定义帖子类型:dissertation, subject-imposed 和subject-free每个学生只能按自定义帖子类型创建一篇帖子(我为此创建了一个限制)。但现在我想显示一个列表,列出每个学生的名字和他们的3篇帖子。这样的列表:Nicolas Mapple<自定义职位类型的标题dissertation + 自定义帖子类型名称+图像(ACF字段)自定义帖子类型的标题subject-imposed + 自定