2012-08-16 54 views
0

我在for-loop中使用了以下自定義查詢,使我可以創建前8個月的選項卡式歸檔我爲「新聞」創建的自定義帖子類型。自定義查詢顯示從當前日期超過8個月的WordPress自定義帖子類型

這很好,但是我希望在標題'老年消息'下顯示每一箇舊帖子。我一直在努力研究如何在任何時候將當前日期超過8個月的帖子分開。

任何人都可以告訴我一個自定義的查詢結構,使我能夠做到這一點。

下面是我用於在相關容器中輸出CPT的代碼。

<?php for($i = $this_month-1; $i > $this_month-8; $i--) : 
     if($i==-1){$m=11;} 
     if($i==-2){$m=10;} 
     if($i==-3){$m=9;} 
     if($i==-4){$m=8;} 
     if($i==-5){$m=7;} 
     if($i==-6){$m=6;} 
     if($i==-7){$m=5;} 
     if($i==-8){$m=4;} 
     else{$m=$i;} 

     query_posts(array(
      'post_type' => 'news', 
      'posts_per_page' => '-1', 
      'orderby' => 'date', 
      'order' => 'ASC', 
      'monthnum'=>$m 
     )); 
....... 

回答

2

你可以試試這個

<?php 
    add_filter('posts_where', 'filter_where'); 
    query_posts(array('post_type' => 'news', 'posts_per_page' => '-1', 'orderby' => 'date')); 
    function filter_where($where = ''){ 
     $where .= " AND post_date < '".date('Y-m-d', strtotime('-8 month'))."'"; 
     return $where; 
    } 
    remove_filter('posts_where', 'filter_where'); 
    if (have_posts()) : 
     while (have_posts()) : the_post(); 
     // your code 
     endwhile; 
    endif; 
    wp_reset_query(); 
?> 

更新:可能這可以幫助你。

$args = array(
    'post_type' => 'news', 
    'posts_per_page' => '-1', 
    'orderby' => 'date', 
    'year'  => date('Y'), // for current year, date('Y')-1 for 1 year ago 
    'monthnum' => $m, // the month in the loop 
    'order' => 'ASC' 
); 
query_posts($args); 
+0

感謝您對此的幫助,這很好,希望你喜歡你的觀點:)!我現在在我上面的問題中使用的代碼有點麻煩。它按月列出了所有內容,但它包括前幾年的帖子,我怎麼可能會在此查詢中過濾掉較舊的帖子(超過8個月)?再次感謝你 – tcnarss 2012-08-21 13:32:50

+0

如果你的代碼獲得超過8個月的帖子,那麼它可能在去年。 – 2012-08-21 16:45:32

+0

對不起,我以前的評論不是很清楚。您給出答案的問題顯示了所有超過8個月的新聞,這非常棒。另一個問題如下。我在原始問題中包含的自定義查詢按月顯示所有新聞帖子,但不會刪除超過8個月的新聞帖子,例如,如果我在上個八月的新聞中發佈帖子,它會出現在當前的8月份名單中。是否有任何自定義查詢我可以用來刪除這些。 (查詢在for循環中,因爲我需要循環幾個月才能打印導航菜單 – tcnarss 2012-08-21 16:59:35

0

我不太瞭解wordpress,但可以幫助你邏輯。據我所知,這可以通過檢查條件,如查詢「WHERE creation_date < 8個月」在您的查詢中,同時回顧類別'舊新聞'的帖子。所以先得到當前日期。

<?php $today = date('Y-m-d'); ?> 

然後減去其8個月,你會得到一個日期8個月年長

<?php $eight_month = date('Y-m-d',strtotime("-8 month $today")); ?> 

現在你可以在你的查詢中使用$ eight_month所以你的查詢將是這樣的。檢查日期的格式,你在你的數據庫中存儲的職位和我發生相應的變化,如果超過格式不同的「年月日」

「SELECT * FROM帖裏CREATION_DATE <‘$ eight_month’」

希望這是你想要的並且幫助你在你的項目中。祝你好運,有一個愉快的一天

相關問題