这只是一个你可以尝试的概念
默认情况下,不能在循环内排序。据我所知,你有两个选择
创建两个循环并合并它们。然而,我不建议这样做。如果您对分页和偏移不完全满意,那么它将是一场噩梦
正常运行循环,将结果推到两个单独的数组中,合并两个数组,然后从中提取并显示帖子。可以按常规分页
示例基于具有自定义职位类型和默认职位类型设置的主查询pre_get_posts
. 您也可以在任何自定义查询上执行此操作。有关可以使用的成员变量变量列表,请参见WP_Post
. <注意,这使用PHP 5.4语法
$post_type_posts = []; //change to $post_type_posts = array(); for pre 5.4
$other_posts = []; //change to $other_posts = array(); for pre 5.4
if(have_posts()) {
while(have_posts()) {
the_post();
if( \'my_post_type\' == $wp_query->post_type ) {
$post_type_posts[] = get_the_title();
}else{
$other_posts[] = get_the_title();
}
}
}
$new_loop = array_merge($post_type_posts, $other_posts);
foreach ($new_loop as $loop) {
var_dump( $loop );
}
EDIT
你的想法也会奏效。创建自定义分类法,例如
tax
并在
tax
比如分类学
term-a
和
term-b
. 好吧,说吧
term-a
应首先显示。
然后按如下方式更改上述代码:
$post_type_posts = []; //change to $post_type_posts = array(); for pre 5.4
$other_posts = []; //change to $other_posts = array(); for pre 5.4
if(have_posts()) {
while(have_posts()) {
the_post();
if( has_term( \'term-a\', \'tax\' ) ) {
$post_type_posts[] = get_the_title();
}else{
$other_posts[] = get_the_title();
}
}
}
$new_loop = array_merge($post_type_posts, $other_posts);
foreach ($new_loop as $loop) {
var_dump( $loop );
}
EDIT 2
对于自定义查询,请使用
tax_query
, 您可以使用以下选项:
$args = [
\'post_type\' => \'my-post-type\',
\'tax_query\' => [
[
\'taxonomy\' => \'tax\',
\'field\' => \'slug\',
\'terms\' => [ \'term-a\', \'term-b\' ],
]
]
];
$query = new WP_Query( $args );
$post_type_posts = []; //change to $post_type_posts = array(); for pre 5.4
$other_posts = []; //change to $other_posts = array(); for pre 5.4
if($query->have_posts()) {
while($query->have_posts()) {
$query->the_post();
if( has_term( \'term-a\', \'tax\' ) ) {
$post_type_posts[] = get_the_title();
}else{
$other_posts[] = get_the_title();
}
}
}
wp_reset_postdata();
$new_loop = array_merge($post_type_posts, $other_posts);
foreach ($new_loop as $loop) {
var_dump( $loop );
}
有关更多信息,请查看
WP_Query