如何在WP_Query中实现这一点我可以首先显示一个具有特定元字段的帖子,然后将其余部分显示为正常?
编辑:
我不想做多个循环,因为我在循环中检查条件是否已经在循环中检查某些帖子,我无法将循环分开,因为它会破坏我的一些检查条件。
其次,多个循环对于分离要循环的内容很有用。我只想在循环中使用相同的内容,但只是循环排序不同。
这是我对循环的查询
$queryVideoFirst = new WP_Query(array(
'posts_per_page' => -1,
'numberposts' => -1,
'post_type' => 'mirror',
'order' => 'ASC',
'meta_query' => array(
array(
'key' => 'parentIDmirror',
'value' => $postIDCheck,
'type' => 'numeric'
)
)));
现在我有一个名为video_provider
的元键,我有一个这个元键的值列表。
我想要做的是UploadAnime
元键中的值video_provider
成为循环中的第一个,然后以正常方式输出其余元素。
例如,如果上面的查询从数据库中提取了5 mirror
,则使用以下video_provider
元值。
mirror 1: upload_ab
mirror 2: youtube
mirror 3: vimeo
mirror 4: UploadAnime
mirror 5: veevr
然后我希望它以这样的方式排序,即首先输出UploadAnime
所以它会像这样重新排序
mirror4: UploadAnime
.
.
.
the rest
答案 0 :(得分:2)
多个循环,如so ::
<?php
$do_not_duplicate = array();
$do_not_duplicate2[] = array();// set array before loop to avoid errors
// PUT YOUR ARGUMENTS HERE
$args = array(
'orderby' => 'rand', // random order for those with specific meta
'posts_per_page' => -1,
// Post type if needed ..
'post_type' => array(
'my_posttype',
),
'meta_key' => 'my_meta_key',
'meta_value' => 'my_meta_value',
),
);
$my_query = new WP_Query($args);
while ($my_query->have_posts()) : $my_query->the_post();
$do_not_duplicate = $post->ID; // var for some juggling if needed in loop
$do_not_duplicate_r[] = $post->ID; // but we really need array...
// your loop here ...
endwhile;
// end first condition now we set the new one
$args2 = array(
'orderby' => 'rand',
'posts_per_page' => -1,
// Post type if needed ..
'post_type' => array(
'my_posttype',
),
'meta_key' => 'my_meta_key_2',
'meta_value' => 'my_meta_value_2',
),
);
$my_query_2 = new WP_Query($args2);
while ($my_query_2->have_posts()) : $my_query_2->the_post();
// if already counted, go ahead and ignore
if (in_array($post->ID, $do_not_duplicate_r)) continue; // This is important
$do_not_duplicate = $post->ID; // var for some juggling if needed in loop
$do_not_duplicate_r[] = $post->ID; // but we really need array to continue from before...
endwhile;
// now you can even continue with the normal loop or go on with n others ..
if( have_posts() ){
while(have_posts()){
the_post();
// do not forget to check DUPS
if (in_array($post->ID, $do_not_duplicate_r)) continue;
// your loop
}
}
?>
编辑我评论后
或者使用order_by
参数。
$query = new WP_Query( array ( 'post_type' => 'product',
'orderby' => 'meta_value',
'meta_key' => 'my_string' ) );
但在您的原始问题中,您没有说出它的价值,因此对于数值,语法为:
$query = new WP_Query( array ( 'post_type' => 'product',
'orderby' => 'meta_value_num',
'meta_key' => 'my_num' ) );
话虽如此 - 我真的不明白为什么你在你的问题中添加"do not want multiple loops"
条件。
多个循环将允许您更好地控制分离,因为它允许轻松的视觉区分或逻辑分离(每种类型的不同排序只是一个示例)。
此外,使用order_by
参数会强制您拥有该值......
在您的原始问题中,您没有详细说明该值是什么以及您拥有的最终目标或目标是什么(...我们都喜欢在答案后出现的关键细节中缺少一个问题已经给了..)
总结 - 恕我直言如果你想要更多的控制和更容易的维护,多循环仍然是要走的路 - 如果不是 - 那么请在你的问题中说明原因,为什么不。