使用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'或任何其他属性显示的帖子数量,但之前发布的帖子不受影响。
感谢您的帮助,如果需要,我可以提供更多代码。
答案 0 :(得分: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;
答案 1 :(得分:0)
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);