2011-02-09 212 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); 
相关问题