2011-02-09 11 views
6

Hej. Używam niestandardowego typu wpisu w wordpress. I zarejestrować ten niestandardowy typ postu tak:Wordpress niestandardowe kategorie typów postów

 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'); 

W motywu (szablonu pętla) lubię łączyć posty i moje niestandardowy typ pocztowy, na który używam query_posts() z następującymi parametrami:

$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(); 

To działa do tej pory. Ale mam problemy ze stronami kategorii i tagów. Jeśli zadzwonię na pierwszą stronę, wszystko jest w porządku i mogę się stronicować na stronach, uzyskując poprawne wyniki.

A jeśli zadzwonię pod adres URL strony, np./category/mycat/page/2 a 404 jest wyrzucane. Ale na pewno powinny być posty. Nie ma znaczenia, czy istnieją niestandardowe posty lub normalne posty w tej kategorii. Przypuszczam, że moje parametry dla query_posts() nie są poprawne, ale nie wiem ...

Wygląda na to, że $ wp_query-> max_num_pages ma złą wartość. Ale dlaczego? Czy mogę poprawnie zarejestrować taksonomie (lubię używać kategorii i tagów dla moich niestandardowych typów wpisów)?

Czy masz jakiś pomysł, co robić? Wielkie dzięki!

Odpowiedz

2

Właśnie napotkanych dokładna ten sam problem i nie mogłem znaleźć rozwiązania w dowolnym miejscu! Internet jest pełen zasobów na ten temat, ale żaden nie dostarczył poprawnej odpowiedzi na ten temat.

Oto poprawna odpowiedź dla każdego, kto szuka. Umieść poniższy kod w functions.php w katalogu głównym swojego motywu.

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'); 

Wszystkie kredyty przejść do Mike który opublikował to na Wordpress.com. Twoje zdrowie!

+0

Po prostu przekazałem ci tę formę kodu z moich notatek. Dobra robota. pre_get_posts jest trudny do pokonania! – BenRacicot

+0

Ta praca dla mnie, mają ten sam problem z CPT, dzięki – MrRoman

0

Upewnij się dodać to:

'paged' => get_query_var('paged') 

do swoich $ args i powinien przyjąć stronicowania porządku.

Więcej here

+0

Hej David. Dzięki, ale jak widzisz, przekazuję argument stronicowany do query_posts(). Czy coś jest z tym nie tak? – Status4

+0

Whoops, moje złe. Sugerowałbym wykonanie 'print_r ($ args) ;, aby zobaczyć dokładnie, co jest wysyłane - to może być Twoja pierwsza wskazówka co do problemu. Kolejna sprawa: zdemaskowano punkty informacyjne, zamiast tego spróbuj użyć posts_per_page. Na koniec możesz spróbować jawnie ustawić "nopaging" => false – David

+0

Spróbuję, dziękuję do tej pory – Status4

0

W archive.php spróbować użyć następujących czynności:

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; 

Przez następnych i poprzednich strona odwołuje się używać:

next_posts_link('Older Entries', $wp_query->max_num_pages); 
previous_posts_link('Newer Entries', $wp_query->max_num_pages); 
Powiązane problemy