WP_Query显示一个特定的帖子,然后显示其余的

时间:2013-11-23 10:05:25

标签: php wordpress

如何在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

1 个答案:

答案 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参数会强制您拥有该值......

在您的原始问题中,您没有详细说明该值是什么以及您拥有的最终目标或目标是什么(...我们都喜欢在答案后出现的关键细节中缺少一个问题已经给了..)

总结 - 恕我直言如果你想要更多的控制和更容易的维护,多循环仍然是要走的路 - 如果不是 - 那么请在你的问题中说明原因,为什么不。