2011-02-09 9 views
6

Hey. Sto usando un tipo di messaggio personalizzato in wordpress. Mi iscrivo questo tipo personalizzato post come questo:Categorie di tipi di post personalizzati 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'); 

Nel tema (il modello di anello) Mi piace combinare i messaggi e il mio tipo di inserimento personalizzato, per questo sto usando query_posts() con questi parametri:

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

Questo funziona finora. Ma ho avuto problemi con le pagine di categoria e tag. Se chiamo la prima pagina tutto va bene e posso impaginare le pagine ottenendo i risultati corretti.

E, se chiamo un URL paginato, ad es./category/mycat/page/2 a 404 viene lanciato. Ma sicuramente ci dovrebbero essere post. Non importa se ci sono post di tipo personalizzato o normali nella categoria. Suppongo che i miei parametri per query_posts() non siano corretti, ma non lo so ...

Sembra che $ wp_query-> max_num_pages abbia il valore sbagliato. Ma perché? Registro le tassonomie (mi piace usare categorie e tag per i miei tipi di post personalizzati) correttamente?

Avete qualche idea su cosa fare? Molte grazie!

risposta

2

ho appena incontrato l'esatto stesso problema e non è riuscito a trovare la soluzione da nessuna parte! Gli internet sono pieni di risorse sull'argomento, ma nessuno ha fornito la risposta corretta al problema.

Ecco la risposta corretta per chiunque cerchi. Inserisci il codice seguente in functions.php nella directory principale del tuo tema.

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

Tutti i crediti vanno a Mike che ha postato questo su Wordpress.com. Saluti!

+0

Avevo solo il tempo di darti questa forma di codice dai miei appunti. Molto bene. pre_get_posts è difficile da combattere però! – BenRacicot

+0

Questo lavoro per me ha lo stesso problema con CPT, grazie – MrRoman

0

Assicurati di aggiungere questo:

'paged' => get_query_var('paged') 

ai vostri $ args e dovrebbe accettare la paginazione a posto.

Più here

+0

Ehi David. Grazie, ma come puoi vedere, passo l'argomento paginato a query_posts(). O c'è qualcosa di sbagliato in questo? – Status4

+0

Whoops, mio ​​male. Ti suggerisco di fare un 'print_r ($ args);' per vedere esattamente cosa viene inviato - questo potrebbe essere il tuo primo indizio sul problema. Un'altra cosa: gli showposts sono depracati, prova invece a usare posts_per_page. Infine, potresti provare a impostare in modo esplicito "nopaging" => false – David

+0

I'll dargli un'occhiata, grazie ancora – Status4

0

Nel archive.php provare a utilizzare il seguente:

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; 

Per i successivi e precedenti link della pagina che uso:

next_posts_link('Older Entries', $wp_query->max_num_pages); 
previous_posts_link('Newer Entries', $wp_query->max_num_pages);