我正在尝试编写一个短代码,其中包括“get\\u posts”,以便获取博客帖子数据,然后在页面上显示最近的3篇文章。
此代码在模板中工作。然而,当我将其放入输出缓冲区(ob\\u start)内的短代码中时,它无法检索帖子。相反,它会获取当前页面本身并循环浏览该页面(在本例中为主页)。
你知道我怎样才能让它按照最初的意图在帖子中循环吗?
以下是在模板中工作的代码:
<?php $lastposts = get_posts( array(\'posts_per_page\' => 3) );?>
<?php if ( $lastposts ) {
foreach ( $lastposts as $post ) :
setup_postdata( $post ); ?>
<div class="single_post" onclick="location.href = \'<?php the_permalink(); ?>\';">
<div class="postbox" style="background-image: url(\'<?php echo catch_first_image() ?>\');">
<div class="pink_cover">
<div class="text-center datebox">
<h5><?php the_time(\'j\'); ?></h5>
<hr>
<h6><?php the_time(\'M\'); ?></h6>
<h6><?php the_date(\'Y\'); ?></h6>
</div>
</div>
</div>
<div class="row infobox">
<div class="col-9">
<h3><a href="<?php the_permalink(); ?>"><?php the_category($separator = \', \'); ?></a></h3>
<h4><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></h4>
</div>
<div class="col-3 infobox-moreinfo">
<img src="more_info.png">
</div>
</div>
</div>
<?php endforeach; wp_reset_postdata(); } ?>
下面是一个短代码,虽然在页面上显示类似的内容,但它本身并不能检索博客帖子。
add_shortcode(\'home_blog\', function(){
ob_start();
?>
<?php $lastposts = get_posts( array(\'posts_per_page\' => 3) );?>
<?php if ( $lastposts ) {
foreach ( $lastposts as $post ) :
setup_postdata( $post ); ?>
<div class="single_post" onclick="location.href = \'<?php the_permalink(); ?>\';">
<div class="postbox" style="background-image: url(\'<?php echo catch_first_image() ?>\');">
<div class="pink_cover">
<div class="text-center datebox">
<h5><?php the_time(\'j\'); ?></h5>
<hr>
<h6><?php the_time(\'M\'); ?></h6>
<h6><?php the_date(\'Y\'); ?></h6>
</div>
</div>
</div>
<div class="row infobox">
<div class="col-9">
<h3><a href="<?php the_permalink(); ?>"><?php the_category($separator = \', \'); ?></a></h3>
<h4><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></h4>
</div>
<div class="col-3 infobox-moreinfo">
<img src="more_info.png">
</div>
</div>
</div>
<?php endforeach; wp_reset_postdata(); } ?>
<?php
$output = ob_get_clean();
return $output;
});