Paginazine su post type

Wordpress Sep 19, 2010

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.

Tags

Great! You've successfully subscribed.
Great! Next, complete checkout for full access.
Welcome back! You've successfully signed in.
Success! Your account is fully activated, you now have access to all content.