2015-05-21 57 views
1

我有兩個自定義帖子類型,例如'汽車'和'自行車'。我已經使用WordPress的默認類別來分類兩個帖子類型的帖子。比方說,例如,類別是「紅色」,「藍色」和「黑色」。WordPress的:類別頁面上的自定義帖子類型分離

我在這裏想要實現的是,當我進入「紅色」類別頁面時,我想看到'汽車'和'自行車'歸類在'紅色'下。我使用的是category.php,這是我試圖運行查詢:

$car_args = array(
        'posts_per_page' => -1, 
        'orderby'   => 'date', 
        'order'   => 'DESC', 
        'post_type'  => 'cars', 
        'post_status'  => 'publish', 
        'cat'    => $cat 
       ); 

       // The Query 
       $car_query = new WP_Query($car_args); 

       // The Loop 
       if ($car_query ->have_posts()) { 
       echo "<h3>Cars</h3>"; 
        while ($car_query->have_posts()) { 
         $car_query->the_post(); 
         echo get_post_type() . '<a href="'. get_permalink() .'">' . get_the_title() . '</a><br />'; 
        } 
       } else { 
        // no posts found 
       } 

$bikes_args = array(
        'posts_per_page' => -1, 
        'orderby'   => 'date', 
        'order'   => 'DESC', 
        'post_type'  => 'bikes', 
        'post_status'  => 'publish', 
        'cat'    => $cat 
       ); 

       // The Query 
       $bikes_query = new WP_Query($bikes_args); 

       // The Loop 
       if ($bikes_query ->have_posts()) { 
       echo "<h3>Bikes</h3>"; 
        while ($bikes_query->have_posts()) { 
         $bikes_query->the_post(); 
         echo get_post_type() . '<a href="'. get_permalink() .'">' . get_the_title() . '</a><br />'; 
        } 
       } else { 
        // no posts found 
       } 

       /* Restore original Post Data */ 
       wp_reset_postdata(); 

查詢中的$貓獲得「紅色」類的類ID。這兩個查詢都正確限制'Red'類別的帖子,但'Cars'帖子類型和'Bikes'帖子類型的帖子都顯示出來,儘管我試圖通過帖子類型進行限制。我讀過幾篇文章,Wordpress忽略了分類頁面上的帖子類型參數。這是真的,如果是這樣,有沒有解決方法?

+0

放棄你分類自定義查詢,返回到默認循環,然後使用'pre_get_posts'將每個頁面的帖子類型和自定義帖子設置爲您的類別歸檔頁面 –

+0

Hi @PieterGoosen。謝謝,會嘗試。但如果我這樣做,我將不得不爲類別中的每種顏色都有類別 - {color} .php? – NJT

+0

不,只有一個categoty.php會很好 –

回答

1

您試圖執行的操作僅適用於一個查詢,並且僅適用於沒有任何自定義查詢的主查詢。

首先,讓我們先將您的自定義帖子類型添加到您的類別頁面。默認情況下,自定義手槍類型從類別頁面中排除。所以我們需要通過pre_get_posts手動添加到主查詢參數中。以下內容添加到您的functions.php:(警告:未經測試,還需要PHP 5.3+

add_action('pre_get_posts', function ($q) 
{ 
    if (!is_admin() && $q->is_main_query() && $q->is_category()) { 
     $q->set('post_type', array('post', 'cars', 'bikes')); // Change this according to your post types 
     $q->set('nopaging', true); // This will get all posts, same as posts_per_page=-1 
    } 
}); 

你現在應該有從點擊類別的所有訊息是在您的類別頁面您設定的日誌類型。

接下來,我們需要整理你的循環。刪除category.php中的所有自定義查詢,並將其替換爲默認循環。正如你所想要兩個塊通過郵寄類型的順序,我們將使用rewind_posts()所以我們可以運行循環兩次

if (have_posts()) { 
    while (have_posts()) { 
    the_post(); 

     if ($post->post_type == 'cars') { //Change accordingly to only show cars in this loop 

      // Your loop 

     } 
    } 

    rewind_posts(); 

    while (have_posts()) { 
    the_post(); 

     if ($post->post_type == 'bikes') { // Change accordingly to only show bikes 

      // Your loop 

     } 
    } 
} 

這現在應該在兩塊顯示您的帖子後型

+0

你先生,你是一個天才。 :D初始測試顯示這正是我想要做的。再次感謝。 :) – NJT

+0

我的榮幸,很高興它爲你工作。享受:-) –

+0

嗨@Pieter古森,我一直在使用這個在我的項目,直到現在,它的工作很棒。我現在一直試圖給if($ post-> post_type =='bikes')添加一個分類參數,但一直沒有取得任何成功。你能幫忙嗎? – NJT

相關問題