WordPress:WP_Query 引入额外的帖子

问题描述 投票:0回答:3

遇到 WordPress 问题,使用 WP_Query 将过去五天内发布的最后三篇文章拉到页面上。

这是我的过滤器以及我设置 wp_query 的新实例的位置:

<?php 

get_header(); 

function filter_where( $where = '' ) {
    $where .= " AND post_date > '" . date('Y-m-d', strtotime('-5 days')) . "'";
    return $where;
}

$args = array(
            'post_type' => 'post',
            'post_status' => 'publish',
            'posts_per_page' => '3'
            );

add_filter( 'posts_where', 'filter_where' );

$query = new WP_Query( $args ); 
?>

然后我就得到了我的循环:

<?php while($query->have_posts()): $query->the_post();?>

<br/>
    <i><?php echo get_the_date(); ?></i>
    <br/>
    <b><?php the_title(); ?></b>
    <br/>
    <?php the_excerpt(); ?>
    <br/>
<?php endwhile; ?>

这一切都运行良好 - 这三个帖子被拉入,但一些不在查询范围内的额外帖子也被拉入。

页面上是否还有其他我尚未覆盖的功能?所有这些代码都驻留在页面模板文件中,我怀疑有一些神奇的代码在我似乎找不到的页面上执行。

此外,我知道我正确地获取了这些内容,因为我可以更改使用“posts_per_page”或任何其他属性显示的帖子数量,但较早的帖子不会受到影响。

感谢您的帮助,如果需要,我可以提供更多代码。

wordpress
3个回答
3
投票

https://wordpress.stackexchange.com/questions/85657/wp-query-pulling-an-extra-post-per-page

我遇到了完全相同的问题,并在上面的链接中找到了答案。问题是我已经将帖子设为置顶,这意味着它总是会在我的搜索结果中返回。

将以下内容添加到我的查询中可以阻止此行为。

'ignore_sticky_posts' => true
$post_query =  new WP_Query();
$query_args =  array( 'ignore_sticky_posts' => true, 'post__in' => array(123,124), 'posts_per_page'=> '-1', 'order'=> 'ASC' , 'orderby' => 'title');
$myposts    =  $post_query->query($query_args);

1
投票

您应该将以下代码保留在您的

functions.php

function filter_where( $where = '' ) {
    $where .= " AND post_date > '" . date('Y-m-d', strtotime('-5 days')) . "'";
    return $where;
}
add_filter( 'posts_where', 'filter_where' );

以及页面模板文件中的以下代码

$args = array(
    'post_type' => 'post',
    'post_status' => 'publish',
    'posts_per_page' => '3'
);
$query = new WP_Query( $args );
while($query->have_posts()): $query->the_post();
    // ...
endwhile;

此外,要使其在特定页面上工作,您应该在

filter_where
函数中添加一个条件,即

if( is_page('page_slug') ) // or something like this
{
    $where .= " AND post_date > '" . date('Y-m-d', strtotime('-5 days')) . "'";
}
return $where;

了解有关 is_page 的更多信息。


0
投票

在大多数 WordPress 案例中,我发现帖子作者使用粘性帖子,这在讨论帖子的顺序和限制时可能会导致问题。例如,分页可能无法正确运行;它可能会将帖子限制为 10 个,但在许多情况下,首页上会显示超过 10 个帖子。

您可以将此行添加到您的 WP_Query 中:

'ignore_sticky_posts' => true
© www.soinside.com 2019 - 2024. All rights reserved.