2011-02-09 245 views
6

嘿。我在wordpress中使用自定義帖子類型。我註冊這個自定義後類型是這樣的:這些參數WordPress的自定義帖子類型

 register_post_type("lifestream", array(
      'label' => 'Lifestream', 
      'public' => true, 
      'hierarchical' => true, 
      'menu_position' => 5, 
      'supports' => array('title','editor','author','thumbnail','comments','custom-fields'), 
      'taxonomies' => array('category','post_tag'), 
      'query_var' => true, 
      'publicly_queryable' => true, 
      'exclude_from_search' => false, 
      'caller_get_posts' => 1 

     )); 
     register_taxonomy_for_object_type('category', 'lifestream'); 
     register_taxonomy_for_object_type('post_tag', 'lifestream'); 

在主題(循環模板)我喜歡結合崗位和我的自定義後類型,我使用query_posts():

$paged = (get_query_var('paged')) ? get_query_var('paged') : 1; 
$args = array(
    'post_type' => array('post', 'lifestream'), 
    'paged' => $paged, 
    'cat' => $wp_query->get('cat'), 
    'tag' => $wp_query->get('tag'), 
    'year' => $wp_query->get('year'), 
    'monthnum' => $wp_query->get('monthnum'), 
    'post_status' => 'publish', 
    'showposts' => 3 
); 
query_posts($args); 


# the loop  
while (have_posts()) : the_post(); 
# markup 
endwhile; 


if($wp_query->max_num_pages > 1): 
# next_posts_link/previous_posts_link 
endif; 

wp_reset_query(); 

這工作到目前爲止。但是,我遇到了類別和標籤頁面的問題。如果我打電話給首頁,一切都很好,我可以通過頁面分頁獲得正確的結果。

而且,如果我呼叫分頁的URL,例如/ category/mycat/page/2一個404被拋出。但那裏肯定應該是帖子。不管該類別中是否存在自定義類型的帖子或正式的帖子。我想我的query_posts()參數是不正確的,但不知道...

看來,$ wp_query-> max_num_pages有錯誤的值。但爲什麼?我是否正確註冊分類法(我喜歡爲我的自定義帖子類型使用類別和標籤)?

你有什麼想法該怎麼辦?非常感謝!

回答

2

我剛纔遇到的確切同樣的問題,無法在任何地方找到解決方案!互聯網充斥着關於這個話題的資源,但沒有人提供了正確的答案。

這是任何人搜索的正確答案。將下面的代碼放入您主題的根目錄中的functions.php

function init_category($request) { 
    $vars = $request->query_vars; 
    if (is_category() && !is_category('Blog') && !array_key_exists('post_type', $vars)) : 
     $vars = array_merge(
      $vars, 
      array('post_type' => 'any') 
     ); 
     $request->query_vars = $vars; 
    endif; 
    return $request; 
} 
add_filter('pre_get_posts', 'init_category'); 

所有學分去Mike誰張貼這對Wordpress.com。乾杯!

0

確保你補充一點:

'paged' => get_query_var('paged') 

到您的$ args,它應該接受尋呼沒關係。

更多here

+0

嘿大衛。謝謝,但正如你所看到的,我將頁面參數傳遞給query_posts()。或者這有什麼不對嗎? – Status4 2011-02-10 09:01:01

+0

哎呀,我的壞。我建議你做一個`print_r($ args);`看看究竟發送了什麼 - 這可能是你的第一個線索。另一件事:showposts被depracated,嘗試使用posts_per_page來代替。最後,您可以嘗試明確設置「nopaging」=> false – David 2011-02-12 22:03:10

0

在archive.php嘗試使用以下:

query_posts(array(
    'post_type' => 'lifestream', 
    'posts_per_page' => 6, 
    'orderby' => 'menu_order', 
    'orderby' => 'date', 
    'order' => 'ASC', 
    'paged' => '' . get_query_var('paged') 
)); 

if (have_posts()) : while (have_posts()) : the_post(); 

endwhile; else: 
endif; 

因爲我使用一個和上一個頁面鏈接:

next_posts_link('Older Entries', $wp_query->max_num_pages); 
previous_posts_link('Newer Entries', $wp_query->max_num_pages); 
相關問題