Paginazine su post type

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.