2

我需要在存档循环中显示自定义帖子类型“车辆”的所有现有帖子。

这是我到目前为止所拥有的:

function get_all_vehicle_posts( $query ) {
    $query->set( 'posts_per_page', '-1' );
}
add_action( 'pre_get_posts', 'get_all_vehicle_posts' );

我看到了我想要的无限帖子。但是,我需要将此更改限制为我的自定义帖子类型。

我试过了:

    if ( 'vehicle' == $query->post_type ) {
        $query->set( 'posts_per_page', '-1' );
    }

但这似乎不起作用。我想我们在查询运行之前不知道帖子类型,除非它是查询的特定参数?

如何将此功能限制为特定的帖子类型?

4

2 回答 2

9

使用帖子类型的 is_post_type_archive 函数检查您的预获取帖子。

您将需要检查查询是否不是管理员以避免影响管理区域,以及检查查询是否是主查询。

function get_all_vehicle_posts( $query ) {
    if( !is_admin() && $query->is_main_query() && is_post_type_archive( 'vehicle' ) ) {
        $query->set( 'posts_per_page', '-1' );
    }
}
add_action( 'pre_get_posts', 'get_all_vehicle_posts' );

http://codex.wordpress.org/Function_Reference/is_admin

http://codex.wordpress.org/Function_Reference/is_main_query

http://codex.wordpress.org/Function_Reference/is_post_type_archive

于 2013-09-23T23:42:24.667 回答
0

帖子类型必须设置为查询参数

$args = array(
    'post_type' => 'vehicle'
);

所以在你的函数中添加帖子类型,否则你只查询标准的帖子对象。

于 2013-09-23T21:28:34.750 回答