我有什么
在我的首页上,我设法改变首页上的主要查询,以显示我的自定义帖子类型,其中包含“pre_get_posts”:
function custom_post_types_in_home_loop( $query ) {
if ( ! is_admin() && is_home() && $query->is_main_query() ) {
$query->set( 'post_type', array( 'member', 'press', 'calendar_event' ) );
}
return $query;
}
add_filter( 'pre_get_posts', 'custom_post_types_in_home_loop' );
我想要什么
问题在于某些帖子类型的帖子比其他帖子类型多,所以我想每个帖子类型只显示3个帖子,以便在循环中获得一点变化。
我尝试了什么
在this和this的帮助下,我设法做到了但没有发生任何事情,我做错了什么?
function custom_post_types_in_home_loop( $query ) {
if ( ! is_admin() && is_home() && $query->is_main_query() ) {
$query->set( 'post_type', array( 'member', 'press', 'calendar_event' ) );
if ( $query->get( 'post_type' ) == 'member' ) {
$query->set('posts_per_page', 3);
}
/* And the same 'if' statement for 'press' and 'calendar_event' */
}
return $query;
}
add_filter( 'pre_get_posts', 'custom_post_types_in_home_loop' );
答案 0 :(得分:1)
您将主查询的post_type
设置为array
。然后将其与string
进行比较。这些条件都不是真的,因此没有执行。
如果您只想限制查询数量并选择随机顺序,可以使用
$query->set('posts_per_page', 9);
$query->set('orderby', 'rand);
这将为您提供9个帖子,每个帖子3个,在不同的自定义帖子类型之间随机选择。
要将不同类型保持在一起,您需要构建更复杂且资源密集型的groupby
查询。如果您需要,我建议为每个post_type
构建3个不同的自定义循环。