📜  wordpress 从循环中排除当前帖子 - PHP (1)

📅  最后修改于: 2023-12-03 15:06:00.882000             🧑  作者: Mango

Wordpress 从循环中排除当前帖子 - PHP

在 Wordpress 上开发主题或插件时,你可能会需要在循环中排除当前文章或页面。这个问题在以下情况特别突出:

  1. 在单篇文章或页面上显示相关文章或页面的列表时
  2. 在循环中使用 get_posts() 函数获取指定文章分类等条件的文章列表时

以下内容将介绍三种可行的方式来排除当前文章或页面:

第一种方式:使用 if 语句

此方式比较简单,适用于单篇文章或页面上需要排除当前文章或页面的情况。

<?php
if (have_posts()):
    while (have_posts()): the_post();
        // exclude current post or page
        if ($post->ID == $exclude_id) continue;
        // your code here
    endwhile;
endif;
?>

注意:上文中的 $exclude_id 是需排除文章或页面的 ID。

第二种方式:利用 get_posts() 函数的参数

此种方式适用于需要获取指定文章分类等条件的文章列表时排除当前文章或页面。

<?php
$exclude_post = array($post->ID);
$args = array(
    'category_name' => 'your_category_name',  // replace with your category name or other condition
    'post_type' => 'post',
    'exclude' => $exclude_post
);
$query = get_posts($args);

foreach ($query as $post) :
    setup_postdata($post);
    // your code here
endforeach;

wp_reset_query();
?>

注意:上文中的 $exclude_post 是需排除文章或页面的 ID 数组。

第三种方式:利用 pre_get_posts 钩子

此种方式适用于需要在循环之前排除当前文章或页面的情况。

<?php
function exclude_current_post_from_loop($query) {
    if ($query->is_home() && $query->is_main_query()) {
        $exclude_post = array($GLOBALS['post']->ID);
        $query->set('post__not_in', $exclude_post);
    }
}
add_action('pre_get_posts', 'exclude_current_post_from_loop');
?>

注意:上文中的 $GLOBALS['post']->ID 是需排除文章或页面的 ID。

到此为止,我们便介绍了三种可行的方式来排除当前文章或页面。你可以按照你的实际情况来选择使用哪一种方式。