Paginazine su post type

Wordpress Tips

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 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.

in your opinion

Got something to say? Like it? No?

leave a message

leave one