catalog-page-wordpress-plugin
Ciao belli…oggi vi presento un gradito ospite che scriverà per WPStyle, si tratta di Vincenzo La Rosa, studente, programmatore, blogger di Vincenzolarosa.it e creatore di Catalog Page, ottimo plugin per la gestione dei Custom Post nel vostro blog…buona lettura!

Catalog Page Plugin

Ciao a tutti da Vincenzo La Rosa, è ormai da una settimana circa che ho pubblicato il mio primo plugin Catalog Page, sempre in continua e costantemente evoluzione, grazie al quale potrai gestire al meglio il tuo catalogo prodotti e servizi.
Non voglio addentrarmi ancora di piu nella presentazione del plugin, in quanto vorrei parlare di come l’ho realizzato, e di come ho superato il problema della paginazione dei custom post (perchè almeno per il momento mi baso su questa meravigliosa opportunità che offre WordPress 3).
Non faccio la spiegazione riga per riga del sorgente in quanto non è lo scopo di questo articolo..
Puoi vedere ed avere informazioni piu dettagliate sui custom post leggendo questi due articoli Primo e Secondo.
Di seguito il codice che ho usato per ottenere la lista di tutti i servizi (da qui in avanti continuerò a chiamare servizi i miei custom post) memorizzati nel database

$paged = (get_query_var('paged')) ? get_query_var('paged') : 1;
$args=array('post_type'=>'servizi','posts_per_page'=>$catalog_page_ndispaly,'paged'=>$paged);
$loop=new WP_Query($args);

La prima riga di codice

$paged = (get_query_var('paged')) ? get_query_var('paged') : 1;

Ci permette di capire quante pagine sono servite per mostrare tutti i nostri servizi, ovviamente alla prima “esecuzione” della pagina esso sarà inizializzato ad 1.

La seconda riga di codice

$args=array('post_type'=>'servizi/*tipo di custom post modificabile*/','posts_per_page'=>$catalog_page_ndispaly/*numero di servizi per ogni pagina*/,'paged'=>$paged/*pagina corrente*/);

Ci permette di scegliere il tipo di custom post, il numero di servizi visualizzabili per ogni pagina, ed il numero di pagina corrente.

Fatto ciò non ci resta altro che creare una nuova query per ottenere la lista dei nostri servizi ed usiamo la terza riga di codice

$loop=new WP_Query($args);

Tralascio la parte della visualizzazione dei servizi e parliamo subito di come farne la paginazione.
Per fare ciò usiamo il seguente codice

while ($loop->have_posts()):$loop->the_post();
/*codice per mostrare i custom post */
endwhile;
/*Codice per la paginazzione dei custom post*/
global $wp_rewrite;
$pages = '';
$max = $loop->max_num_pages;
if (!$current = get_query_var('paged')) $current = 1;
$a['base'] = ($wp_rewrite->using_permalinks())?user_trailingslashit(trailingslashit(remove_query_arg('s',get_pagenum_link(1))).'page/%#%/', 'paged' ) : @add_query_arg('paged','%#%');
if( !empty($loop->query_vars['s']) ) $a['add_args'] = array( 's' => get_query_var( 's' ) );
$a['total'] = $max;
$a['current'] = $current;
$total = 1; //1 - display the text "Page N of N", 0 - not display
$a['mid_size'] = 5; //how many links to show on the left and right of the current
$a['end_size'] = 1; //how many links to show in the beginning and end
$a['prev_text'] = '« '.__('Indietro','catalog_page'); //text of the "Previous page" link
$a['next_text'] = __('Avanti','catalog_page').' »'; //text of the "Next page" link
if ($max > 1) $text.= '<div class="navigation">';
if ($total == 1 && $max > 1) $pages = '<span class="pages">'.__('Pagina','catalog_page'). $current .' '.__('di','catalog_page').' '.$max.'</span>'."\r\n";
$text.= $pages."<br />".paginate_links($a);
if ($max > 1) $text.='</div>';

Non riporterò, ne spiegherò riga per riga del codice in quanto è gia stato spiegato in questo articolo,
analizzerò però le parti principali che hanno permesso la risoluzione del problema.
A differenza della funzione kode_pagenavi ho sostituito questa riga

global $wp_query, $paged;

con quest’altra

global $wp_rewrite;

Grazie ad essa possiamo creare, evitando tra l’altro un errore 404, le pagine successive per esempio tuosito.it/servizi/page/2,
questa variabile è usata nella riga 9 di seguito riportata

$a['base'] = ($wp_rewrite->using_permalinks())?user_trailingslashit(trailingslashit(remove_query_arg('s',get_pagenum_link(1))).'page/*page è sostituibile con qualsiasi altra parola per esempio potresti scriverla in italiano*//%#%/', 'paged' ) : @add_query_arg('paged','%#%');

Questa però non è l’unica differenza infatti se noti al posto di $wp_query ho usato la varibile $loop usata in precendenza per ottenere la lista di tutti i servizi memorizzati nel database.
Di seguito la parte “modificabile” del codice

$a['prev_text'] = '&laquo; '.__('Indietro','catalog_page'); //text of the "Previous page" link
$a['next_text'] = __('Avanti','catalog_page').' &raquo;'; //text of the "Next page" link
if ($max > 1) $text.= '<div class="navigation">';
if ($total == 1 && $max > 1) $pages = '<span class="pages">'.__('Pagina','catalog_page'). $current .' '.__('di','catalog_page').' '.$max.'</span>'."\r\n";
$text.= $pages."<br />".paginate_links($a);
if ($max > 1) $text.='</div>';

Se vuoi puoi modificare questa parte del codice in modo da rendere la tua barra di navigazione più “appetibile” a livello grafico,
la cosa che devi assolutamente evitare di modificare sono i nomi delle variabili, in quanto il tutto potrebbe non funzionare più correttamente.

Quasi quasi dimenticavo se vuoi puoi provare il plugin Catalog Page lo trovi in questa pagina http://wordpress.org/extend/plugins/catalog-page

Se volete visitare il blog di Vincenzo: Vincenzolarosa.it – Studente, Programmatore, WebMaster e Blogger