bes*_*rld 3 wordpress custom-post-type
我有一个存档模板文件,显示自定义帖子类型人员的所有帖子(称为archive-personnel.php):
这是文件的开头......
<?php
get_header();
//Show all posts for this custom posttype (personnel)
$args = array( 'post_type' => 'personnel', 'posts_per_page' => -1 );
$personnel_query = new WP_Query( $args );
if (have_posts()) : while ($personnel_query->have_posts()) : $personnel_query->the_post();
Run Code Online (Sandbox Code Playgroud)
这是有效的,但我知道我也可以使用pre_get_posts().但是pre_get_posts()- 使用- 过滤器,你必须检查它是否影响管理员等.
所以我的问题是:我使用哪种替代方案或只是偏好/品味的问题真的很重要吗?
我使用哪种替代方案或只是偏好/品味的问题真的很重要吗?
是的,有一个真正的区别:
1) pre_get_posts正在修改主查询(或所有查询),而不是使用WP_Query添加辅助查询.
2)如果您希望分页处理辅助查询,则通常必须对主查询进行修改.
通过使用pre_get_posts钩子,您可以修改作为实例的所有查询WP_Query(),包括主查询,主查询WP_Query()是每个页面请求的实例并且存在.
请记住,这get_posts() 是一个包装器,WP_Query()当suppress_filters属性设置为时,过滤器处于活动状态FALSE.
使用时,pre_get_posts您通常希望使用某些条件标记来定位特定查询.以下是一些示例,您可以使用:
a) is_main_query()确定当前查询是否是主查询.
b) ! is_admin()防止修改后端的查询.
c) is_post_type_archive()以邮政类型档案为目标.
添加自定义时WP_Query(),除主查询外,还要添加额外查询.
pre_get_posts如果可以的话,我通常会采取行动,而不是添加辅助查询.
如果要修改主查询,对于自定义帖子类型的存档personnel,您可以尝试:
add_action( 'pre_get_posts', function( $query ){
if ( ! is_admin() && $query->is_main_query() ) {
if ( is_post_type_archive( 'personnel' ) ) {
$query->set('posts_per_page', -1 );
}
}
});
Run Code Online (Sandbox Code Playgroud)
这是未经测试但你得到的想法;-)
希望以下链接可以为您提供有关差异的更多信息:
https://wordpress.stackexchange.com/questions/76553/should-i-use-pre-get-posts-or-wp-query
https://wordpress.stackexchange.com/questions/81695/what-is-main-query
| 归档时间: |
|
| 查看次数: |
6293 次 |
| 最近记录: |