showposts
,它已被弃用。我对
WP_Query
很熟悉,并且我认为如果将posts_per_page
设置为我的限制(例如5),然后将nopaging
更改为true
,结果会变成“好吧,我只给您5个帖子”。但这不起作用。我该怎么办?
#1 楼
我认为现在我了解您正在尝试做什么。当您使用WP_Query
运行自定义查询并将限制设置为每页仅获得5个帖子时,该查询将仅检索5个帖子,并且该查询仅包含5个帖子,但为了进行分页,WP_Query
仍然贯穿整个数据库并计算与查询条件匹配的所有帖子。当您查看查询的
$found_posts
和$max_num_pages
属性时可以看到。让我们举个例子:您有20个帖子属于默认帖子类型
post
。您只需要最新的5个帖子即可,无需分页。您的查询看起来像这样$q = new WP_Query( 'posts_per_page=5' );
var_dump( $q->posts )
将给您最新的5篇帖子echo $q->found_posts
将给您20
echo $q->max_num_pages
将给您4
这项额外工作对只有几个帖子的网站的影响很小。如果您正在运行一个包含成百上千个帖子的网站,可能会很昂贵。如果您只需要5个最新帖子,这会浪费资源。
有一个未记录的参数称为
no_found_rows
,该参数使用布尔值,可在发现以下内容后使查询保释。您需要5个帖子。这将迫使WP_Query
在检索了所查询的帖子数量之后,不再寻找任何数学条件为标准的帖子。此参数已经内置在get_posts
中,这就是为什么get_posts
比WP_Query
快一点的原因,尽管get_posts
使用WP_Query
结论
总之,如果您不打算使用分页在查询中,在查询中使用
'no_found_rows=true'
总是明智的做法,以加快处理速度并节省资源浪费。 #2 楼
好的,让您拥有一个名为'blog_posts'的帖子类型,并且您希望获取5个该帖子类型的帖子。这是您需要做的$args = array(
'post_type' => 'blog_posts',
'posts_per_page' => '5',
);
$query = new WP_Query($args);
上面的查询将返回5个类型为'blog_posts'的帖子,如果它不是自定义帖子类型,则只需替换即可如果您想获取所有帖子,请使用此
'post_type' => 'posts',
,然后像这样使用'posts_per_page' => '-1',
进行替换,以获取更多详细信息WP Query 评论
请查看有关该问题的评论。
– EliasNS
15年3月18日在11:14
#3 楼
在与@Pieter Goosen讨论了问题的评论后,我想我可以回答问题并解释我的错误。关键是
found_posts
在使我困惑。我认为,该数字是检索到的帖子,但不是。是符合条件的帖子数。就像WP_Query
有2个部分一样:一个部分用于查找(全部)帖子,另一部分用于在检查pagination
参数时获取内容。因此,我们有一个$post_count
属性,它是提取的帖子数(Codex说The number of posts being displayed
),它当然等于posts_per_page
参数上的数目,以及$posts
数组属性上的项目数。所以
WP_Query
并没有做任何无用的工作,就像我想的那样^^ 希望对别人有帮助!
评论
看我的答案。我想我明白你的意思:-)
–Pieter Goosen
15年3月18日在12:23
是!您做得非常好:D终于我有办法做到了,我理解所有= D谢谢@PieterGoosen!
– EliasNS
15年3月19日在0:17
做完了!它扩展了我自己的答案^^ @PieterGoosen
– EliasNS
15年3月19日在14:25
#4 楼
我知道@ user1750063已经提到了代码,但是请尝试使用此代码$args = array (
'post_type' => 'custom_post',
'nopaging' => false,
'posts_per_page' => '5',
'order' => 'DESC',
'orderby' => 'ID',
);
$query = new WP_Query( $args );
if ( $query->have_posts() ) {
while ( $query->have_posts() ) {
$query->the_post();
// display content
}
} else {
// display when no posts found
}
wp_reset_postdata(); // Restore original Post Data
评论
id作为orderby值无效,而分页是无效参数
–Pieter Goosen
15年3月18日在11:58
分页不是有效参数。您是说'nopaging'=>是吗?如果是,那么我将获得所有帖子。那不是我想要的@PieterGoosen我认为他的意思是身份证。
– EliasNS
2015年3月18日12:00
orderby用于显示订单,对不对?它不会损害nopaging值/参数。 @PieterGoosen为什么ID和orderby无效?您能否阐明这一点?
–Shreyo Gi
2015年3月18日在12:22
应该是ID,而不是ID
–Pieter Goosen
15年3月18日在12:25
#5 楼
我将使用自定义字段进行限制,请在下面的查询示例中进行检查:$wp_query = new WP_Query("orderby=DESC&post_type=portfolio&meta_key=FeaturedProject&meta_value=1&posts_per_page=6");
它将返回6个特色项目。
评论
只是'posts_per_page = 5'我用那个,但是找到了所有帖子。如果我访问found_posts属性,则该数字大于5。我希望查询仅保留5个帖子。可能吗? @PieterGoosen
您不应该设置nopaging参数,将其设置为true意味着获取所有帖子
@PieterGoosen如果不设置nopaging参数,它将获得默认值false,因此首页显示5个帖子,但查询包含更多内容。我向问题添加了图像。
您的评论令人困惑,您要求将页面上显示的帖子数量限制为5,即您得到的。现在,您说(请重读以前的评论:-))该查询包含更多内容。请解释。您不能设置posts_per_page,然后在同一查询中使用no_paging设置为true,它要么是posts_per_page要么将nopaging设置为true