最近在改版悟空搜官网时,想把之前博客调用置顶文章的区块改成调用指定ID文章,于是研究了一下实现方法。
在网上搜索后,发现利用WordPress函数get_post(),可以调用指定ID的文章链接、标题及内容。
调用单篇文章
下面是调用文章ID为1的文章的示例代码:
<?php
$post_id = 1; // 文章ID
echo get_post( $post_id )->post_content; // 输出文章的内容
echo get_post( $post_id )->post_title; // 输出文章的标题
?>
说明:此方法直接通过get_post()函数获取文章对象,然后访问其属性(如post_content、post_title)来输出内容。注意,输出的内容是原始数据,不会自动应用文章格式过滤器。
调用多篇文章
如果需要调用多个指定ID的文章(例如ID为1、2、3),可以使用get_posts()函数,示例如下:
<?php
$posts = get_posts(array(
'numberposts' => 3, // 获取文章数量
'post_type' => 'any', // 文章类型,可以是'any'或'post'
'include' => array(1, 2, 3) // 包含的文章ID数组
));
if($posts) :
foreach( $posts as $post ) :
setup_postdata( $post );
?>
<li><a href="<?php the_permalink(); ?>" rel="external nofollow" ><?php the_title();?></a></li>
<?php
endforeach;
wp_reset_postdata(); // 重置文章数据
endif;
?>
说明:这里对原始代码进行了优化和修正:
- 使用数组参数传递更清晰,且避免了
&转义问题。 - 循环结束后添加了
wp_reset_postdata(),这是重要的一步,用于恢复全局$post变量,避免影响后续查询。 - 将变量名
$postsl改为更具描述性的$posts。
注意事项
get_post()返回的是文章对象,其内容属性是未过滤的。若需要应用短代码、自动段落等过滤器,可使用apply_filters('the_content', $post->post_content)。- 调用文章时请确保ID存在且文章状态为已发布,否则可能获取不到数据。
- 在多文章循环中,务必使用
wp_reset_postdata()来清理环境。