遇到 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”或任何其他属性显示的帖子数量,但较早的帖子不会受到影响。
感谢您的帮助,如果需要,我可以提供更多代码。
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);
您应该将以下代码保留在您的
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 的更多信息。
在大多数 WordPress 案例中,我发现帖子作者使用粘性帖子,这在讨论帖子的顺序和限制时可能会导致问题。例如,分页可能无法正确运行;它可能会将帖子限制为 10 个,但在许多情况下,首页上会显示超过 10 个帖子。
您可以将此行添加到您的 WP_Query 中:
'ignore_sticky_posts' => true