<?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/"
	>

<channel>
	<title>Webeing Developer&#039;s Dreams</title>
	<atom:link href="http://www.webeing.net/code/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.webeing.net/code</link>
	<description>by Enrico Corinti</description>
	<lastBuildDate>Wed, 02 May 2012 15:40:56 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.4</generator>
		<item>
		<title>Sviluppo ergo vado al jsDay e phpDay 2012!</title>
		<link>http://www.webeing.net/code/2012/05/02/sviluppo-ergo-vado-al-jsday-e-phpday/</link>
		<comments>http://www.webeing.net/code/2012/05/02/sviluppo-ergo-vado-al-jsday-e-phpday/#comments</comments>
		<pubDate>Wed, 02 May 2012 15:37:05 +0000</pubDate>
		<dc:creator>Enrico Corinti</dc:creator>
				<category><![CDATA[Wordpress]]></category>

		<guid isPermaLink="false">http://www.webeing.net/code/?p=266</guid>
		<description><![CDATA[Tra qualche giorno partiranno due eventi importantissimi: la 9a edizione del phpDay, il più grande  e importante evento italiano, uno dei più importanti in Europa, dedicato al linguaggio di programmazione PHP, che si terrà a Verona, presso l&#8217;hotel San Marco, il &#8230; <a href="http://www.webeing.net/code/2012/05/02/sviluppo-ergo-vado-al-jsday-e-phpday/">Continua a leggere<span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Tra qualche giorno partiranno due eventi importantissimi:</p>
<ul>
<li>la <strong>9a edizione</strong> del <strong>phpDay</strong>, il più grande  e importante evento italiano, <strong>uno dei più importanti in Europa</strong>, dedicato al <strong>linguaggio di programmazione PHP</strong>, che si terrà a Verona, presso l&#8217;hotel San Marco, il 18 e 19 maggio 2012.</li>
<li>la seconda edizione di <strong>jsDay</strong>, conferenza dedicata esclusivamente a <strong>Javascript</strong>, il 16 e il 17 maggio.</li>
</ul>
<h3>PHPDay</h3>
<p><a href="http://www.webeing.net/code/files/2012/05/bg_body.jpeg"><img class="alignleft" title="bg_body" src="http://www.webeing.net/code/files/2012/05/bg_body-300x179.jpg" alt="" width="300" height="179" /></a>Gli argomenti trattati quest&#8217;anno spaziano dalle novità presenti nella nuova versione in sviluppo del linguaggio (la 5.4), casi di successo, qualità del codice ottenibile tramite metodologie di sviluppo (TDD, Continuous Integration, ecc.), best practice, project management, framework e librerie. Quest’anno il tema principale dell’evento sarà il linguaggio stesso.</p>
<p>La cosa &#8220;ghiotta&#8221;: tra i relatori, nientemeno che <strong>Rasmus Lerdorf, creatore del linguaggio</strong> stesso e <strong>Zeev Suraski, sviluppatore</strong> principale <strong>dell’engine Zend</strong> del linguaggio. La lista dei relatori è ricca di nomi noti a livello internazionale: Lorna Mitchell (phpWomen), David Coalier, David Zuelke e i nostrani Enrico Zimuel (svilippatore di Zend Framework 2) e Jacopo Romei. Il programma completo della conferenza è disponibile all’indirizzo <a href="http://2012.phpday.it/schedule">http://2012.phpday.it/schedule</a></p>
<p>L’evento è supportato e sponsorizzato da importanti aziende del settore: <strong>Microsoft</strong>, <strong>Zend</strong>, <strong>Register</strong>, <strong>JetBrains</strong> e <strong>Ideato</strong>.</p>
<p>Nella serata che precede il phpDay, giovedì 16 maggio, Ideato sponsorizzerà, inoltre, <strong>l’hacknight</strong>, una sessione di programmazione nella quale i partecipanti sono invitati a contribuire al progetto stesso correggendo errori o apportando novità.</p>
<p>Le iscrizioni sono aperte, <a href="http://jsday-phpday2012.eventbrite.com/">http</a><a href="http://jsday-phpday2012.eventbrite.com/">://</a><a href="http://jsday-phpday2012.eventbrite.com/">jsday</a><a href="http://jsday-phpday2012.eventbrite.com/">-</a><a href="http://jsday-phpday2012.eventbrite.com/">phpday</a><a href="http://jsday-phpday2012.eventbrite.com/">2012.</a><a href="http://jsday-phpday2012.eventbrite.com/">eventbrite</a><a href="http://jsday-phpday2012.eventbrite.com/">.</a><a href="http://jsday-phpday2012.eventbrite.com/">com</a><a href="http://jsday-phpday2012.eventbrite.com/">/</a>, il programma è visionabile suI sito di rifermento <a href="http://www.phpday.it/">http://www.phpday.it</a> ed è possibile rimanere aggiornati con le ultime novità sia tramite il sito che anche tramite i canali social di Facebook e Twitter: <a href="http://qrurl.it/r/5g">http</a><a href="http://qrurl.it/r/5g">://</a><a href="http://qrurl.it/r/5g">qrurl</a><a href="http://qrurl.it/r/5g">.</a><a href="http://qrurl.it/r/5g">it</a><a href="http://qrurl.it/r/5g">/</a><a href="http://qrurl.it/r/5g">r</a><a href="http://qrurl.it/r/5g">/5</a><a href="http://qrurl.it/r/5g">g</a> e <a href="http://twitter.com/phpday">http</a><a href="http://twitter.com/phpday">://</a><a href="http://twitter.com/phpday">twitter</a><a href="http://twitter.com/phpday">.</a><a href="http://twitter.com/phpday">com</a><a href="http://twitter.com/phpday">/</a><a href="http://twitter.com/phpday">phpday</a></p>
<h3>JsDay</h3>
<p>Il <strong>jsDay</strong> è una conferenza dedicata esclusivamente a <strong>Javascript</strong> che si terrà nei due giorni precedenti.</p>
<p>La grande sopresa di quest’anno è data dalla presenza di <strong>Douglas Crockford</strong>,  senior JavaScript architect presso <a href="http://en.wikipedia.org/wiki/Yahoo!">Yahoo!</a><strong>,</strong> noto a livello mondiale per il suo continuo e costante impegno con Javascript: sia nello sviluppo del linguaggio stesso che nella scrittura di strumenti (JSLint), rendendo celebre e popolare il formato Json, nonché autore di importanti libri (ad esempio “<em>Javascript the good parts</em>”).</p>
<p>Oltre a Douglas Crockford saranno presenti Mark Boas (jPlayer/Happyworm), Greg Schechter (<strong>YouTube</strong>), Christopher Rhodes (<strong>Google</strong>), Brandon Keepers (GitHub), Nuno Job (Nodejitsu) e tanti altri. Gli argomenti esposti spaziano dall’utilizzo di librerie largamente diffuse come Jquery, passando da quelle emergenti come Backbone.js e Ember.js e arrivando a Javascript lato server con <strong>Nodejs</strong>. Quest’ultimo è sicuramente uno degli argomenti più attesi visto l’interesse suscitato negli ultimi tempi.</p>
<p>Il programma della conferenza è disponibile all’indirizzo<a href=" http://2012.jsday.it/schedule" target="_blank"> http://2012.jsday.it/schedule</a></p>
<p><strong> </strong></p>
<p>Le iscrizioni sono aperte su <a href="http://jsday-phpday2012.eventbrite.com/">http://jsday-phpday2012.eventbrite.com/</a>.  Per restare in contatto e conoscere le novità si può visitare il sito web <a href="http://www.jsday.it/">http</a><a href="http://www.jsday.it/">://</a><a href="http://www.jsday.it/">www</a><a href="http://www.jsday.it/">.</a><a href="http://www.jsday.it/">jsday</a><a href="http://www.jsday.it/">.</a><a href="http://www.jsday.it/">it</a> oppure seguire i canali facebook e twitter: <a href="https://www.facebook.com/jsday.conference">https</a><a href="https://www.facebook.com/jsday.conference">://</a><a href="https://www.facebook.com/jsday.conference">www</a><a href="https://www.facebook.com/jsday.conference">.</a><a href="https://www.facebook.com/jsday.conference">facebook</a><a href="https://www.facebook.com/jsday.conference">.</a><a href="https://www.facebook.com/jsday.conference">com</a><a href="https://www.facebook.com/jsday.conference">/</a><a href="https://www.facebook.com/jsday.conference">jsday</a><a href="https://www.facebook.com/jsday.conference">.</a><a href="https://www.facebook.com/jsday.conference">conference</a> e <a href="https://twitter.com/jsconfit">https</a><a href="https://twitter.com/jsconfit">://</a><a href="https://twitter.com/jsconfit">twitter</a><a href="https://twitter.com/jsconfit">.</a><a href="https://twitter.com/jsconfit">com</a><a href="https://twitter.com/jsconfit">/</a><a href="https://twitter.com/jsconfit">jsconfit</a> .</p>
<p>Entrambi gli eventi sono ideati e organizzati da <strong>Grusp</strong>, Gruppo Utenti e Sviluppatori PHP.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.webeing.net/code/2012/05/02/sviluppo-ergo-vado-al-jsday-e-phpday/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Default Post Thumbnail Revamped con PlaceHold.it</title>
		<link>http://www.webeing.net/code/2012/02/09/default-post-thumbnail-revamped-con-placehold-it/</link>
		<comments>http://www.webeing.net/code/2012/02/09/default-post-thumbnail-revamped-con-placehold-it/#comments</comments>
		<pubDate>Thu, 09 Feb 2012 20:05:56 +0000</pubDate>
		<dc:creator>Enrico Corinti</dc:creator>
				<category><![CDATA[Wordpress]]></category>
		<category><![CDATA[hook]]></category>
		<category><![CDATA[plugin]]></category>
		<category><![CDATA[thumbnails]]></category>
		<category><![CDATA[wordpress]]></category>

		<guid isPermaLink="false">http://www.webeing.net/code/?p=252</guid>
		<description><![CDATA[Lo ammetto: per me le Thumbnail dei post di WordPress sono importantissime, è un debole! E purtroppo non sempre si ha la possibilità di mettersi a scegliere le immagini adeguate, specie quando il cliente te le deve passare&#8230; ieri. Per &#8230; <a href="http://www.webeing.net/code/2012/02/09/default-post-thumbnail-revamped-con-placehold-it/">Continua a leggere<span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Lo ammetto: per me le Thumbnail dei post di WordPress sono importantissime, è un debole!</p>
<p>E purtroppo non sempre si ha la possibilità di mettersi a scegliere le immagini adeguate, specie quando il cliente te le deve passare&#8230; ieri.</p>
<p>Per questo motivo ho pensato di indagare le modalità di automatizzare l&#8217;aggiunta di placeholder di default che mi aiutassero a perdere meno tempo, dapprima con un plugin modificandolo in quanto un pò <em>buggoso</em> (ma che comunque consiglio, con <a href="http://www.webeing.net/code/2011/07/15/default-thumbnails-per-i-post-di-wordpress-3-plugin-e-bugfix/">customizzazione annessa che potete leggere su un mio vecchio articolo</a>) ed oggi invece con una soluzione simpatica: sfruttando il servizio online <a href="http://placehold.it">placehold.it</a></p>
<p>Il servizio non fa altro che fornire i placeholder classici dei banner o delle thumb appunto, con una semplice chiamata ad una url, tipo questa</p>
<pre class="brush: php; title: ;">

&lt;img src=&quot;http://placehold.it/350x150&quot;&gt;
</pre>
<p>che diventa&#8230; questo:</p>
<p><img src="http://placehold.it/350x150" alt="" /></p>
<p>Utile: basta specificare le dimensioni nella URL e il servizio crea il placeholder!</p>
<p>Allora ho pensato di aggnaciare il servizio ad un hook di wordpress che mi creasse delle immagini personalizzate, quando il sistema cerca di creare un thumb ma non trova l&#8217;immagine caricata. L&#8217;hook esiste ed è &#8220;<em>post_thumbnail_html</em>&#8220;.</p>
<p>Di seguito il codice:</p>
<pre class="brush: php; title: ;">
add_filter( 'post_thumbnail_html', 'webeing_default_thumb', 10, 5 );
function webeing_default_thumb( $html, $post_id, $post_thumbnail_id, $size, $attr ) {
		$width = &quot;&quot;;
		$height =  &quot;&quot;;

		if( '' == $html ) {
			global $_wp_additional_image_sizes;

			$dimensions = '';
			if ( is_array( $size ) ){
				$width = $size[0];
				$height = $size[1];
			}
			else{
			 	if( isset( $_wp_additional_image_sizes[$size] ) ) {
					$width = $_wp_additional_image_sizes[$size]['width'];
					$height = $_wp_additional_image_sizes[$size]['height'];
				}
			}
			$dimensions = 'width=&quot;'.$width.'&quot; height=&quot;'.$height.'&quot; ';
			$html = '&lt;img src=&quot;http://placehold.it/'.$width.'x'.$height.'&quot; /&gt;';
		}
		return $html;
}
</pre>
<p>Grande servizio PlaceHold.it se devi fare le cose veloci <img src='http://www.webeing.net/code/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  Lo consiglio a tutti i Web Designer.</p>
<p>Commenti e proposte come al solito ben accette, a presto!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.webeing.net/code/2012/02/09/default-post-thumbnail-revamped-con-placehold-it/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>JQuery Fancybox Slideshow: piccola modifica, grande effetto!</title>
		<link>http://www.webeing.net/code/2011/09/13/jquery-fancybox-slideshow-piccola-modifica-grande-effetto/</link>
		<comments>http://www.webeing.net/code/2011/09/13/jquery-fancybox-slideshow-piccola-modifica-grande-effetto/#comments</comments>
		<pubDate>Tue, 13 Sep 2011 07:48:20 +0000</pubDate>
		<dc:creator>Enrico Corinti</dc:creator>
				<category><![CDATA[User Experience]]></category>
		<category><![CDATA[fancybox]]></category>
		<category><![CDATA[jquery]]></category>
		<category><![CDATA[libraries]]></category>
		<category><![CDATA[slideshow]]></category>

		<guid isPermaLink="false">http://www.webeing.net/code/?p=232</guid>
		<description><![CDATA[Tempo fa mi sono cimentato in questa soluzione per avere l&#8217;effetto &#8220;Slideshow&#8221; su Fancybox, la famosa libreria per rendere la visione delle immagini davvero dinamica. Ieri scopro che una soluzione davvero efficiente con tanto di modifica al &#8220;core&#8221; del plugin &#8230; <a href="http://www.webeing.net/code/2011/09/13/jquery-fancybox-slideshow-piccola-modifica-grande-effetto/">Continua a leggere<span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Tempo fa mi sono cimentato in <a href="http://www.webeing.net/code/2011/01/24/rendere-slideshow-gallerie-fancybox-esempio/">questa soluzione</a> per avere l&#8217;effetto &#8220;Slideshow&#8221; su Fancybox, la famosa libreria per rendere la visione delle immagini davvero dinamica.</p>
<p>Ieri scopro che una soluzione davvero efficiente con tanto di modifica al &#8220;core&#8221; del plugin jQuery si può trovare qui</p>
<p><a href="http://groups.google.com/group/fancybox/browse_thread/thread/25dc483448612d07/">http://groups.google.com/group/fancybox/browse_thread/thread/25dc483448612d07/</a></p>
<p>Non si capisce perchè Fancybox non fornsca ufficilamente questa feature ancora. Posto direttamente anche il <a href="http://www.webeing.net/wp-content/uploads/manual/modified+jquery.fancybox+v2.zip">pacchetto .zip della libreria</a>.</p>
<p>UPDATE: aggiungo anche una miniguida.</p>
<p>Basta aggiungere i riferimenti al .js e al .css interni alla libreria ed attivare la funzione:</p>
<pre class="brush: jscript; title: ;">

&lt;script src=&quot;path/to/fancyboxv2/jquery.fancybox-1.3.4.js&quot; type=&quot;text/javascript&quot;&gt;&lt;/script&gt;
&lt;link rel=&quot;stylesheet&quot; href=&quot;path/to/fancyboxv2/jquery.fancybox-1.3.4.css&quot; type=&quot;text/css&quot; media=&quot;screen&quot; /&gt;

&lt;script  type=&quot;text/javascript&quot;&gt;
 /**
 * FancyBox custom effects
 */
 jQuery(document).ready(function(){
     jQuery('.fancybox').fancybox({'interval' : 5000});
 });

&lt;/script&gt;
</pre>
<p>.fancybox è la classe che assegante alle vs immagini per innescare l&#8217;effetto. La nuova opzione <em>interval</em> temporizza l&#8217;effetto slideshow (in millisecondi).</p>
<p>Alcune immagini</p>

<a href='http://www.webeing.net/code/2011/09/13/jquery-fancybox-slideshow-piccola-modifica-grande-effetto/schermata-2011-09-13-a-10-15-14/' title='JQuery Fancybox Slider: Immagine di esempio'><img width="150" height="150" src="http://www.webeing.net/code/files/2011/09/Schermata-2011-09-13-a-10.15.14-150x150.png" class="attachment-thumbnail" alt="JQuery Fancybox Slider: Immagine di esempio" title="JQuery Fancybox Slider: Immagine di esempio" /></a>
<a href='http://www.webeing.net/code/2011/09/13/jquery-fancybox-slideshow-piccola-modifica-grande-effetto/schermata-2011-09-13-a-10-16-57/' title='JQuery Fancybox Slider: pulsante Pause'><img width="150" height="150" src="http://www.webeing.net/code/files/2011/09/Schermata-2011-09-13-a-10.16.57-150x150.png" class="attachment-thumbnail" alt="JQuery Fancybox Slider: pulsante Pause" title="JQuery Fancybox Slider: pulsante Pause" /></a>
<a href='http://www.webeing.net/code/2011/09/13/jquery-fancybox-slideshow-piccola-modifica-grande-effetto/schermata-2011-09-13-a-10-17-11/' title='JQuery Fancybox Slider: pulsante Play'><img width="150" height="132" src="http://www.webeing.net/code/files/2011/09/Schermata-2011-09-13-a-10.17.11-150x132.png" class="attachment-thumbnail" alt="JQuery Fancybox Slider: pulsante Play" title="JQuery Fancybox Slider: pulsante Play" /></a>

<p>A presto.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.webeing.net/code/2011/09/13/jquery-fancybox-slideshow-piccola-modifica-grande-effetto/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>WordPress Rewrite: aggiungere una estensione ai permalink di archivio categoria</title>
		<link>http://www.webeing.net/code/2011/07/26/wordpress-rewrite-aggiungere-una-estensione-ai-permalink-di-archivio-categoria/</link>
		<comments>http://www.webeing.net/code/2011/07/26/wordpress-rewrite-aggiungere-una-estensione-ai-permalink-di-archivio-categoria/#comments</comments>
		<pubDate>Tue, 26 Jul 2011 10:56:23 +0000</pubDate>
		<dc:creator>Enrico Corinti</dc:creator>
				<category><![CDATA[Wordpress]]></category>
		<category><![CDATA[rewrite]]></category>
		<category><![CDATA[wordpress]]></category>

		<guid isPermaLink="false">http://www.webeing.net/code/?p=224</guid>
		<description><![CDATA[Rispondendo ad una richiesta generata da un commento di Matteo su questo articolo del blog, ho fatto un pò di test ottenendo un risultato interessante che posto qui. Il problema era aggiungere una estensione del tipo &#8220;.htm&#8221; alla fine dei &#8230; <a href="http://www.webeing.net/code/2011/07/26/wordpress-rewrite-aggiungere-una-estensione-ai-permalink-di-archivio-categoria/">Continua a leggere<span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Rispondendo ad una richiesta generata da un <a href="http://www.webeing.net/code/2011/02/10/wp-rewrite-class-ovvero-come-ti-riscrivo-i-permalink-categoria-wordpress/">commento di Matteo su questo articolo del blog</a>, ho fatto un pò di test ottenendo un risultato interessante che posto qui.</p>
<p>Il problema era aggiungere una estensione del tipo &#8220;.htm&#8221; alla fine dei permalink legati alle viste di tipo Archivio per le categorie, ovvero passare da %blogurl%/category/news/ a %blogurl%/category/news.htm.</p>
<p>La soluzione diventa semplice con un pò di manipolazione delle componenti della classe Rewrite di WordPress</p>
<pre class="brush: php; title: ;">

add_filter('redirect_canonical', 'cancel_redirect_canonical');

// Cancel the redirection

function cancel_redirect_canonical($redirect_url){

global $post;

if (is_category()){

return false;

}

}

add_filter('user_trailingslashit', 'add_extension_function',999);

function add_extension_function($link) {

global $post;

if(is_category()){

return substr($link,0,-1) . &quot;.htm&quot;;

}

else

return $link;

}

/*

* Flush delle regole per aggiornarle con la mia nuova

*/

add_action('init', 'remcat_flush_rules');

function remcat_flush_rules() {

global $wp_rewrite;

$wp_rewrite-&gt;flush_rules();

}

/*

* Genera la regola di rewrite

*/

add_filter('generate_rewrite_rules', 'add_extension_rewrite');

function add_extension_rewrite($wp_rewrite) {

$new_rules = array('(.+).htm' =&gt; 'index.php?category_name='.$wp_rewrite-&gt;preg_index(1));

$wp_rewrite-&gt;rules = $new_rules + $wp_rewrite-&gt;rules;

return $wp_rewrite;

}
</pre>
<p>Dopo qualche test il risultato sembra ottimo, ma provate pure e magari lasciate un commento.</p>
<p>A presto</p>
<p>Note: <a href="http://betterwp.net/wordpress-tips/remove-trailing-slash-for-permalinks-with-extensions/">Citazione doverosa a questo articolo</a> per lo spunto sui rewrite canonici&#8230;</p>
]]></content:encoded>
			<wfw:commentRss>http://www.webeing.net/code/2011/07/26/wordpress-rewrite-aggiungere-una-estensione-ai-permalink-di-archivio-categoria/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Default thumbnails per i post di WordPress 3+: plugin e bugfix</title>
		<link>http://www.webeing.net/code/2011/07/15/default-thumbnails-per-i-post-di-wordpress-3-plugin-e-bugfix/</link>
		<comments>http://www.webeing.net/code/2011/07/15/default-thumbnails-per-i-post-di-wordpress-3-plugin-e-bugfix/#comments</comments>
		<pubDate>Fri, 15 Jul 2011 09:43:15 +0000</pubDate>
		<dc:creator>Enrico Corinti</dc:creator>
				<category><![CDATA[Wordpress]]></category>
		<category><![CDATA[fix]]></category>
		<category><![CDATA[hook]]></category>
		<category><![CDATA[plugin]]></category>
		<category><![CDATA[wordpress]]></category>

		<guid isPermaLink="false">http://www.webeing.net/code/?p=216</guid>
		<description><![CDATA[La versione 3 di WordPress e superiori, ha introdotto massivamente il supporto per le immagini &#8220;di copertina&#8221; o &#8220;in evidenza&#8221;, come le chiama Lui! In questo breve articolo vi presento un plugin di WordPress utile a creare delle DEMO d&#8217;effetto &#8230; <a href="http://www.webeing.net/code/2011/07/15/default-thumbnails-per-i-post-di-wordpress-3-plugin-e-bugfix/">Continua a leggere<span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>La versione 3 di WordPress e superiori, ha introdotto massivamente il<a href="http://codex.wordpress.org/Post_Thumbnails"> supporto per le immagini &#8220;di copertina&#8221;</a> o &#8220;in evidenza&#8221;, come le chiama Lui!</p>
<p>In questo breve articolo vi presento un plugin di WordPress utile a creare delle DEMO d&#8217;effetto e soprattutto dei mock che siano visionabili dal cliente senza dover passare il tempo ad inserire nei post immagini di copertina e testi di prova inventati e che spesso ci portano via tempo per fare altro.</p>
<p>Il plugin si chiama &#8220;<a href="http://wordpress.org/extend/plugins/default-post-thumbnails/">Default Post Thumbnail</a>&#8221; e insieme a &#8220;<a href="http://wordpress.org/extend/plugins/better-lorem/">Better Lorem Ipsum</a>&#8221; permette di creare una serie di contenuti di default per il vostro sito: il primo crea una immagine di copertina di default per tutti i post, pagine, custom post types, etc&#8230;, mentre il secondo crea tassonomie (categorie, tag, etc&#8230;), post, pagine e custom post types usando l&#8217;ormai stra-noto <a href="http://www.lipsum.com/">sistema del &#8220;<em>Lorem Ipsum</em>&#8220;</a>.</p>
<p>In particolare il primo però soffre di un grave problema: crea l&#8217;immagine di default solo alle dimensioni base specificate nel menù &#8220;<em>Impostazioni/Media/Dimensionie Miniatura</em>&#8221; che di solito è 150&#215;150 px. Il problema è che <strong>se abbiamo impostato delle misure custom per il nostro tema con il supporto alle immagini di copertina custom, non otterremo le misure sperate.</strong></p>
<p>Di seguito la mia correzione allo script del plugin, spero possa essere utile:</p>
<ol>
<li>aprite il file <em>defaultpostthumbnail.php</em></li>
<li>cercate la funzione <em>display_default_post_thumbnail </em>(dovrebbe essere l&#8217;ultima)</li>
<li>sostituite la firma della funzione con questa</li>
</ol>
<p><em> </em></p>
<pre class="brush: php; title: ;">

function display_default_post_thumbnail($thumbnail_code, $post_id, $post_thumbnail_id, $size, $attr) {
</pre>
<p>Infine una poccola variazione anche al filtro di Hook richiamato nell&#8217;ultima riga con questo</p>
<pre class="brush: php; title: ;">
add_filter('post_thumbnail_html','display_default_post_thumbnail', 10, 5);
</pre>
<p>Ora il plugin dovrebbe adattare le thumbs alle vostre richieste.</p>
<p>A presto!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.webeing.net/code/2011/07/15/default-thumbnails-per-i-post-di-wordpress-3-plugin-e-bugfix/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Modificare lo script TimThumb per WordPress 3+ Network (o WordPressMU)</title>
		<link>http://www.webeing.net/code/2011/07/14/modificare-lo-script-timthumb-per-wordpress-3-network-o-wordpressmu/</link>
		<comments>http://www.webeing.net/code/2011/07/14/modificare-lo-script-timthumb-per-wordpress-3-network-o-wordpressmu/#comments</comments>
		<pubDate>Thu, 14 Jul 2011 10:40:16 +0000</pubDate>
		<dc:creator>Enrico Corinti</dc:creator>
				<category><![CDATA[Wordpress]]></category>
		<category><![CDATA[fix]]></category>
		<category><![CDATA[network]]></category>
		<category><![CDATA[wordpress]]></category>

		<guid isPermaLink="false">http://www.webeing.net/code/?p=206</guid>
		<description><![CDATA[Avete anche voi perso tempo e capire perchè TimThumb non funziona con le configurazioni Network di WordPress 3+ ? Molti temi ancora lo usano per fare il &#8220;crop&#8221; delle immagini, anche se Wp oggi ha un&#8217;ottimo sistema di gestione immagini. &#8230; <a href="http://www.webeing.net/code/2011/07/14/modificare-lo-script-timthumb-per-wordpress-3-network-o-wordpressmu/">Continua a leggere<span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Avete anche voi perso tempo e capire perchè <a href="http://www.darrenhoyt.com/2008/04/02/timthumb-php-script-released/">TimThumb</a> non funziona con le configurazioni Network di WordPress 3+ ?</p>
<p>Molti temi ancora lo usano per fare il &#8220;crop&#8221; delle immagini, anche se Wp oggi ha un&#8217;ottimo sistema di gestione immagini. Io di solito mi riscrivo i temi evitando di usare lo script, ma a volte è capitato di non porterlo fare&#8230; come risolvere?</p>
<p>La risposta è semplice:<a href="http://codex.wordpress.org/Create_A_Network"> WP3+ in configurazione network </a>usa un sistema di Rewrite per identificare le immagini che sono tutte contenute in un unica cartella &#8220;blogs.dir&#8221;. L&#8217;indirizzamento viene effettuato dal file .<em>htaccess</em> e la url è del tipo <em>miodominio.tld/files/path/to/image.jpg</em>. Il problema è che lo script di Timthumb non riesce a reindirizzare la url alla risorsa &#8220;vera&#8221; nella cartella blogs.dir.</p>
<p>Ecco la soluzione:</p>
<p>1. Troviamo il file timthumb.php sul vostro tema.</p>
<p>2. Aggiungiamo</p>
<pre class="brush: php; title: ;">

require_once('../../../wp-blog-header.php');
</pre>
<p>all&#8217;inizio dello script (o almeno subito dopo la parte commentata di intestazione) per richiamare le variabili globali di WordPressm tra cui l&#8217;ID del blog in cui ci troviamo (ricordiamoci che siamo in un Network di Blog) . Mi raccomando di fare attenzione al percorso &#8220;../../..etc&#8230;&#8221; che cambia in base alla posizione del file sul server. Nel mio caso il file era nella stessa posizione dei file di template tel tema.</p>
<p><span style="font-family: Georgia, 'Bitstream Charter', serif; line-height: 24px;">3. Sostituiamo la funzione <em>clean_source($src)</em> (fate un find&amp;replace per trovarla) con questa</span></p>
<pre class="brush: php; title: ;">
/**

* tidy up the image source url

*

* @param  $src

* @return string

*/

function clean_source ($src) {

$host = str_replace ('www.', '', $_SERVER['HTTP_HOST']);

$regex = &quot;/^((ht|f)tp(s|):\/\/)(www\.|)&quot; . $host . &quot;/i&quot;;

$src = preg_replace ($regex, '', $src);

$src = strip_tags ($src);

$src = str_replace (' ', '%20', $src);

$src = check_external ($src);

// remove slash from start of string

if (strpos ($src, '/') === 0) {

$src = substr ($src, -(strlen ($src) - 1));

}

// don't allow users the ability to use '../'

// in order to gain access to files below document root

$src = preg_replace (&quot;/\.\.+\//&quot;, &quot;&quot;, $src);

//gdg: wp mu &amp;amp; wp 3 multisite fix

global $blog_id;

$src = preg_replace(&quot;/files/&quot;, &quot;/wp-content/blogs.dir/$blog_id/files/&quot;, $src);

// get path to image on file system

$src = get_document_root ($src) . '/' . $src;

return $src;

}
</pre>
<p>Noterete subito le differenze e il punto in cui il path viene sostituito con quello reale.</p>
<p>Questo è quanto, a presto!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.webeing.net/code/2011/07/14/modificare-lo-script-timthumb-per-wordpress-3-network-o-wordpressmu/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>WordPress: Hot Topics del blog con la Tag Cloud, una soluzione</title>
		<link>http://www.webeing.net/code/2011/05/25/wordpress-hot-topics-del-blog-con-la-tag-cloud-una-soluzione/</link>
		<comments>http://www.webeing.net/code/2011/05/25/wordpress-hot-topics-del-blog-con-la-tag-cloud-una-soluzione/#comments</comments>
		<pubDate>Wed, 25 May 2011 15:05:53 +0000</pubDate>
		<dc:creator>Enrico Corinti</dc:creator>
				<category><![CDATA[Wordpress]]></category>
		<category><![CDATA[functions]]></category>
		<category><![CDATA[jquery]]></category>
		<category><![CDATA[tags]]></category>
		<category><![CDATA[topics]]></category>
		<category><![CDATA[wordpress]]></category>

		<guid isPermaLink="false">http://www.webeing.net/code/?p=187</guid>
		<description><![CDATA[Provando ad esaudire le richieste di un editore online e della sua testata giornalistica realizzata su piattaforma WordPress, ho modificato uno script trovato su StackOverflow, per creare un&#8217;area Hot Topics del giorno (mimando un pò gli hashtag &#8220;Tendenze&#8221; di Twitter). &#8230; <a href="http://www.webeing.net/code/2011/05/25/wordpress-hot-topics-del-blog-con-la-tag-cloud-una-soluzione/">Continua a leggere<span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.webeing.net/code/files/2011/05/Stock-Ticker-Lookup.jpg"><img class="size-medium wp-image-202 alignleft" title="Stock-Ticker-Lookup" src="http://www.webeing.net/code/files/2011/05/Stock-Ticker-Lookup-300x179.jpg" alt="" width="300" height="179" /></a>Provando ad esaudire le richieste di un editore online e della sua testata giornalistica realizzata su piattaforma WordPress, ho modificato <a href="http://stackoverflow.com/questions/2941251/how-to-limit-the-wordpress-tagcloud-by-date" target="_blank">uno script trovato su StackOverflow</a>, per creare un&#8217;area <strong>Hot Topics del giorno</strong> (mimando un pò gli hashtag &#8220;Tendenze&#8221; di Twitter).</p>
<p>Il risultato è il codice qui sotto. Spero possa essere utile! Come al solito sono benvenute modifiche e suggerimenti.</p>
<pre class="brush: php; title: ;">

function wb_hot_tags($tagcount = 7, $how_many_posts = 50){

//Parametri della funzione wp_tag_cloud (Vedi il Codex per maggiori informazioni)
$smallest = 11;
$largest = 12;
$unit = 'px';
$tagcount = $tagcount;
$format = 'list';
$separator = &quot;\n&quot;;
$orderby = 'count';
$order = 'DESC';
$taxonomy = 'post_tag';

//Fisso la query sulla data odierna
$current_day = getdate();

$args = array(
'posts_per_page' =&gt; $how_many_posts,
'orderby' =&gt; 'date',
'order' =&gt; 'DESC',
'day' =&gt; $current_day[&quot;mday&quot;],
'year' =&gt; $current_day[&quot;year&quot;],
'monthnum' =&gt; $current_day[&quot;mon&quot;],
);

query_posts($args);

$temp_ids = array();
while (have_posts()) : the_post();
     // get tags for each post
     $posttags = get_the_tags();
     if ($posttags) {
        foreach($posttags as $tag) {
        // store each tag id value
        $temp_ids[] = $tag-&gt;term_id;
     }
}
endwhile;

wp_reset_query();

$id_string = implode(',', array_unique($temp_ids));

echo '&lt;h4 class=&quot;left&quot;&gt;Temi Caldi:&lt;/h4&gt;';
wp_tag_cloud(&quot;smallest=$smallest&quot;.
&quot;&amp;largest=$largest&quot;.
&quot;&amp;number=$tagcount&quot;.
&quot;&amp;orderby=$orderby&quot;.
&quot;&amp;order=$order&quot;.
&quot;&amp;unit=$unit&quot;.
&quot;&amp;format=$format&quot;.
&quot;&amp;taxonomy=$taxonomy&quot;.
&quot;&amp;separator=$separator&quot;.
&quot;&amp;include=$id_string&quot;
);
}
</pre>
<p>Con qualche tocco di CSS a vostro piacimento e con l&#8217;aggiunta di jQuery, come ad esempio<a href="http://www.gcmingati.net/wordpress/wp-content/lab/jquery/newsticker/jq-liscroll/scrollanimate.html"> jQuery.liScroll</a>, potete aggiungere al vostro magazine un tocco di &#8220;US-Style&#8221; alla CNN!</p>
<p>La funzione potrebbe essere legata anche a qualche Hook per poter aggiungere queste informazioni anche a fine articolo ad esempio!</p>
<p>A presto.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.webeing.net/code/2011/05/25/wordpress-hot-topics-del-blog-con-la-tag-cloud-una-soluzione/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>WordPress Custom Write Panels</title>
		<link>http://www.webeing.net/code/2011/04/01/wordpress-custom-write-panels/</link>
		<comments>http://www.webeing.net/code/2011/04/01/wordpress-custom-write-panels/#comments</comments>
		<pubDate>Fri, 01 Apr 2011 13:16:15 +0000</pubDate>
		<dc:creator>Enrico Corinti</dc:creator>
				<category><![CDATA[Wordpress]]></category>
		<category><![CDATA[caso studio]]></category>
		<category><![CDATA[custom posts types]]></category>
		<category><![CDATA[meta boxes]]></category>
		<category><![CDATA[wordpress]]></category>

		<guid isPermaLink="false">http://www.webeing.net/code/?p=171</guid>
		<description><![CDATA[Riprendiamo le considerazioni su come Wordperss possa diventare più &#8220;Custom&#8221;. Nell&#8217;articolo precedente avevamo preso in esame i Custom Post Types (CPT), ovvero come creare dei contenuti più vicini agli &#8220;oggetti/concetti&#8221; che vogliono descrivere. Oggi estendiamo il concetto con un nuovo &#8230; <a href="http://www.webeing.net/code/2011/04/01/wordpress-custom-write-panels/">Continua a leggere<span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Riprendiamo le considerazioni su come Wordperss possa diventare più &#8220;Custom&#8221;.</p>
<p>Nell&#8217;<a href="http://www.webeing.net/code/2011/03/21/wordcamp-2011-wordpress-custom-contents-types-taxonomies/">articolo precedente</a> avevamo preso in esame i <a href="http://codex.wordpress.org/Post_Types#Custom_Types">Custom Post Types</a> (CPT), ovvero come creare dei contenuti più vicini agli &#8220;<em>oggetti/concetti</em>&#8221; che vogliono descrivere.</p>
<p>Oggi estendiamo il concetto con un nuovo pezzo, ovvero personalizziamo il backend di scrittura dei CPT degli autori, che dovreste avere fatto come <em>esercizio</em> seguendo gli <a href="http://www.webeing.net/code/2011/03/21/wordcamp-2011-wordpress-custom-contents-types-taxonomies/">stessi passaggi fatti per il CPT &#8220;Slides&#8221;</a> (comunque il codice completo è nel file allegato).</p>
<h3>Premesse</h3>
<p>Consideriamo che il nostro CPT è stato nominato &#8220;<em>wc11_author</em>&#8220;.</p>
<p>Aggiungeremo per gli autori i campi: <em>Email</em>, <em>WebSite</em> e, interessante applicazione, la <span style="text-decoration: underline;">lista delle slide per permettere di associare l&#8217;autore alla slide che ha scritto</span>. Questi dati verranno caricati su &#8220;Custom Fields&#8221;, ovvero &#8220;Campi Personalizzati&#8221; che aggiungono delle meta-informazioni correlate al post. Sarà possibile scrivere e leggere questi dati in qualsiasi momento per estrarne le informazioni.</p>
<h3>Meta Boxes</h3>
<p>Iniziamo a vedere un pò di codice. Le funzioni delle <a href="http://codex.wordpress.org/Function_Reference/add_meta_box">API di WordPress</a> che ci interessano sono:</p>
<ol>
<li>Una funzione che prepara il box (Meta Box, per dirla<em> alla Codex</em>)</li>
<li>Una funzione che aggiunge il box preparato, da agganciare al load dell&#8217;interfaccia amministrativa</li>
<li>Una funzione che gestisce i dati inviati al server, da agganciare al salvataggio dei dati</li>
</ol>
<p>Il file <a href="http://www.webeing.net/wp-content/uploads/manual/custom-meta-boxes.php.txt" target="_blank">custom-meta-boxes.php</a> contiene il codice che commenteremo di seguito.</p>
<p>Iniziamo proprio dalla funzione che prepara il box</p>
<pre class="brush: php; title: ;">

function wc11_author_info_box() {

global $post;

//Recupero i dati salvati nei Custom Fields per valorizzare le checkbox gia' selezionati
$post_meta_slide = get_post_meta($post-&gt;ID,'wc11_slides_list',true);
$post_meta_email = get_post_meta($post-&gt;ID,'wc11_author_email',true);
$post_meta_website = get_post_meta($post-&gt;ID,'wc11_author_website',true);

//recupero il catalogo vero e proprio
$slides = get_posts( array(&quot;post_type&quot; =&gt; 'wc11_slides', &quot;numberposts&quot; =&gt; -1) );
$ddl='&lt;label&gt;Seleziona la slide dell\'autore:&lt;/label&gt;&lt;select name=&quot;wc11_slides_list&quot;&gt;&lt;option value=&quot;0&quot;&gt;Seleziona...&lt;/option&gt;';
$selected =&quot;&quot;;

if (count($slides) &gt; 0 ):

  //Creo la visualizzazione come ComboBox
  foreach ($slides as $slide)
  {
    if ($slide-&gt;ID == $post_meta_slide ) $selected = 'selected=&quot;selected&quot;';
    $ddl .= '&lt;option value=&quot;' . $slide-&gt;ID .'&quot; ' . $selected .'&gt;' . $slide-&gt;post_title . '&lt;/option&gt;';
  }

 $ddl .= '&lt;/select&gt;&lt;br /&gt;';
 echo $ddl;

else :
  echo &quot;&lt;label&gt;Sildes: &lt;span&gt;Nessuna Slides caricata&lt;/span&gt;&lt;/label&gt;&quot;;
endif;

echo '&lt;label&gt;Email:  &lt;input size=&quot;45&quot; name=&quot;wc11_author_email&quot; type=&quot;text&quot; id=&quot;wc11_author_email_id&quot; value=&quot;'
. $post_meta_email . '&quot; /&gt;&lt;/label&gt;';
echo '&lt;br /&gt;';
echo '&lt;label&gt;WebSite: &lt;input size=&quot;45&quot; name=&quot;wc11_author_website&quot; type=&quot;text&quot; id=&quot;wc11_author_website_id&quot; value=&quot;'
. $post_meta_website . '&quot; /&gt;&lt;/label&gt;';

// Use nonce for verification
wp_nonce_field( 'wc11_author', 'wc11_author_noncename' );
}
</pre>
<p>Il Meta Box preparato come si vede contiene due input box di testo: &#8220;<em>wc11_author_email</em>&#8221; e &#8220;<em>wc11_author_website</em>&#8220;, adibite a contenere i dati relativi all&#8217;email e al sito web dell&#8217;autore. Inoltre in precedenza viene creata una combo box con la lista delle slides caricate, per associare all&#8217;autore una slide dall&#8217;elenco. La cosa è abbastanza semplice: con <em>get_post</em> recuperiamo tutte le slides e costruiamo la combo box. In ultimo aggiungiamo anche un hidden field per la gestione del <em>nonce</em> di sicurezza <a href="http://codex.wordpress.org/WordPress_Nonces">previsto da WordPress</a></p>
<p>Il nostro box è pronto per essere aggiunto:</p>
<pre class="brush: php; title: ;">

//Creo il mio box
function create_wc11_author_info_box() {
if ( function_exists('add_meta_box') ) {
  add_meta_box(
      'wc11_author_box_id',
      'Dati Autore',
      'wc11_author_info_box',
      'wc11_authors',
      'normal');
  }
}

add_action('admin_menu', 'create_wc11_author_info_box');
</pre>
<p><em>Add_meta_boxes</em> è la funzione che crea effettivamente il box, &#8220;<em>wrappata</em>&#8221; dalla mia funzione <em>create_wc11_author_info_box</em>, che mi servirà come gancio per la action <em>admin_menu. </em>I parametri della funzione sono rispettivamente: l&#8217;ID del contenitore HTML del box, una descrizione, la callback di creazione effettiva del box (che abbiamo realizzato nel punto precedente), il CPT a cui associare il box (può essere anche &#8216;post&#8217;, &#8216;page&#8217;, etc&#8230; per poter aggiungere il box anche su classici post o pagine, volendo&#8230;) e la priorità del box.</p>
<p>Creato il box, manca la gestione dei dati salvati:</p>
<pre class="brush: php; title: ;">

function save_postdata( $post_id ) {

global $post;

// verifichiamo che i dati provengano dal box in esame
if ( !wp_verify_nonce( $_POST['wc11_author_noncename'], 'wc11_author' )) {
return $post_id;
}

// verifico che non si tratta di un autosave
if ( defined('DOING_AUTOSAVE') &amp;&amp; DOING_AUTOSAVE )
return $post_id;

// Valido i permessi
if ( 'wc11_author' == $_POST['post_type'] ) {
if ( !current_user_can( 'edit_page', $post_id ) )
  return $post_id;

} else {

if ( !current_user_can( 'edit_post', $post_id ) )
  return $post_id;

}

//Recupero le informazioni provenienti dal box
//$slide_selected contiene la slide selezionata
$slide_selected = $_POST['wc11_slides_list'];
$author_email = $_POST['wc11_author_email'];
$author_website = $_POST['wc11_author_website'];

//Recupero e controllo se i campi personalizzati sono già valorizzati
//Recupero i vecchi e li confronto con i nuovi...
$slide_saved = get_post_meta($post-&gt;ID,'wc11_slides_list', true);

//Controllo che ci siano slide selezionate, altrimenti cancello la slide se l'autore viene rimosso...
if ($slide_selected == 0)	{
delete_post_meta($slide_selected,'slide_autore_id',$post-&gt;ID);
delete_post_meta($post_id,'wc11_slides_list',$slide_selected);
}

//...Siccome il salvataggio è oneroso lo faccio solo quando scopro che i dati sono differenti
if ( !($slide_selected === $slide_saved)){

//Cancello la vecchia associazione con l'autore
delete_post_meta($slide_saved,'slide_autore_id',$post-&gt;ID);
//Aggiorno il post della slide con l'ID dell'autore che lo ha scritto (slide_autore_id)
update_post_meta($slide_selected,'slide_autore_id',$post_id);
//Aggiorno la lista delle slide scritte da questo autore (post_id) in modo che rimangano sempre memorizzati
update_post_meta($post_id,'wc11_slides_list', $slide_selected);

}

//Aggiorno gli altri campi

if ($author_email != &quot;&quot;) update_post_meta($post_id,'wc11_author_email',$author_email);
if ($author_website != &quot;&quot;) update_post_meta($post_id,'wc11_author_website',$author_website);

}

add_action('save_post', 'save_postdata');
</pre>
<p>La funzione <em>save_postdata</em> verrà quindi richiamata al salvataggio del post, grazie all&#8217;Hook finale. Si può notare il massivo uso delle API di aggiornamento/cancellazione dei valori sui campi personalizzati del post in esame (<em>update_post_meta</em>, <em>delete_post_meta</em>).</p>
<p>In realtà noterete che per tenere traccia della relazione tra Slides-Autore, aggiorno contemporaneamente il campo personalizzato degli autori e quello della slide selezionata: in questa maniera posso creare una sorta di relazione 1:1 tra l&#8217;oggetto Slide e quello Autore; questo mi permetterà sempre di recuperare le meta informazioni da una parte e dall&#8217;altra.</p>
<p>Questo conclude la piccola guida, estratta anche questa dall&#8217;intervento del KnowCamp2011. Il prossimo appuntamento è sulle Custom Taxonomies. Vi aspetto!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.webeing.net/code/2011/04/01/wordpress-custom-write-panels/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Wordcamp 2011: il primo di una serie di articoli su WordPress Custom Contents</title>
		<link>http://www.webeing.net/code/2011/03/21/wordcamp-2011-wordpress-custom-contents-types-taxonomies/</link>
		<comments>http://www.webeing.net/code/2011/03/21/wordcamp-2011-wordpress-custom-contents-types-taxonomies/#comments</comments>
		<pubDate>Mon, 21 Mar 2011 11:48:26 +0000</pubDate>
		<dc:creator>Enrico Corinti</dc:creator>
				<category><![CDATA[Wordpress]]></category>
		<category><![CDATA[caso studio]]></category>
		<category><![CDATA[custom posts types]]></category>
		<category><![CDATA[custom taxonomies]]></category>
		<category><![CDATA[functions]]></category>
		<category><![CDATA[wordpress]]></category>

		<guid isPermaLink="false">http://www.webeing.net/code/?p=124</guid>
		<description><![CDATA[Dopo la magnifica esperienza al KnowCamp2011 (#kc2011) di Sabato (19/03) condivido il materiale relativo allo speech che mi ha visto coinvolto al WordCamp interno alla manifestazione. Inizio col pubblicare le slides, per chi fosse interessato a quanto detto e soprattutto &#8230; <a href="http://www.webeing.net/code/2011/03/21/wordcamp-2011-wordpress-custom-contents-types-taxonomies/">Continua a leggere<span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.webeing.net/code/files/2011/03/knowcamp_fondo-bianco.png"><img class="alignnone size-full wp-image-161" title="knowcamp_fondo-bianco" src="http://www.webeing.net/code/files/2011/03/knowcamp_fondo-bianco.png" alt="" width="450" height="68" /></a></p>
<p><a href="http://www.webeing.net/code/files/2011/03/knowcamp_fondo-bianco.png"></a>Dopo la magnifica esperienza al <a href="http://www.knowcamp.it/" target="_blank">KnowCamp2011</a> (#kc2011) di Sabato (19/03) condivido il materiale relativo allo speech che mi ha visto coinvolto al WordCamp interno alla manifestazione.</p>
<p>Inizio col pubblicare le slides, per chi fosse interessato a quanto detto e soprattutto a chi ha seguito ma, causa tempo ridotto (o meglio intervento forse troppo lungo!) , non ha potuto cogliere tutti gli aspetti della vicenda.</p>
<p>Come detto anche in sede WordCamp, Custom Post Types, Taxonomies e Meta Boxes (o a volte denominati Write Panels) sono un ottimo modo di organizzare i contenuti &#8220;differenti&#8221; dai classici Posts/Pages/Attachments previsti da WordPress e finalmente lo avvicinano ad un evoluto CMS, accostando features come questa all&#8217;ottima usabilità e semplicità di Design già stra-note del nostro amatissimo WP.</p>
<div id="__ss_7331334" style="width: 510px; font-size: 0.8em;"><strong><a title="Wordpress Custom Contents" href="http://www.slideshare.net/enrico.corinti/wordpress-custom-contents">WordPress Custom Contents</a></strong></p>
<div style="padding: 5px 0 12px;">View more <a href="http://www.slideshare.net/">presentations</a> from <a href="http://www.slideshare.net/enrico.corinti">Enrico Corinti</a></div>
<p><object id="__sse7331334" classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="510" height="426" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"><param name="allowFullScreen" value="true" /><param name="allowScriptAccess" value="always" /><param name="src" value="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=wordcamp2011-wordpresscustomcontents-110321043617-phpapp02&amp;stripped_title=wordpress-custom-contents&amp;userName=enrico.corinti" /><param name="name" value="__sse7331334" /><param name="allowfullscreen" value="true" /><embed id="__sse7331334" type="application/x-shockwave-flash" width="510" height="426" src="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=wordcamp2011-wordpresscustomcontents-110321043617-phpapp02&amp;stripped_title=wordpress-custom-contents&amp;userName=enrico.corinti" name="__sse7331334" allowscriptaccess="always" allowfullscreen="true"></embed></object></p>
</div>
<p>Venaimo alla parte più interressante cerdo&#8230;</p>
<h3>L&#8217;Esempio proposto</h3>
<p>L&#8217;esempio proposto trattava la realizzazione di una serie di contenuti custom per la gestione delle Slides e degli Autori delle stesse, facendo in modo che possano essere inserite le slide in un contenuto &#8220;<em>Slides</em>&#8221; e le informazioni sull&#8217;Autore in un contenuto &#8220;<em>Autore</em>&#8221; (assolutamente da non confondere con gli &#8220;autori&#8221; definiti da WordPress, mi raccomando&#8230;il senso è un altro!), per descrivere il quale saranno usati 3 campi aggiuntivi: <strong>email</strong>, <strong>sito web</strong> e il <strong>nome della slide realizzata</strong>. Per fare ciò in particolare vedremo come legare i due contenuti insieme.</p>
<p>Aggiungeremo una tassonomia custom per le slides, che organizzino le stesse in &#8220;<em>Aree Tematiche</em>&#8220;.</p>
<p>Il tutto è già <a href="http://wordcamp.essereweb.net" target="_blank">su una demo</a>, ma ci arriveremo</p>
<h3>Aggiungiamo il codice al tema</h3>
<p>Per prima cosa, definiamo i nostri file per la gestione dei dati. Scegliamo di non creare un plugin per semplicità ma di inserire la feature &#8220;a bordo&#8221; del nostro tema (quindi funzionerà solo per il tema in questione). Il luogo deputato a questo è il file <em>functions.php.</em></p>
<p>Per cominciare creiamo una cartella all&#8217;interno del tema sul server, chiamata <em>includes,</em> nella quale andremo a creare anche i file di management come in figura:</p>
<p><a href="http://www.webeing.net/code/files/2011/03/includes-folder.png"><img class="alignnone size-full wp-image-125" title="includes-folder" src="http://www.webeing.net/code/files/2011/03/includes-folder.png" alt="" width="204" height="103" /></a></p>
<p>Aggiungiamo i file al nostro <em>functions.php</em>:</p>
<pre class="brush: php; title: ;">

/**
* WC11 Theme Functions
* By Enrico Corinti
* Webeing.net
*/

define (&quot;THEME_INCLUDES&quot;, STYLESHEETPATH . &quot;&quot; . &quot;/includes/&quot;);

require_once THEME_INCLUDES . &quot;custom-post-types.php&quot;;
require_once THEME_INCLUDES . &quot;custom-taxonomies.php&quot;;
require_once THEME_INCLUDES . &quot;custom-meta-boxes.php&quot;;
require_once THEME_INCLUDES . &quot;custom-columns.php&quot;;
</pre>
<p>Andiamo a vedere il primo pezzo</p>
<h3>Custom Post Types (CPT)</h3>
<p>E&#8217; ora di vedere la parte relativa ai Custom Post Types. Di seguito il codice del file <em>custom-post-types.php</em>.</p>
<p>Vediamo subito come si istanzia un CPT, agganciandolo all&#8217;Hook &#8220;<em>init</em>&#8220;:</p>
<pre class="brush: php; title: ;">

/**
* WC11 Custom Post Types
* By Enrico Corinti
* Webeing.net
*/

//Definizione Post Type: Slides
//Hook WordPress

add_action( 'init', 'create_wc11_slides_type' );

//Funzione da agganciare
function create_wc11_slides_type() {
//...parametri
}
</pre>
<p><span style="font-family: Georgia, 'Times New Roman', 'Bitstream Charter', Times, serif; line-height: 23px; white-space: normal;">Successivamente prepariamo gli array che servono per descrivere le etichette che compariranno sul backend, quando andremo a scrivere i nostri contenuti</span></p>
<pre class="brush: php; title: ;">
//Etichette

$wc11_slides_labels = array(

'name'=&gt; &quot;Slide&quot;,
'singular_name' =&gt; &quot;Slides&quot;,
'add_new' =&gt; &quot;Nuova Slide&quot;,
'add_new_item' =&gt; &quot;Aggiungi una nuova Slide&quot;,
'edit_item'=&gt;  &quot;Modifica Slide&quot;,
'new_item' =&gt;  &quot;Nuova Slide&quot;,
'view_item' =&gt;  &quot;Visuallizza Slide&quot;,
'search_items' =&gt;  &quot;Ricerca Slide&quot;,
'not_found' =&gt;  &quot;Nessuna Slide trovata&quot;,
'not_found_in_trash'=&gt; &quot;Nessuna Slide e' nel cestino&quot;,
'parent_item_colon' =&gt;  &quot;Genitore&quot;,
'menu_name' =&gt;  &quot;Gestione Slides&quot;,

);
</pre>
<p>Impostiamo i &#8220;Write Panels&#8221; standard, ovvero i box di inserimento dati lato backend, che vogliamo includere: nel nostro caso il Titolo, l&#8217;Editor per la scrittura dei contenuti e il box dell&#8217;immagine di copertina</p>
<pre class="brush: php; title: ;">
//Box di scrittura classici da aggiungere
$wc11_slides_supports = array('title', 'editor','thumbnail');
</pre>
<p>Infine, ma importantissimo, andiamo ad impostare il nostro permalink: nel mio caso mi accontento di una regola semplice che inserisca uno &#8220;slug&#8221; prima del nome del contenuto inserito (che chiamo &#8220;slides&#8221;)</p>
<pre class="brush: php; title: ;">
//Rewrite rules per questo post type
$wc11_slides_rewrite = array(
'slug' =&gt; &quot;slides&quot;,
);
</pre>
<p>E&#8217; arrivato il momento di gestire gli altri parametri, come da <a href="http://codex.wordpress.org/Function_Reference/register_post_type#Parameters" target="_blank">Codex</a>. Tra i più importanti: public, has_archive, menu_position, hierarchical</p>
<pre class="brush: php; title: ;">
//Argomenti customizzati

$wc11_slides_args = array(
'public' = true,
'publicly_queryable' =&gt; true, //Default come su 'public'
'show_ui' =&gt; true, //Default come su 'public'
'exclude_from_search' =&gt; false,  //Default opposite to 'public'
'has_archive' =&gt; true,
'description' =&gt; &quot;Gestione delle Slides del Wordcamp&quot;,
'menu_position' =&gt; 5, //5 == Belowe Post link, 10 Belowe Media Link
'menu_icon' =&gt; &quot;http://icons.iconarchive.com/icons/icons-land/vista-multimedia/16/Slide-Show-icon.png&quot;,
'hierarchical' =&gt; false,
'labels' =&gt; $wc11_slides_labels ,
'supports' =&gt; $wc11_slides_supports,
'rewrite' =&gt; $wc11_slides_rewrite,
);
</pre>
<p>Ora possiamo finalmente registrare il nostro CPT &#8220;Slide&#8221;!</p>
<pre class="brush: php; title: ;">
//Finalmente registriamo il CPT
function create_wc11_slides_type() {
register_post_type( 'wc11_slides',$wc11_slides_args);
}
</pre>
<p>Partendo dagli stessi spunti, sarà possibile registrare altri tipi di dato, tra cui ad esempio gli Autori delle Slides.</p>
<p><a href="http://www.webeing.net/wp-content/uploads/manual/custom-post-types.php.zip">Il file completo</a> contiene tutto e di seguito vediamo il risultato</p>
<p><a href="http://www.webeing.net/code/files/2011/03/custom-panel-slides.png"><img class="alignnone size-medium wp-image-146" title="custom panel slides" src="http://www.webeing.net/code/files/2011/03/custom-panel-slides-300x174.png" alt="" width="300" height="174" /></a> <a href="http://www.webeing.net/code/files/2011/03/custom-menù.png"><img class="alignnone size-full wp-image-145" title="custom menù" src="http://www.webeing.net/code/files/2011/03/custom-menù.png" alt="" width="153" height="118" /></a></p>
<p>Se volete leggere qualcosa in più:</p>
<ol>
<li><a href="http://codex.wordpress.org/Post_Types" target="_blank">Codex: Post Types</a></li>
<li><a href="http://codex.wordpress.org/Function_Reference/register_post_type" target="_blank">Codex: Register Post Types </a></li>
<li><a href="http://codex.wordpress.org/Function_Reference/register_post_type#Parameters " target="_blank">Codex: Parameters </a></li>
</ol>
<p><span style="font-family: Georgia, 'Bitstream Charter', serif; line-height: 24px;">Prossima puntata: Write Panels!</span></p>
]]></content:encoded>
			<wfw:commentRss>http://www.webeing.net/code/2011/03/21/wordcamp-2011-wordpress-custom-contents-types-taxonomies/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>WP Rewrite Class: ovvero come ti riscrivo i permalink di una categoria WordPress</title>
		<link>http://www.webeing.net/code/2011/02/10/wp-rewrite-class-ovvero-come-ti-riscrivo-i-permalink-categoria-wordpress/</link>
		<comments>http://www.webeing.net/code/2011/02/10/wp-rewrite-class-ovvero-come-ti-riscrivo-i-permalink-categoria-wordpress/#comments</comments>
		<pubDate>Thu, 10 Feb 2011 10:26:26 +0000</pubDate>
		<dc:creator>Enrico Corinti</dc:creator>
				<category><![CDATA[Wordpress]]></category>
		<category><![CDATA[caso studio]]></category>
		<category><![CDATA[functions]]></category>
		<category><![CDATA[permalinks]]></category>
		<category><![CDATA[rewrite]]></category>
		<category><![CDATA[seo]]></category>
		<category><![CDATA[wordpress]]></category>

		<guid isPermaLink="false">http://www.webeing.net/code/?p=115</guid>
		<description><![CDATA[Era da tempo che volevo vedere il modulo di rewrite di WordPress, quel modulo che permette di tradurre le richieste del tipo http://www.miosito.it/?cat=3 in http://www.miosito.it/cateogry/categoria3/ e creare i tanto famosi Pretty Permalinks. Il sistema nativo di WordPress prevede già tutto, &#8230; <a href="http://www.webeing.net/code/2011/02/10/wp-rewrite-class-ovvero-come-ti-riscrivo-i-permalink-categoria-wordpress/">Continua a leggere<span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Era da tempo che volevo vedere il modulo di rewrite di WordPress, quel modulo che permette di tradurre le richieste del tipo</p>
<pre>http://www.miosito.it/?cat=3</pre>
<p>in</p>
<pre>http://www.miosito.it/cateogry/categoria3/</pre>
<p>e creare i tanto famosi <a href="http://codex.wordpress.org/Introduction_to_Blogging#Pretty_Permalinks">Pretty Permalinks</a>.</p>
<p>Il sistema nativo di WordPress prevede già tutto, ovviamente.</p>
<p>Ma che succede se questo non basta? Se il vostro cliente vi chiede una struttura più complessa? Ad esempio, supponiamo che vi chiedano di <a href="http://www.google.it/search?sourceid=chrome&amp;ie=UTF-8&amp;q=remove+category+base+wordpress">rimuovere il prefisso base &#8220;<em>category</em>&#8221; </a>o peggio che per questioni di retro-compatibilità o vezzo SEO ( &#8230;scherzo! ) vi chiedano che <strong>solo una determinata categoria debba avere un permalink particolare.</strong></p>
<p>Dopo aver provato varie soluzioni con la modifica dell&#8217;.htaccess (che comunque consiglio di vedere googlando un pò), ho approfondito il problema alla base e basandomi su <a href="http://www.bloggingtips.com/2009/02/01/remove-the-category-base/">questo articolo illuminante a riguardo</a> (finito subito sul <a href="http://delicious.com/enrico.corinti">mio delicious</a>) e sul Codex, ecco il mio caso.</p>
<p>La categoria da considerare era <em>Blogs</em>, più tutte le sotto categorie associate. Il sistema aveva una <a href="http://codex.wordpress.org/Settings_Permalinks_SubPanel">cateogria base inserita nella piattaforma</a> denominata &#8220;<em>cat</em>&#8220;. Si doveva fare in modo quindi che solo per questa categoria e figlie il link passasse da</p>
<p><em>http://miosito.it/cat/blogs/subcat</em> a <em>http://miosito.it/blogs/subcat</em></p>
<p>Il risultato è questo:</p>
<pre class="brush: php; title: ;">

/*
* Gestisce il rewrite della delle sottocategorie di Blogs, URL originaria /cat/blogs/SUBCAT =&gt; /blogs/SUBCAT
*/

/*
* Filtro le URL per riscriverle come voglio, rimpiazzando /cat/blogs/ con /blogs/ solo se siamo in una sotto-categoria
*/

add_filter('user_trailingslashit', 'remcat_function');
function remcat_function($link) {
global $post;
$idObj = get_category_by_slug('blogs');
$id = $idObj-&gt;term_id;
if(post_is_in_descendant_category($id, $post )){
return str_replace(&quot;/cat/blogs/&quot;, &quot;/blogs/&quot;, $link);
}
else
return $link;
}

/*
* Flush delle regole per aggiornarle con la mia nuova
*/
add_action('init', 'remcat_flush_rules');
function remcat_flush_rules() {
global $wp_rewrite;
$wp_rewrite-&gt;flush_rules();
}

/*
* Genera la regola di rewrite che associa la chiamata a
* /blogs/%SUBCAT% alla richiesta vera index.php?category_name=%SUBCAT%
* Aggiungo poi la regola all'elenco delle altre
*/
add_filter('generate_rewrite_rules', 'remcat_rewrite');
function remcat_rewrite($wp_rewrite) {
$new_rules = array('blogs/(.+)/?' =&gt; 'index.php?category_name='.$wp_rewrite-&gt;preg_index(1));
$wp_rewrite-&gt;rules = $new_rules + $wp_rewrite-&gt;rules;
}
</pre>
<p>Una piccola nota: ho usato la funzione</p>
<pre>post_is_in_descendant_category($cat_ID,$post)</pre>
<p>che potete trovare <a href="http://codex.wordpress.org/Function_Reference/in_category#post_is_in_descendant_category_function">documentata qui</a> e che controlla se la categoria del post passato come parametro è figlia di quella passata con l&#8217;ID.</p>
<p>Inserite il codice in functions.php e il gioco è fatto: visitanto <em>http://miosito.it/cat/blog/subcat</em> verrete reindirizzati su <em>http://miosito.it/blog/subcat</em></p>
<p>Commenti e opinioni a voi.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.webeing.net/code/2011/02/10/wp-rewrite-class-ovvero-come-ti-riscrivo-i-permalink-categoria-wordpress/feed/</wfw:commentRss>
		<slash:comments>9</slash:comments>
		</item>
	</channel>
</rss>

