<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	xmlns:series="http://unfoldingneurons.com/"
	>

<channel>
	<title>Francesco Corsentino .net &#187; Tutorial</title>
	<atom:link href="http://corsentino.net/category/tutorial/feed/" rel="self" type="application/rss+xml" />
	<link>http://corsentino.net</link>
	<description>blogger // writer // student</description>
	<lastBuildDate>Thu, 29 Jul 2010 07:48:01 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Le 5 regole di un buon programmatore</title>
		<link>http://corsentino.net/2010/07/le-5-regole-di-un-buon-programmatore/</link>
		<comments>http://corsentino.net/2010/07/le-5-regole-di-un-buon-programmatore/#comments</comments>
		<pubDate>Thu, 15 Jul 2010 15:08:53 +0000</pubDate>
		<dc:creator>Kiko</dc:creator>
				<category><![CDATA[Tutorial]]></category>
		<category><![CDATA[best-practices]]></category>
		<category><![CDATA[framework]]></category>
		<category><![CDATA[programming]]></category>
		<category><![CDATA[software]]></category>

		<guid isPermaLink="false">http://corsentino.net/?p=920</guid>
		<description><![CDATA[Mai come in questo periodo mi sono trovato a scrivere codice e leggere codice (il mio e quello degli altri). Ho dovuto rimettere mano a vecchio codice prodotto, a piccole librerie create in passato (che a distanza di anni non valuto certo con voti altissimi). Mi sono ritrovato a confrontare un vecchio lavoro con quelli [...]]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 10px;"><a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fcorsentino.net%2F2010%2F07%2Fle-5-regole-di-un-buon-programmatore%2F"><img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fcorsentino.net%2F2010%2F07%2Fle-5-regole-di-un-buon-programmatore%2F" height="61" width="51" /></a></div><p>Mai come in questo periodo mi sono trovato a scrivere codice e leggere codice (il mio e quello degli altri). Ho dovuto rimettere mano a vecchio codice prodotto, a piccole librerie create in passato (che a distanza di anni non valuto certo con voti altissimi). Mi sono ritrovato a confrontare un vecchio lavoro con quelli attuali, notando incredibili differenze in fatto di qualità del codice, prima ancora delle qualità delle conosocenze. A quel punto è stato facile derivare un paio di fattori chiave che potrebbero distinguere un buon programmatore da un ottimo programmatore, in attesa di capire la categoria nella quale sistemarmi. Sperando di poter regalare al lettore qualche utile consiglio.</p>
<h2>1. Documentare il codice</h2>
<p><a href="http://corsentino.net/wp-content/uploads/comment.jpg"><img class="alignleft size-medium wp-image-925" title="Documentare il codice" src="http://corsentino.net/wp-content/uploads/comment-300x75.jpg" alt="" width="300" height="75" /></a>Scrivere chiari e precisi commenti è impagabile. Permettono di <strong>leggere più facilmente il codice</strong> senza impazzire dietro ad algoritmi o funzioni o parametri conditi di mistero e di cui se ne disconosce la funzione, il significato e il motivo della loro esistenza. Gli stessi commenti devono essere scritti con coscienza, senza badare troppo alla forma magari, ma senza rinunciare a una certa formalità e un certo stile. Bisogna cercare di essere sempre chiari nelle spiegazioni e di non dare nulla per scontato. Prolissi e completi quando è rischiesto dal contesto, concisi quando è inutile divagare o spiegare cose ovvie e facilmente deducibili. Quando a distanza di tempo ci toccherà rimettere mano a un codice che abbiamo scritto di nostro pugno e di cui non ricordiamo molto, una veloce lettura dei commenti ci permette in pochi secondi di ritornare nella dimensione di quel progetto. Una buona documentazione del codice permette un alto livello di <em><a href="http://en.wikipedia.org/wiki/Maintainability" target="_blank">maintainability</a> </em>dello stesso. Nel caso, poi, ci fosse la necessità di collaborare con altri sviluppatori, il non dover chiedere costantemente chiarimenti su una funzione o un parametro permette di velocizzare il lavoro e migliorarlo sotto tutti i punti di vista, in quanto troveremo tutte le risposte dentro i commenti.</p>
<p>E&#8217; possibile, in ultimo, estrarre dal codice sorgente i commenti formattati in un certo modo e produrre così un manuale per gli sviluppatori o una <em>reference</em>. Tutto in modo automatico ed evitando un doppio e tedioso lavoro. Uno strumento molto apprezzato, in tale contesto, è <a href="http://www.phpdoc.org/" target="_blank">phpDoc</a> (facile immagine per quale linguaggio).</p>
<p>Ultima raccomandazione, che a molti potrà suonare <em>strana</em> o esagerata. Se pensate che il vostro codice possa essere degno del panorama internazionale, cioè di un pubblico non solo italiano, allora è bene cominciare a prendere confidenza con l&#8217;inglese-scritto e commentare il codice in questa lingua.</p>
<h2>2. Scrivere buon codice</h2>
<p>E&#8217; difficile in poche righe capire cosa significa &#8220;scrivere buon codice&#8221;, ma ci provo. Fra l&#8217;altro è una delle prime cose che uno studente si sente dire da un buon professore. Il pieno significato di un simile avvertimento dal sapore di consiglio lo si coglie solo quando si lavora seriamente a qualche progetto. O quando ci si confronterà con altri sviluppatori. Scrivere buon codice significa <strong>scrivere i nomi delle funzioni scegliendo i migliori termini</strong>, i più espressivi in assoluto. Conviene eliminare inutili abbreviazioni, solo per risparmiare qualche carattere e guadagnare qualche decimo di secondo in più sulla digitazione. Significa scrivere un codice la cui sola lettura è bastevole per capirne l&#8217;implementazione. Generalmente una funzione chilometrica è sintomo di scarsa progettazione del codice, il che non vuol dire che poi le cose non funzionano. La migliore palestra, in tal senso, è la lettura di codice dei migliori programmatori che potete trovare in rete e l&#8217;analisi di progetti dal codice aperto.</p>
<h2>3. Framework e librerie</h2>
<p><a href="http://corsentino.net/wp-content/uploads/framework.jpg"><img class="alignright size-medium wp-image-926" title="Quale framework?" src="http://corsentino.net/wp-content/uploads/framework-300x199.jpg" alt="" width="300" height="199" /></a><strong>Spesso ci si trova a riscrivere del codice che in realtà esiste già</strong> e probabilmente risulta più completo del nostro, oltre che più efficace. Pertanto prima di buttarsi a capofitto nella scrittura di nuove classi occorre capire cosa offre Internet. Esistono diversi utilissimi siti dove poter trovare del buon codice (citiamo su tutti <a href="http://sourceforge.net/" target="_blank">Sourceforge</a>). Ed esiste Google per cercare eventuali librerie già pronte per essere usate nei nostri progetti. Se nulla ci soddisfa allora non resta che scrivere quanto abbiamo di bisogno. Se abbiamo intrapreso quest&#8217;ultima strada è buona cosa pensare non al progetto in sé, quanto piuttosto ai problemi generali che intendiamo risolvere. E&#8217; questo infatti il caso migliore per pensare a una libreria riutilizzabile pure in altri progetti. Se poi siamo soliti lavorare su applicazioni che in qualche modo hanno molte somiglianze fra di loro, beh allora conviene pensare a qualche <a href="http://corsentino.net/tag/framework/">framework</a>. Generalmente una grande società di software ne progetta uno e provvede a usarlo nei vari lavori. Uno sviluppatore indipendente può lanciare a se stesso la stuzzicante sfida di costruirne uno nuovo, o studiare per bene un framework esistente.</p>
<p>In tal senso <strong>un buon framework</strong> (<a href="http://rubyonrails.org/" target="_blank">Rails</a> per i programmatori Ruby, <a href="http://framework.zend.com/" target="_blank">Zend</a> o <a href="http://www.symfony-project.org/" target="_blank">Symfony</a> per i programmatori <a href="http://corsentino.net/tag/php/">PHP</a>, <a href="http://www.djangoproject.com/" target="_blank">Django</a> per gli appassionati di <a href="http://corsentino.net/tag/python/">Python</a>) <strong>potrebbe essere una ottima base per sviluppare una grande applicazione</strong>. Ma occorre valutare per bene ogni fattore. Spesso un framework rischia di appesantire lo sviluppo e se non riusciamo ad ottimizzarne la configurazione rischiamo pure di ottenere un prodotto dalle scarse performance. E&#8217; opportuno inoltre non focalizzarsi soltanto su un prodotto, ma studiarne più di uno per capire realmente benefici e svantaggi di ognuno di loro. A quel punto, e solo a quel punto, conviene sceglierne uno e provare a padroneggiarlo al meglio. In altre parole: non limitarsi a leggere qualche articolo su Internet (raramente ho scovato delle analisi pienamente oggettive sui software e sui framework), ma sperimentare le soluzioni. Quindi specializzarsi su un prodotto.</p>
<h2>4. Standard e best practices</h2>
<p>I design pattern vanno studiati, compresi e quindi usati. Spesso ci si accorge che bravi programmatori li disconoscono ed è un male. Pattern quali <a href="http://it.wikipedia.org/wiki/Model-View-Controller" target="_blank">MVC</a> offrono una potenza incredibile. E numerosi altri pattern offrono una soluzione ottimale a ricorrenti problemi per quanto riguarda la programmazione (che è poi la definizione di <a href="http://en.wikipedia.org/wiki/Design_pattern_(computer_science)" target="_blank">Design Pattern</a>).</p>
<p>Quando parliamo di <em>best practices</em> ci riferiamo a delle esperienze che altri hanno già maturato in qualche settore professionale e nelle quali hanno raggiunto ottimi risultati. Potete pensare a delle regole generali, più o meno formalizzate, o a degli esempi opportunamente descritti e commentati. Per quanto mi riguarda mi sono stati utilissimi i libri di ingegneria del software che ho letto e sui quali ho trovato diversi riferimenti a ulteriori libri e articoli. Potete recuperare su internet diverse interviste a eminenti sviluppatori che raccontano le loro esperienze e le loro idee.</p>
<h2>5. Pensare. Poi scrivere codice</h2>
<p><strong><a href="http://corsentino.net/wp-content/uploads/thinking.jpg"><img class="alignleft size-medium wp-image-927" title="Pensare pensare pensare" src="http://corsentino.net/wp-content/uploads/thinking-234x300.jpg" alt="" width="234" height="300" /></a>Lontano da una schermo e una tastiera si riesce meglio a programmare</strong>. Sembra un paradosso, invece è la pura realtà. Provate a pensare alla vostra architettura fuori da una finestra di Mac o di Windows o di Linux. Fogli di carta, penna, matita e idee. Non è tempo sprecato, anzi tutto il contrario. Uno schermo con icone e testo, una tastiera e un mouse possono risultare degli elementi destabilizzanti e di distrazione. Si è tentati di scrivere subito del codice funzionante, salvo poi scoprire che una funzione poteva essere scritta meglio, o un insieme di classi poteva essere progettato in modo più intelligente. A quel punto tornare indietro è complicato. <a href="http://en.wikipedia.org/wiki/Code_refactoring" target="_blank">Rifattorizzare</a> equivale a partire da zero (e a un livello iniziale non si parla certo di <em>refactoring</em>) e, si realizzerà con estremo rammarico, di aver buttato via preziose ore di lavoro.</p>
<p><strong>Ponderare bene le scelte</strong>: tracciare diagrammi, appuntare note e idee, provare a scrivere un piano di sviluppo. Anche senza badare alla forma, una sorta di <a href="http://www.kikoweb.org/blog/100/brainstorming-what-is-it" target="_blank">brainstorming</a> solitario. Fate una lista dei problemi da risolvere, delle possibili soluzioni cui avete pensato e, dopo una pausa lontano da tutti e tutto, rileggete con attenzione quanto avete scritto e cercate di capire se è l&#8217;ora di mettersi a scrivere codice o conviene dedicare ancora qualche minuto a questa meditazione pre-sviluppo.</p>
<p>Non esiste un libro delle soluzioni in informatica. Esiste però una quantità smisurata di <em>handle</em> di soluzioni. Queste <em>maniglie</em> altro non sono che il codice e gli applicativi che altri programmatori hanno già realizzato e rilasciato. <strong>Dare uno sguardo all&#8217;interno del codice scritto da terzi</strong> (e dovete ovviamente scegliere i migliori terzi, perché conviene imparare soltanto dai migliori) si rivelerà presto preziosa lettura e fonte di soluzioni. Il che non vuol dire che dovete copiare, ma certamente ispirarvi. O, più umilmente, imparare.</p>
]]></content:encoded>
			<wfw:commentRss>http://corsentino.net/2010/07/le-5-regole-di-un-buon-programmatore/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Related posts senza plugin? Si può</title>
		<link>http://corsentino.net/2010/01/related-posts-senza-plugin-si-puo/</link>
		<comments>http://corsentino.net/2010/01/related-posts-senza-plugin-si-puo/#comments</comments>
		<pubDate>Mon, 18 Jan 2010 06:30:58 +0000</pubDate>
		<dc:creator>Kiko</dc:creator>
				<category><![CDATA[Featured]]></category>
		<category><![CDATA[Tutorial]]></category>
		<category><![CDATA[Web Design]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[tricks]]></category>
		<category><![CDATA[wordpress]]></category>

		<guid isPermaLink="false">http://corsentino.net/?p=595</guid>
		<description><![CDATA[Per certi compiti usare un plugin è una forzatura e rende il tutto leggermente più lento. Allora si può ottenere una lista di articoli related senza usare plugin? Nell'articolo la risposta e il codice da utilizzare nei vostri temi.]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 10px;"><a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fcorsentino.net%2F2010%2F01%2Frelated-posts-senza-plugin-si-puo%2F"><img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fcorsentino.net%2F2010%2F01%2Frelated-posts-senza-plugin-si-puo%2F" height="61" width="51" /></a></div><p>Uno degli strumenti importanti per raccogliere traffico interno al blog è mostrare gli articoli collegati a quello che il visitatore ha appena letto. In WordPress esistono molti plugin che permettono di ottenere un simile risultato. Ne esistono veramente diversi: qualcuno presenta buone caratteristiche, qualcuno ottime funzionalità lato amministrazione. Ma può non essere la soluzione migliore.</p>
<p>Per certi compiti usare un plugin è una forzatura e rende il tutto leggermente più lento, in quanto il l&#8217;<em>engine</em> di WordPress deve provvedere a caricare ed eseguire tutti i plugin. Meglio eseguire codice scritto apposta. Il file <em>functions.php</em> potrebbe essere il posto ideale per piazzare lì alcune utili funzioni da utilizzare in lungo e in largo nel nostro tema.</p>
<p>Rispondiamo allora, in questo piccolo articolo, alla domanda del titolo: <strong>si può ottenere una lista di articoli <em>related</em> senza usare plugin?</strong> Certo. Nel mio blog uso il seguente codice.</p>
<p>L&#8217;idea è di partire dalle categorie in cui è inserito il post. Quindi estrarre da ogni categoria gli articoli collegati. La mia soluzione prevede il recupero a ritroso degli articoli più recenti, questo per evitare di doppiare gli articoli più letti che mostro in un apposito widget (test che ho effettuato!), a meno di casuale coincidenza. Ora gli approcci sono due:</p>
<ol>
<li>inserire il codice all&#8217;interno del vostro file <em>functions.php</em> e richiamarlo nel punto esatto del vostro tema;</li>
<li>inserire il codice all&#8217;interno del file <em>single.php</em>.</li>
</ol>
<p>L&#8217;opzione numero 2 mi è sembrata nel mio caso la più logica. Ecco il codice:</p>
<pre class="brush:php">$_cats = get_the_category($post-&gt;ID);
if ($_cats) {
	$_catid = array();
	foreach($_cats as $_item) $_catid[] = $_item-&gt;term_id;

	$args=array(
		'showposts'=&gt;5,
		'category__in' =&gt; $_catid,
		'post__not_in' =&gt; array($post-&gt;ID),
		'caller_get_posts'=&gt;1
	);
	$_relposts_query = new wp_query($args);
	if( $_relposts_query-&gt;have_posts() ) {
		echo '&lt;h3&gt;Related Posts&lt;/h3&gt;&lt;ul&gt;';
		while ($_relposts_query-&gt;have_posts()) {
			$_relposts_query-&gt;the_post();
		?&gt;
			&lt;li&gt;&lt;?php if(has_post_thumbnail()) echo get_the_post_thumbnail(get_the_id(), array(50,50)); ?&gt;&lt;a href="&lt;?php the_permalink() ?&gt;" rel="bookmark" title="Link to &lt;?php the_title_attribute(); ?&gt;"&gt;&lt;?php the_title(); ?&gt;&lt;/a&gt;&lt;/li&gt;
		&lt;?php
		}
		echo "&lt;/ul&gt;";
	}
}</pre>
<p>Come potete notare uso la nuova funzione di WordPress relativa ai thumbnails. Per modificare il numero di articoli da mostrare settate il parametro <em>showposts</em> secondo vostre necessità (riferimento <a href="http://codex.wordpress.org/Function_Reference/WP_Query" target="_blank">wp_query</a>). Per il resto è davvero tutto molto semplice e risulterà chiaro a chi ha un pò d&#8217;esperienza con i temi di WordPress.</p>
<p><em>P.S.</em></p>
<p>Simile risultato può essere ottenuto giocando con i tag. Anzicchè prendere a riferimento le categorie, come nel mio caso, è possibile recuperare i tag con cui è stato postato un articolo e da lì recuperare i <em>related posts</em>. In tal caso date un&#8217;occhiata <a href="http://www.wprecipes.com/how-to-show-related-posts-without-a-plugin" target="_blank">all&#8217;idea</a> di <a href="http://www.catswhocode.com/" target="_blank">Jean Baptiste Jung</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://corsentino.net/2010/01/related-posts-senza-plugin-si-puo/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Far fare la pace tra il nostro feed e FeedBurner</title>
		<link>http://corsentino.net/2009/10/far-fare-la-pace-tra-il-nostro-feed-e-feedburner/</link>
		<comments>http://corsentino.net/2009/10/far-fare-la-pace-tra-il-nostro-feed-e-feedburner/#comments</comments>
		<pubDate>Fri, 09 Oct 2009 20:12:46 +0000</pubDate>
		<dc:creator>Kiko</dc:creator>
				<category><![CDATA[Tutorial]]></category>
		<category><![CDATA[feed]]></category>
		<category><![CDATA[feedburner]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[rss]]></category>
		<category><![CDATA[trick]]></category>
		<category><![CDATA[wordpress]]></category>

		<guid isPermaLink="false">http://corsentino.net/?p=90</guid>
		<description><![CDATA[Vi è mai capitato di avere problemi con FeedBurner? O avete mai validato il vostro notiziario RSS? Se utilizzate WordPress tale situazione potrebbe improvvisamente materializzarsi e rovinarvi la giornata. Ecco la soluzione.]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 10px;"><a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fcorsentino.net%2F2009%2F10%2Ffar-fare-la-pace-tra-il-nostro-feed-e-feedburner%2F"><img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fcorsentino.net%2F2009%2F10%2Ffar-fare-la-pace-tra-il-nostro-feed-e-feedburner%2F" height="61" width="51" /></a></div><p>Nemmeno il tempo di gustarsi il lancio di questo nuovo blog che mi ritrovo col primo indisponente problema. Agganciando a FeedBurner il mio flusso RSS noto immediatamente che Google mi rigetta indietro il link. Il sorgente non è ok, ci sono problemi sulla validazione del formato. Molto strano visto che l&#8217;installazione è praticamente nuova e non ho messo mano al codice del <em>core</em> di WordPress. Con molta pazienza leggo i risultati della validazione, meglio gli errori. Problema banale e riassunto in una semplicissima e maledetta frase in inglese:</p>
<blockquote><p>XML Parsing Error: XML or text declaration not at start of entity</p></blockquote>
<p>In effetti aprendo il flusso con un programma esterno danno noia a me al validatore le righe bianche, quindi vuote, all&#8217;inizio del notiziario. Cioè è proprio WordPress a creare casino e il motivo è che gli ingegneri della piattaforma hanno leggermente complicato la creazione dell&#8217;RSS. Qual è la soluzione, allora?</p>
<p>Apriamo con gentilezza il file <strong><em>feed-rss2.php</em></strong> che si trova nella directory <strong><em>wp-includes</em></strong>, partendo dalla root della nostra installazione di WordPress. Nelle primissime righe troviamo le due istruzioni seguenti:</p>
<pre class="brush:php">header('Content-Type: text/xml; charset=' . get_option('blog_charset'), true);
$more = 1;</pre>
<p>La loro funzione è importante ai fini della creazione dell&#8217;RSS. Immediatamente dopo questa coppia di istruzioni inseriamo il seguente trick che sistema tutte le cose:</p>
<pre class="brush:php">$out = ob_get_contents();
$out = str_replace(array("\n", "\r", "\t", " "), "", $input);
ob_end_clean();</pre>
<p>In particolare prende i caratteri bianchi (sostanzialmente i caratteri di tabulazione che vedete inseriti nell&#8217;array-parametro) iniziali e li pulisce, così come da formato XML. Salviamo tutto quanto e il nostro formato sarà ora valido.</p>
<p>La stessa identica operazione dovremmo farla sul file <strong><em>feed-rss2-comments.php</em></strong> che si trova sempre nella directory cui prima accennavo. E se utilizzate gli altri formati il consiglio è quello di ripetere la stessa operazione per i file <strong><em>feed-rdf.php</em></strong>, <strong><em>feed-rss.php</em></strong>, f<em><strong>eed-atom.php</strong></em>, f<strong><em>eed-atom-comments.php</em></strong>.</p>
<p>Fatto ciò <span style="text-decoration: underline;">FeedBurner</span> non ci distuberà più e noi potremo iniziare a raccogliere statistiche utili per far crescere il nostro blog.</p>
]]></content:encoded>
			<wfw:commentRss>http://corsentino.net/2009/10/far-fare-la-pace-tra-il-nostro-feed-e-feedburner/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Come mostrare i numeri di WordPress</title>
		<link>http://corsentino.net/2009/10/come-mostrare-i-numeri-di-wordpress/</link>
		<comments>http://corsentino.net/2009/10/come-mostrare-i-numeri-di-wordpress/#comments</comments>
		<pubDate>Fri, 09 Oct 2009 17:19:54 +0000</pubDate>
		<dc:creator>Kiko</dc:creator>
				<category><![CDATA[Tutorial]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[wordpress]]></category>

		<guid isPermaLink="false">http://corsentino.net/?p=74</guid>
		<description><![CDATA[Come si fa a recuperare dal nostro database il numero di post pubblicati? E il numero di categorie, di tag e di commenti? Una semplice soluzione per tutte queste domande.]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 10px;"><a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fcorsentino.net%2F2009%2F10%2Fcome-mostrare-i-numeri-di-wordpress%2F"><img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fcorsentino.net%2F2009%2F10%2Fcome-mostrare-i-numeri-di-wordpress%2F" height="61" width="51" /></a></div><p>Durante lo sviluppo di un tema per WordPress capita sovente di aver bisogno di alcune piccole utili statistiche. Ad esempio il numero totale di post pubblicati. Oppure quante categorie l&#8217;autore sta usando. E ancora quanti tag, quanti commenti. Molti propongono come soluzione il ricorso a query. Dobbiamo in qualche modo eseguire il collegamento al database e lanciare un&#8217;interrogazione. Esercizio per nulla semplice, ma complicazione del tutto inutile. Perchè non ricorrere a funzioni già preconfezionate?</p>
<div class="infobox">
<p>Un piccolo esempio d&#8217;uso delle funzioni sotto proposte lo potete vedere qui a fianco, nella sidebar ed esattamente nella sezione di ricerca.</p>
</div>
<p>WordPress mette a disposizione dello sviluppatore il set di funzioni che hanno in comune il prefisso <code>wp_count_</code>. Il set che a noi interessa è allora il seguente:</p>
<ul>
<li><code>wp_count_posts('posts')</code></li>
<li><code>wp_count_terms('category')</code></li>
<li><code>wp_count_terms('post_tag')</code></li>
<li><code>get_comment_count()</code></li>
</ul>
<h2>Trovare il numero totale degli articoli</h2>
<p>Supponiamo allora di voler mostrare il numero totale degli articoli pubblicati. Per comodità vi consiglio di creare delle piccole funzioni che poi possiamo richiamare liberamente e comodamente in ogni punto dei nostri temi. Il posto migliore dove riunire queste funzioni è il file <code>functions.php</code>. Ricorriamo allora ad un codice simile:</p>
<pre class="brush:php">	function get_total_posts() {

		$___posts = wp_count_posts('post');            

		return $___posts-&gt;publish;

	}</pre>
<p>Commentiamo quel poco che c&#8217;è da commentare. Secondo una mia personalissima convenzione amo chiamare tutti gli oggetti che uso in modo indiscriminato anteponendo al loro nome tre caratteri di undescore. Facili da cercare, facili da riconoscere proprio visivamente. La funzione ci restituisce un oggetto dal quale preleviamo il numero di post effettivamente pubblicati, quindi scartando i draft. In realtà il parametro post potrebbe essere anche omesso, in quanto parametro di default, ma per leggibilità io preferisco sempre inserirlo.</p>
<p>Se vogliamo viceversa fare il conteggio degli articoli in bozza allora modifichiamo leggermente il codice:</p>
<pre class="brush:php">	function get_total_drafts() {

		$___posts = wp_count_posts('post');            

		return $___posts-&gt;draft;

	}</pre>
<p>In questo modo è possibile richiamare le due funzioni come segue:</p>
<pre class="brush:php">        echo get_total_posts();
        echo get_total_drafts();</pre>
<h2>Trovare il numero di categorie e il numero di tag</h2>
<p>In modo del tutto analogo presentiamo brevemente il codice per recuperare il numero delle categorie e il numero dei tag:</p>
<pre class="brush:php">	function get_total_categories() {

		$___cats  = wp_count_terms('category');

		return $___cats;	

	}

	function get_total_tags() {

		$___tags  = wp_count_terms('post_tag');

		return $___tags;		

	}</pre>
<p>La chiamata delle due funzioni avviene nel modo canonico. In più vi propongo una semplice funzione che ho scritto per conoscere il numero di articoli pubblicati in una determinata categoria:</p>
<pre class="brush:php">	function get_posts_in_category($cat) {

		$___catid = get_cat_id($cat);

		$___catobj = get_category($___catid);

		return $___catobj-&gt;category_count;

	}</pre>
<p>Da notare che il parametro che passate alla funzione è esattamente il nome della categoria di cui volete conoscere il conteggio degli articoli, senza perciò passare dal recupero dell&#8217;ID.</p>
<h2>Trovare il numero di commenti</h2>
<p>Ultima funzione. Recuperiamo il numero di commenti registrati nel nostro blog:</p>
<pre class="brush:php">	function get_total_comments() {

		$___comm  = get_comment_count();                                             

		return $___comm['approved'];

	}</pre>
<p>Dall&#8217;array possiamo estrarre i seguenti valori:</p>
<ul>
<li><code>awaiting_moderation</code> per i commenti in attesa di moderazione;</li>
<li><code>spam</code> per il totale dei commenti spam;</li>
<li><code>tot</code> per recuperare il numero totale dei commenti (informazione sulla cui utilità ho qualche dubbio).</li>
</ul>
<p>Per consultare la documentazione ufficiale vi rimando al seguente <a href="http://codex.wordpress.org/Function_Reference/">link</a>. Suggerimenti per migliorare il codice o per velocizzarlo? Alternative alle funzioni proposte?</p>
]]></content:encoded>
			<wfw:commentRss>http://corsentino.net/2009/10/come-mostrare-i-numeri-di-wordpress/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
