博客 / WordPress/ WordPress如何调用全站随机文章/同分类随机文章

WordPress如何调用全站随机文章/同分类随机文章

看过上一篇WordPress教程的朋友应该已经学会如何调用最新文章、热门文章以及指定分类文章了。但是,我们有时可能需要更多的文章调用方式,例如调用随机文章。那么,我们该如何调用全站文章进行随机显示,或者调用同一个分类下的随机文章呢?

下面将介绍两种方法,帮助你实现这些功能。

全站随机文章

以下代码可以调用全站已发布的文章,并随机显示指定数量的文章标题和链接。

<?php
// 设置查询参数
$args = array(
    'numberposts' => 5,      // 要显示的文章数量
    'orderby'     => 'rand', // 按随机顺序排序
    'post_status' => 'publish' // 只获取已发布的文章
);

// 获取文章
$rand_posts = get_posts( $args );

// 循环输出文章
foreach( $rand_posts as $post ) :
    setup_postdata( $post ); // 设置全局文章数据
?>
    <a href="<?php the_permalink(); ?>"><?php the_title(); ?></a>
<?php
endforeach;
wp_reset_postdata(); // 重置文章数据
?>

代码说明:

  • 使用 get_posts() 函数获取文章列表。
  • orderby' => 'rand' 是关键参数,用于实现随机排序。
  • 循环中使用了 setup_postdata()wp_reset_postdata(),这是标准做法,确保模板标签(如 the_permalink())能正常工作。

同分类随机文章

以下代码可以获取当前文章所属分类下的随机文章。

<?php
// 获取当前文章的分类
$categories = get_the_category();
if ( ! empty( $categories ) ) {
    $category_id = $categories[0]->term_id; // 获取第一个分类的ID

    // 设置查询参数
    $args = array(
        'cat'      => $category_id, // 指定分类ID
        'posts_per_page' => 8,      // 显示8篇文章(推荐使用此参数替代已废弃的'showposts')
        'orderby'  => 'rand',       // 随机排序
        'post_status' => 'publish'  // 只获取已发布的文章
    );

    // 创建新的查询
    $random_query = new WP_Query( $args );

    // 循环输出文章
    if ( $random_query->have_posts() ) :
        while ( $random_query->have_posts() ) : $random_query->the_post();
    ?>
            <a href="<?php the_permalink(); ?>"><?php the_title(); ?></a>
    <?php
        endwhile;
    else :
        echo '该分类下暂无其他文章。';
    endif;

    // 重置主查询数据
    wp_reset_postdata();
}
?>

代码说明与修正:

  • 原文代码中使用了已废弃的参数 showposts,已修正为标准的 posts_per_page
  • 增加了错误处理:使用 if ( ! empty( $categories ) ) 判断文章是否有分类,避免未分类文章导致错误。
  • 简化了分类ID的获取逻辑,直接取第一个分类。
  • 使用 WP_Query 进行更灵活的文章查询。
  • 增加了查询结果判断(if ( $random_query->have_posts() )),当分类下无文章时给出友好提示。

使用方法

将上述任意一段代码,放入你的WordPress主题模板文件(如 single.php, sidebar.php)中需要显示随机文章的位置即可。

是不是很简单呢?通过修改代码中的数量参数(如 numberpostsposts_per_page),你可以轻松控制显示的文章篇数。

发表评论

您的邮箱不会公开。必填项已用 * 标注。