1

遇到 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”或任何其他属性显示的帖子数量,但早期的帖子不受影响。

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

4

2 回答 2

2

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);
于 2013-11-04T11:03:05.053 回答
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的更多信息。

于 2013-05-23T23:51:44.943 回答