2014-09-12 140 views
0

我有這個WP_Query顯示WP_Query結果

<?php $query = new WP_Query(
    array("post_type" => "post", 
      "showposts" => "12" 
    )); 
while ($query->have_posts()) : $query->the_post(); ?> 

...

我的目標是使用此功能順序顯示帖子:

1 3 5 7 9 11 2 4 6 8 10 12 

因此,6列,每列2列將如下顯示:

1 2 

3 4 

5 6 

7 8 

9 10 

11 12 

我擁有的頁面邏輯需要這個特定的順序。

目前,我正在使用shortcodes實現此目的,但這意味着12個mySQL查詢而不是1個,並以此自定義順序顯示結果。

我知道我可以做到這一點,如果我設置自定義字段在哪裏指定我想要的結果提供的順序。然而,我並不想讓編輯的生活複雜化,所以我希望通過說明我希望顯示WP_Query結果的順序來實現這一點。

我看了一下post__in,但那會涉及手動提供帖子ID,所以它不是一個選項,因爲這是主頁,帖子號碼總是不一樣。

基本上,無論哪個是最新的帖子(他們有什麼ID),我想是這樣顯示出來:

1,3,5,7,9,11,2,4,6,8,10,12 

而不是默認的順序,這是:

1,2,3,4,5,6,7,8,9,10,11,12 

回答

0

我很抱歉地說你不可能用WP_Query來達到這個目的。我相信你可能以錯誤的方式接近這一點。

您的結果需要以結構化和統一的方式返回,並且您必須正確處理它們,而不管返回它們的方法如何。按照您提出的方式進行操作很容易導致分頁問題,​​並且MySQL沒有實現它的排序算法,因此任何寫入的查詢都會很慢。你也會限制自己前進。

我猜你正在做一些與網頁上的列,這就是爲什麼你想按這個順序的結果。如果是這種情況,有很多方法可以實現它,而無需以這種方式對結果進行重新排序。

沒有試圖聽起來很冒犯,這聽起來像是一個過度複雜的問題,它可以在過程中解決,而不是修補數據源本身。

如果你可以發送你正在做的結果本身(也許更好的不同的問題?),那麼你可能會得到更好的結果。

0

有一個非常簡單和容易的方法來實現這一點。您可以利用內置的循環計數器$wp_query->current_post。沒有必要爲自定義查詢等裏面的循環,這樣做

<?php if (have_posts()) : ?> 

<?php while (have_posts()) : the_post(); ?> 
     <?php /* Start the Loop */ ?> 

     <div class="entry-content <?php if($wp_query->current_post%2 == 1) echo ' left-post'; ?>"> 
     <?php get_template_part('content', get_post_format()); ?> 
     </div> 

<?php endwhile; ?> 

這將一類left-post添加到每個第二個職位。您現在可以相應地設置樣式(浮動您的entry-contentleft並將width設置爲約48%)。爲了避免古怪的造型問題,只需將.left-post { clear: left; }添加到您的樣式表中