Con wordpress 3 è stata aggiunta una una funzionalità molto interessante, cioè i post_type. Ma purtroppo sembra che creiamo una pagina contenete la lista di post di uno specifico post_type (usando query_posts) c’é il piccolo problema che la paginazione standard non funziona. (le pagine successive daranno sempre il 404)
Su internet ho trovato tante possibili soluzioni, ma una versione semplice e veloce ve la propongo qui sotto.
Per prima cosa aprite il file functions.php del vostro template (o createlo se non l’avete) e inserite dentro il seguente codice.
functions.php
function clearFromQueryString($querystring, $remove) {
if($querystring){
if(preg_match("/&/i",$querystring)){
$explo = explode("&", $querystring);
}else{
$explo=array($querystring);
}
$newstring = "";
foreach ($explo as $array) {
if($array){
list ($key, $value) = explode("=", $array);
if (!in_array($key, $remove)) {
$append = ($newstring == "")? "" : "&";
$append .= $key . "=" . $value;
$newstring .= $appen;
}
}
}
}
return $newstring;
}
function pagination( $query, $baseURL ) {
$page = $query->query_vars["paged"];
if ( !$page ) $page = 1;
$qs = $_SERVER["QUERY_STRING"];
if ( $query->found_posts > $query->query_vars["posts_per_page"] ) {
if ( $page > 1 ) {
echo '<a href="'.$baseURL.'?page='.($page-1).(($qs)?'&'.$qs:"").">« precedenti</a>';
}
if ( $page < $query->max_num_pages ) {
echo '<a href="'.$baseURL.'?page='.($page+1).(($qs)?'&'.$qs:"").">successivi »</a>';
}
}
}```
Cosi creeremo un paginazione indipendente. Questa paginazione **deve** essere diversa da quella standard di wordpress, altrimento non funzionerà. Personalizzate la funzione pagination per avere la paginazione che più vi aggrada.
Proseguiamo con il codice della pagina. Ricordatevi **di dare alla pagina lo stesso permalink del post_type** (nel caso di questo esempio, *news*). Quindi inseriamo nella pagina il codice per effettuare la query. Naturalmente sotto andrà il [Loop](http://codex.wordpress.org/The_Loop) per i post, altrimenti non è che serve a molto quello che stiamo facendo. Gli argomenti passati a query_post sono un esempio, ma necessariamente dovete aggiungere paged e post_type.
### codice della pagina
$paged = (get_query_var('page')) ? get_query_var('page') : 1;
$args= array(
'posts_per_page' => 10,
'post_type' => 'news',
'paged' => $paged
);
$recent = query_posts($args);```
Al di fuori del loop nella pagina aggiungiamo la funzione di paginazione.
paginazione nella pagina
<?php pagination( $wp_query, get_bloginfo( 'wpurl' )."/".$args["post_type"]."/" ); ?>
Questo è solo un esempio, ma è questo il principio. Potete estenderla e migliorarla, o attende che venga aggiunta/corretta questo piccola disfunzione di wordpress.