<?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>Il Jester</title>
	<atom:link href="http://www.iljester.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.iljester.com</link>
	<description>Wordpress, PHP, CSS e Javascript tips!</description>
	<lastBuildDate>Tue, 13 Aug 2019 07:59:46 +0000</lastBuildDate>
	<language>it-IT</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	
	<item>
		<title>Gutenberg. Il punto sul nuovo editor WordPress</title>
		<link>http://www.iljester.com/gutemberg-il-punto-sul-nuovo-editor-wordpress-2227/</link>
		<comments>http://www.iljester.com/gutemberg-il-punto-sul-nuovo-editor-wordpress-2227/#comments</comments>
		<pubDate>Sun, 30 Sep 2018 08:56:27 +0000</pubDate>
		<dc:creator><![CDATA[Davide]]></dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[Wordpress]]></category>
		<category><![CDATA[editor wordpress]]></category>
		<category><![CDATA[gutemberg]]></category>
		<category><![CDATA[wordpress]]></category>

		<guid isPermaLink="false">http://www.iljester.it/?p=2227</guid>
		<description><![CDATA[&#160;&#160;Attenzione! Questo post non &#232; stato pi&#249; aggiornato da almeno 90 giorni. Potrebbe contenere dati, notizie e scripts non aggiornati o non in linea con gli attuali standard! Con la versione 5.0 di WordPress (ormai imminente) verrà probabilmente reso di default il nuovo editor Gutenberg. Personalmente,... <a class="read-more" href="http://www.iljester.com/gutemberg-il-punto-sul-nuovo-editor-wordpress-2227/" data-wpel-link="internal">Leggi di più &#8594;</a>]]></description>
				<content:encoded><![CDATA[<div class="hyphenate"><div class="alert alert-warning"><i class="fa fa-exclamation-triangle" aria-hidden="true"></i>&nbsp;&nbsp;Attenzione! Questo post non &egrave; stato pi&ugrave; aggiornato da almeno 90 giorni. Potrebbe contenere dati, notizie e scripts non aggiornati o non in linea con gli attuali standard!</div>
<p style="text-align: justify;">Con la versione 5.0 di WordPress (ormai imminente) verrà probabilmente reso di default il nuovo editor <em>Gutenberg</em>. Personalmente, incuriosito, l&#8217;ho provato in anteprima, installando il relativo plugin, e devo dire che non sono rimasto affatto soddisfatto e prevedo notevoli problemi di adattamento per chi è abituato a utilizzare il comodo editor Tinymce.</p>
<p style="text-align: justify;">In generale, confermo le critiche che sono state fatte nei vari blog che si occupano di WordPress. Il nuovo editor, basato sui blocchi, e dunque su un approccio completamente differente rispetto all&#8217;editor tradizionale, è caotico e scarsamente gestibile nelle dinamiche che gestiscono le sue funzionalità. Inoltre, non è ancora ben chiaro come dovranno essere gestiti i metabox, che seppure funzionano anche con il nuovo editor (non tutti a quanto pare), in alcuni casi creano effetti bizzarri nel layout.</p>
<p style="text-align: justify;">A mio modesto avviso, il team di WordPress sta facendo un grossolano errore, nell&#8217;imporre <em>Gutenberg </em>come editor di default. Sarebbe stato più opportuno che il nuovo editor venisse proposto come un&#8217;alternativa all&#8217;editor tradizionale. La scelta avrebbe dovuto spettare all&#8217;utente finale: utilizzare Gutenberg oppure l&#8217;editor classico, supportandoli entrambi.</p>
<p style="text-align: justify;">Ma il fatto stesso che WordPress 5.0 non sia ancora stato rilasciato, forse suggerisce che gli sviluppatori WordPress stiano prendendo tempo (in realtà già preso, visto che <em>Gutenberg</em> avrebbe dovuto essere rilasciato già da qualche mese) per cercare quanto meno di correggere i bug e le eventuali distorsioni e le scomodità legate al nuovo editor, anche se nelle discussioni relative al rilascio di WP 5, emerge inequivocabile la necessità di adattare WordPress all&#8217;imminente rilascio di PHP 7.3. Dunque è probabile che nell&#8217;immediatezza, verrà rilasciata una release intermedia (la 4.9.9), e forse a fine 2018 (tra novembre e dicembre) la major relase.</p>
<p style="text-align: justify;">In ogni caso, da quanto emerge dalle discussioni negli ambienti di sviluppo WordPress, non sembra ci siano passi indietro rispetto all&#8217;implementazione di default di Gutenberg, anche perché esso rappresenterà un&#8217;occasione per fare nuovo business, attraverso i blocchi premium, implementabili per mezzo degli shortcode.</p>
<p style="text-align: justify;">Comunque, non disperiamo. Per chi non volesse utilizzare il nuovo editor, c&#8217;è sempre la possibilità &#8211; tramite plugin &#8211; di utilizzare il vecchio e attuale editor TinyMCE. Il problema si pone alla fine solo per gli sviluppatori di temi e plugin, che dovranno fare i conti con la nuova architettura per sviluppare i loro script.</p>
</div>]]></content:encoded>
			<wfw:commentRss>http://www.iljester.com/gutemberg-il-punto-sul-nuovo-editor-wordpress-2227/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>Disabilitare l&#8217;editor del post su WordPress</title>
		<link>http://www.iljester.com/disabilitare-leditor-del-post-su-wordpress-2111/</link>
		<pubDate>Sat, 07 Oct 2017 14:48:02 +0000</pubDate>
		<dc:creator><![CDATA[Davide]]></dc:creator>
				<category><![CDATA[Wordpress]]></category>
		<category><![CDATA[disabilitare editor]]></category>
		<category><![CDATA[editor]]></category>
		<category><![CDATA[sicurezza]]></category>

		<guid isPermaLink="false">http://www.iljester.it/?p=2111</guid>
		<description><![CDATA[&#160;&#160;Attenzione! Questo post non &#232; stato pi&#249; aggiornato da almeno 90 giorni. Potrebbe contenere dati, notizie e scripts non aggiornati o non in linea con gli attuali standard! L&#8217;editor del tema in WordPress, per chi sviluppa, non è molto utile, seppure esistano diversi plugin che... <a class="read-more" href="http://www.iljester.com/disabilitare-leditor-del-post-su-wordpress-2111/" data-wpel-link="internal">Leggi di più &#8594;</a>]]></description>
				<content:encoded><![CDATA[<div class="hyphenate"><div class="alert alert-warning"><i class="fa fa-exclamation-triangle" aria-hidden="true"></i>&nbsp;&nbsp;Attenzione! Questo post non &egrave; stato pi&ugrave; aggiornato da almeno 90 giorni. Potrebbe contenere dati, notizie e scripts non aggiornati o non in linea con gli attuali standard!</div>
<p style="text-align: justify;">L&#8217;editor del tema in WordPress, per chi sviluppa, non è molto utile, seppure esistano diversi plugin che applicano un sistema IDE che permette l&#8217;evidenziazione della sintassi e dunque un facile intervento sul file relativo. Ma è chiaro, che inserire codice o correggerlo dall&#8217;editor, può creare qualche complicanza, qualora si facciano degli errori. E per chi non è esperto, l&#8217;uso errato dell&#8217;editor può bloccare il sito web.</p>
<p style="text-align: justify;">Di più. E&#8217; noto che l&#8217;editor del tema e dei plugin su WordPress <strong>può rappresentare un problema per la sicurezza</strong>. Infatti, lo scopo di un hacker è quello di usare gli editor per iniettare malaware o per fare blackhat SEO, ovvero per inserire link a risorse dannose per l&#8217;utente che le clicca. Questo avviene in un modo piuttosto semplice: il sito viene &#8220;bucato&#8221; con un attacco di forza bruta, e ottenuti i privilegi di amministratore, gli hacker iniettano &#8211; tramite l&#8217;editor del tema e dei plugin &#8211; i loro codici malevoli.</p>
<p style="text-align: justify;">Questa è sicuramente una validissima ragione per disabilitarli. Dunque, non ci resta che procedere, e il lavoro è abbastanza semplice: questione di una manciata di secondi. Si apre il file wp-config.php, e si aggiunge questa linea di codice:</p>
<p></p><pre class="crayon-plain-tag">define( 'DISALLOW_FILE_EDIT', true );</pre><p></p>
<p style="text-align: justify;">A questo punto gli editor dovrebbero essere tutti disattivati. Nessuno potrà accedervi, nemmeno chi viola il vostro sito web. E in questo caso, per modificare i vostri temi e i vostri plugin, dovrete rivolgervi al buon vecchio FTP client, che è la cosa migliore da fare.</p>
</div>]]></content:encoded>
			</item>
		<item>
		<title>Sanitizzazione, validazione ed escaping dei dati</title>
		<link>http://www.iljester.com/sanitizzazione-validazione-ed-escaping-dei-dati-2069/</link>
		<pubDate>Mon, 02 Oct 2017 20:18:21 +0000</pubDate>
		<dc:creator><![CDATA[Davide]]></dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[Wordpress]]></category>
		<category><![CDATA[cracking]]></category>
		<category><![CDATA[dati]]></category>
		<category><![CDATA[escaping]]></category>
		<category><![CDATA[sanitizzazione]]></category>
		<category><![CDATA[sql injection]]></category>
		<category><![CDATA[validazione]]></category>
		<category><![CDATA[xss]]></category>

		<guid isPermaLink="false">http://www.iljester.it/?p=2069</guid>
		<description><![CDATA[&#160;&#160;Attenzione! Questo post non &#232; stato pi&#249; aggiornato da almeno 90 giorni. Potrebbe contenere dati, notizie e scripts non aggiornati o non in linea con gli attuali standard! Nello sviluppo di uno script in php, compresi i plugin e i temi WordPress, un aspetto importante... <a class="read-more" href="http://www.iljester.com/sanitizzazione-validazione-ed-escaping-dei-dati-2069/" data-wpel-link="internal">Leggi di più &#8594;</a>]]></description>
				<content:encoded><![CDATA[<div class="hyphenate"><div class="alert alert-warning"><i class="fa fa-exclamation-triangle" aria-hidden="true"></i>&nbsp;&nbsp;Attenzione! Questo post non &egrave; stato pi&ugrave; aggiornato da almeno 90 giorni. Potrebbe contenere dati, notizie e scripts non aggiornati o non in linea con gli attuali standard!</div>
<p style="text-align: justify;">Nello sviluppo di uno script in php, compresi i plugin e i temi WordPress, un aspetto importante e direi fondamentale è la sanitizzazione, la validazione e l&#8217;escaping del codice creato. Queste attività, piuttosto noiose, sono fondamentali per scrivere codice sicuro, e dunque evitare &#8211; per quanto possibile &#8211; iniezione di codice malevolo nei nostri script, finalizzato a violare i dati contenuti nel sito web.</p>
<p style="text-align: justify;">Diverse sono le tecniche di cracking che possono essere utilizzate per &#8220;bucare&#8221; uno script in php. In primo luogo, abbiamo i cosiddetti attacchi XSS. Da Wikipedia:</p>
<blockquote>
<p style="text-align: justify;">Il <b>Cross-site scripting</b> (<b>XSS</b>) è una vulnerabilità che affligge siti web dinamici che impiegano un insufficiente controllo dell&#8217;input nei form. Un XSS permette ad un Cracker di inserire o eseguire codice lato client al fine di attuare un insieme variegato di attacchi quali ad esempio: raccolta, manipolazione e reindirizzamento di informazioni riservate, visualizzazione e modifica di dati presenti sui server, alterazione del comportamento dinamico delle pagine web ecc.</p>
</blockquote>
<p style="text-align: justify;">Un altro tipo di attacco, piuttosto pericoloso, è il cosiddetto &#8220;sql injection&#8221;. Sempre da Wikipedia:</p>
<blockquote>
<p style="text-align: justify;"><b>SQL injection</b> è una tecnica di code injection, usata per attaccare applicazioni di gestione dati, con la quale vengono inserite delle stringhe di codice SQL malevole all&#8217;interno di campi di input in modo che queste ultime vengano poi eseguite (ad esempio per fare inviare il contenuto del database all&#8217;attaccante).<sup id="cite_ref-1" class="reference">[1]</sup> L&#8217;SQL injection sfrutta le vulnerabilità di sicurezza del codice di un&#8217;applicazione, ad esempio quando l&#8217;input dell&#8217;utente non è correttamente filtrato da &#8216;caratteri di escape&#8217; contenuti nelle stringhe SQL oppure non è fortemente tipizzato e viene eseguito inaspettatamente. L&#8217;SQL injection è più conosciuto come attacco per i siti web, ma è anche usato per attaccare qualsiasi tipo di database SQL.</p>
</blockquote>
<p style="text-align: justify;">Questo genere di attacchi, <strong>possono creare notevoli danni ai siti web,</strong> ecco perché è necessario, operare tutte le cautele del caso, anche se poi &#8211; è chiaro &#8211; non sempre queste sono sufficienti. Ciò perché i cracker trovano sempre modi nuovi per attaccare un sito web, e poi perché nello sviluppo può sempre sfuggire qualcosa, anche se ciò non dovrebbe mai accadere.</p>
<p style="text-align: justify;">PHP metta a disposizione diverse funzioni per fare la sanitizzazione, la validazione e l&#8217;escaping dei dati. In particolare, per quanto riguarda il pericolo di SQL injection, è buona norma, oggi, per quanto riguarda l&#8217;uso di database Mysql, utilizzare una connessione PDO. Questo tipo di connessione, riduce fortemente, fino a eliminare quasi del tutto, il pericolo di sql injection. Quasi del tutto, perché il sistema di connessione tramite PDO comunque potrebbe venire aggirato, come viene spiegato <a href="https://stackoverflow.com/questions/134099/are-pdo-prepared-statements-sufficient-to-prevent-sql-injection" data-wpel-link="external" target="_self" rel="external noopener noreferrer" class="ext-link wpel-icon-right">qui<span class="wpel-icon wpel-image wpel-icon-5"></span></a>.</p>
<p style="text-align: justify;">Ciò detto, per una questione di sicurezza, è sempre opportuno sanitizzare e validare i dati prima di inserirli nel database. Soprattutto quando questi dati vengono inseriti dagli utenti che navigano sul sito web. In particolare mi riferisco ai dati ottenuti tramite le variabili <code>$_GET</code>, <code>$_POST,</code> <code>$_REQUEST</code>. Bisogna sempre considerare i dati inviati tramite queste variabili, come <em>unsafe</em>, cioè come non sicuri.</p>
<p style="text-align: justify;">PHP per la sanitizzazione e la validazione dei dati, ci viene in aiuto con le funzioni <code>filter_input</code> e <code>filter_var,</code> che dispongono di diversi flag, utili per filtrarli e validarli. Per un elenco esaustivo, consultare la pagina dei <a href="http://php.net/manual/en/filter.filters.php" data-wpel-link="external" target="_self" rel="external noopener noreferrer" class="ext-link wpel-icon-right">type of filters<span class="wpel-icon wpel-image wpel-icon-5"></span></a>.</p>
<p style="text-align: justify;">L&#8217;escaping dei dati, è altresì importante, e si fa sull&#8217;output, e cioè sui dati ottenuti attraverso una query e stampati a video. La funzione più utilizzata per fare l&#8217;escaping dell&#8217;output, sono <code>htmlspecialchars</code> e <code>urlencode</code> che codificano una serie di caratteri speciali, i quali possono essere sfruttati per le varie tecniche di cracking  dei siti web (e in particolare le azioni xss).</p>
<h3 style="text-align: justify;">Validazione, sanitizzazione ed escaping su WordPress</h3>
<p style="text-align: justify;">WordPress, offre una serie di funzioni per le attività di validazione, sanitizzazione ed escaping dell&#8217;output. E&#8217; inutile dire che gli sviluppatori WordPress consigliano altamente di utilizzarli quando si progettano temi e plugin. Qualora poi si volessero passare delle variabili tramite un form, WordPress <a href="https://codex.wordpress.org/WordPress_Nonces" data-wpel-link="external" target="_self" rel="external noopener noreferrer" class="ext-link wpel-icon-right">mette a disposizione<span class="wpel-icon wpel-image wpel-icon-5"></span></a> pure un sistema di validazione della pagina che limita (ma potrebbe non impedire) quelle tecniche malevoli che sfruttano i form per creare, per esempio, azioni xss.</p>
<p style="text-align: justify;">Infine, al di là degli accorgimenti tecnici che possono essere utilizzati in fase di sviluppo di un codice php e che rispondono, notoriamente, alle regole di buona pratica, è necessario comunque ricordare che è sempre opportuno che il gestore del sito web provveda periodicamente a fare un backup completo del proprio sito, ciò per evitare le conseguenze immediate di un&#8217;eventuale violazione, quali ad esempio la perdita definitiva dei dati (articoli, pagine, utenti ecc.).</p>
</div>]]></content:encoded>
			</item>
		<item>
		<title>Creare un filtro per WordPress</title>
		<link>http://www.iljester.com/creare-un-filtro-per-wordpress-2062/</link>
		<pubDate>Mon, 02 Oct 2017 10:14:10 +0000</pubDate>
		<dc:creator><![CDATA[Davide]]></dc:creator>
				<category><![CDATA[Wordpress]]></category>
		<category><![CDATA[apply_filters]]></category>
		<category><![CDATA[filtri]]></category>

		<guid isPermaLink="false">http://www.iljester.it/?p=2062</guid>
		<description><![CDATA[&#160;&#160;Attenzione! Questo post non &#232; stato pi&#249; aggiornato da almeno 90 giorni. Potrebbe contenere dati, notizie e scripts non aggiornati o non in linea con gli attuali standard! WordPress, per le proprie necessità, e per tutte le implementazioni e customizzazioni, utilizza delle potenti API. Tra... <a class="read-more" href="http://www.iljester.com/creare-un-filtro-per-wordpress-2062/" data-wpel-link="internal">Leggi di più &#8594;</a>]]></description>
				<content:encoded><![CDATA[<div class="hyphenate"><div class="alert alert-warning"><i class="fa fa-exclamation-triangle" aria-hidden="true"></i>&nbsp;&nbsp;Attenzione! Questo post non &egrave; stato pi&ugrave; aggiornato da almeno 90 giorni. Potrebbe contenere dati, notizie e scripts non aggiornati o non in linea con gli attuali standard!</div>
<p style="text-align: justify;">WordPress, per le proprie necessità, e per tutte le implementazioni e customizzazioni, utilizza delle potenti API. Tra queste spiccano in particolar modo, i filtri. I filtri ci permettono di fare numerose personalizzazioni del nostro tema e dei nostri plugin. Possiamo usare i filtri ufficiali, implementati nel core di WordPress, oppure, <strong>possiamo crearne di nuovi,</strong> quando questi si rendono necessari. Chiaramente, quest&#8217;ultima opzione è solitamente utilizzata dagli sviluppatori di plugin, che in questo modo permettono ad altri sviluppatori o ai semplici utenti che usano il plugin di estenderlo o modificarne alcune impostazioni, in ragione delle personali esigenze.</p>
<p style="text-align: justify;">In un mio precedente articolo, <a href="http://www.iljester.it/lutilizzo-di-add_filter-per-filtrare-il-contenuto-del-nostro-post-424/" data-wpel-link="external" target="_self" rel="external noopener noreferrer" class="ext-link wpel-icon-right">ho spiegato come utilizzare i filtri ufficiali<span class="wpel-icon wpel-image wpel-icon-5"></span></a>. Qui spiego brevemente come crearne uno. La funzione &#8220;magica&#8221; è <code>apply_filters()</code>, la quale ci permette di filtrare i dati che intendiamo poi visualizzare a video o inserire nel database. Ecco un semplice esempio:</p>
<p></p><pre class="crayon-plain-tag">function foo() {
      $foo = 'foo';
      $foo = apply_filters( 'mio-dato', $foo );
      return $foo;
}

// per filtrare foo e aggiungere il valore bar all'output, 
// non ci resta che filtrarlo:

function bar( $foo ) {
      $foo .= ' bar';
      return $foo;
}
add_filter( 'mio-dato', 'bar' );

// il risultato sarà
(string) "foo bar"</pre><p></p>
<p style="text-align: justify;">Chiaramente, qualora i valori da passare siano più di uno, dovete poi indicare il numero di valori che passate, così come viene illustrato <a href="https://developer.wordpress.org/reference/functions/apply_filters/" data-wpel-link="external" target="_self" rel="external noopener noreferrer" class="ext-link wpel-icon-right">nella pagina di sviluppo WordPress <span class="wpel-icon wpel-image wpel-icon-5"></span></a>che si occupa di questa funzione.</p>
<p style="text-align: justify;">I filtri dunque sono un potente strumento che potete utilizzare soprattutto quando sviluppate plugin e temi che volete si prestino a diverse personalizzazioni. Il difetto di questo sistema, è che si presta a pericolosi infiltrazioni di codice malevolo qualora i dati passati con i filtri non vengano correttamente sanitizzati e puliti.</p>
</div>]]></content:encoded>
			</item>
		<item>
		<title>Aggiungere un pulsante all&#8217;editor tinymce di WordPress</title>
		<link>http://www.iljester.com/aggiungere-un-pulsante-alleditor-tinymce-di-wordpress-361/</link>
		<pubDate>Thu, 12 May 2016 22:22:23 +0000</pubDate>
		<dc:creator><![CDATA[Davide]]></dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[Wordpress]]></category>

		<guid isPermaLink="false">http://painterweb.it/?p=361</guid>
		<description><![CDATA[&#160;&#160;Attenzione! Questo post non &#232; stato pi&#249; aggiornato da almeno 90 giorni. Potrebbe contenere dati, notizie e scripts non aggiornati o non in linea con gli attuali standard! Con l&#8217;aggiornamento all&#8217;ultime versioni del noto plugin Tinymce Advanced (che utilizzo sui miei blog), è scomparso il... <a class="read-more" href="http://www.iljester.com/aggiungere-un-pulsante-alleditor-tinymce-di-wordpress-361/" data-wpel-link="internal">Leggi di più &#8594;</a>]]></description>
				<content:encoded><![CDATA[<div class="hyphenate"><div class="alert alert-warning"><i class="fa fa-exclamation-triangle" aria-hidden="true"></i>&nbsp;&nbsp;Attenzione! Questo post non &egrave; stato pi&ugrave; aggiornato da almeno 90 giorni. Potrebbe contenere dati, notizie e scripts non aggiornati o non in linea con gli attuali standard!</div>
<p style="text-align: justify;">Con l&#8217;aggiornamento all&#8217;ultime versioni del noto plugin Tinymce Advanced (che utilizzo sui miei blog), <strong>è scomparso il pulsante &#8220;cite&#8221;, da me molto usato quando devo riportare brevi citazioni</strong>. La differenza con il blockquote è evidente: con quest&#8217;ultimo si riportano brani più lunghi in un paragrafo a parte; con il <code>&lt;cite&gt;</code>, brani più brevi, nella stessa linea del testo.</p>
<p style="text-align: justify;">Dunque dovevo trovare una soluzione che potesse colmare la lacuna (si spera temporanea). <strong>Quanto meno finché non troverò una soluzione più &#8220;pulita&#8221;</strong> o gli sviluppatori di Tinymce Advanced non decidano di reinserire nel plugin i pulsanti xhtml.</p>
<p style="text-align: justify;">Ancora una volta, la soluzione è piuttosto semplice. Non si deve far altro che incollare il seguente codice nel file <code>functions.php</code>:</p>
<p></p><pre class="crayon-plain-tag">/* add custom cite button */
add_action('init', 'add_button');  
function add_button() {  
   if ( current_user_can('edit_posts') &amp;&amp;  current_user_can('edit_pages') )  
   {  
     add_filter('mce_external_plugins', 'add_plugin');  
     add_filter('mce_buttons_3', 'register_button');  
   }  
}  
function register_button($buttons) {  
   array_push($buttons, "cite");  
   return $buttons;  
}  
function add_plugin($plugin_array) {  
   $plugin_array['cite'] = get_template_directory_uri() .'/js/cite_tinymce.js';
   return $plugin_array;  
}</pre><p></p>
<p style="text-align: justify;">All&#8217;interno della cartella del tema dove avete i vostri file .js (file che contengono javascript), dovete poi inserire un nuovo file js, che io ho chiamato cite_tiny_mce.js, ma che ognuno può chiamare come meglio crede, anche perché <strong>la funzione può essere utilizzata per l&#8217;inserimento di qualsiasi pulsante all&#8217;interno dell&#8217;editor</strong>. Nel file .js, dovete inserire questo codice javascript:</p>
<p></p><pre class="crayon-plain-tag">(function() {
     /* Register the buttons */
     tinymce.create('tinymce.plugins.cite', {
          init : function(ed, url) {
               /**
               * Adds HTML tag to selected content
               */
               ed.addButton( 'cite', {
                    title : 'Add cite',
                    image : '../wp-content/themes/dmtheme/images/cite.png',
                    cmd: 'cite_cmd'
               });
               ed.addCommand( 'cite_cmd', function() {
                    var selected_text = ed.selection.getContent();
                    var return_text = '';
                    return_text = '&lt;cite&gt;' + selected_text + '&lt;/cite&gt;';
                    ed.execCommand('mceInsertContent', 0, return_text);
               });
          }/*,
           createControl : function(n, cm) {
               return null;
          }, */
     });
     /* Start the buttons */
     tinymce.PluginManager.add( 'cite', tinymce.plugins.cite );
})();</pre><p></p>
<p style="text-align: justify;">Ovviamente, all&#8217;indirizzo relativo all&#8217;immagine, inserite un&#8217;immagine che possa meglio rappresentare il vostro pulsante. Nel caso di &#8220;cite&#8221; io <strong>ho creato un&#8217;immagine con i sergenti alti</strong>. Niente di trascendentale. L&#8217;importante è che faccia il suo sporco lavoro:</p>
<p style="text-align: justify;"><img class="aligncenter size-full wp-image-2026" src="http://www.iljester.it/wp-content/uploads/2014/05/cite-650x247.png" alt="cite-650x247" width="650" height="247" srcset="http://www.iljester.com/wp-content/uploads/2014/05/cite-650x247.png 650w, http://www.iljester.com/wp-content/uploads/2014/05/cite-650x247-300x114.png 300w" sizes="(max-width: 650px) 100vw, 650px" /></p>
</div>]]></content:encoded>
			</item>
		<item>
		<title>WordPress. Personalizzare l&#8217;excerpt di condivisione opengraph con i campi personalizzati</title>
		<link>http://www.iljester.com/wordpress-personalizzare-lexcerpt-di-condivisione-e-dei-meta-tag-con-i-campi-personalizzati-214/</link>
		<pubDate>Wed, 11 May 2016 16:24:26 +0000</pubDate>
		<dc:creator><![CDATA[Davide]]></dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[Wordpress]]></category>
		<category><![CDATA[condivisione]]></category>
		<category><![CDATA[facebook]]></category>
		<category><![CDATA[opengraph]]></category>

		<guid isPermaLink="false">http://painterweb.it/?p=214</guid>
		<description><![CDATA[&#160;&#160;Attenzione! Questo post non &#232; stato pi&#249; aggiornato da almeno 90 giorni. Potrebbe contenere dati, notizie e scripts non aggiornati o non in linea con gli attuali standard! Quando condividiamo i nostri articoli su Facebook, lo script che si occupa della condivisione estrae dall&#8217;articolo l&#8217;incipit,... <a class="read-more" href="http://www.iljester.com/wordpress-personalizzare-lexcerpt-di-condivisione-e-dei-meta-tag-con-i-campi-personalizzati-214/" data-wpel-link="internal">Leggi di più &#8594;</a>]]></description>
				<content:encoded><![CDATA[<div class="hyphenate"><div class="alert alert-warning"><i class="fa fa-exclamation-triangle" aria-hidden="true"></i>&nbsp;&nbsp;Attenzione! Questo post non &egrave; stato pi&ugrave; aggiornato da almeno 90 giorni. Potrebbe contenere dati, notizie e scripts non aggiornati o non in linea con gli attuali standard!</div>
<p style="text-align: justify;"><img class="alignleft size-dashedone_200_box wp-image-2008" src="http://www.iljester.it/wp-content/uploads/2016/05/facebook-condividi-481x199-200x199.jpg" alt="facebook-condividi-481x199" width="200" height="199" />Quando condividiamo i nostri articoli su Facebook, lo script che si occupa della condivisione estrae dall&#8217;articolo l&#8217;incipit, e cioè la parte iniziale dell&#8217;articolo. Tuttavia, non sempre questo è utile per attirare lettori. Anzi, in un certo senso, dall&#8217;incipit non è molto agevole (a parte il titolo) <strong>capire esattamente quale sarà il tenore del contenuto.</strong> Ecco che allora abbiamo la necessità di &#8220;personalizzare&#8221; l&#8217;estratto che verrà pubblicato su Facebook.</p>
<p style="text-align: justify;">Già il noto social network ci viene incontro, dandoci la possibilità di modificare il riassunto al momento della condivisione &#8220;diretta&#8221; sulla pagina o sul profilo. <strong>Tuttavia è chiaro che questo non è un sistema agevole né definitivo, perché coinvolge solo le condivisioni &#8220;figlie&#8221; e cioè quelle che discendono dalla nostra.</strong> Mentre gli utenti che condividono l&#8217;articolo cliccando sul pulsante &#8220;Mi Piace&#8221; o &#8220;Condividi&#8221; presenti sul sito, avranno come excerpt le prime parole del nostro contenuto o addirittura nulla.</p>
<p style="text-align: justify;">Per ovviare, è necessario che l&#8217;autore possa personalizzare questo contenuto <strong>prima della pubblicazione</strong> (o anche dopo). Per questo, ci vengono in aiuto i meta valori dei campi &#8220;personalizzati&#8221; (per gli utenti più esperti, sarà invece possibile creare meta-box ad hoc).</p>
<p style="text-align: justify;">Prima di tutto è necessario mettere mano al tema, nella sezione dedicata agli opengraph (solitamente posizionati nell&#8217;header). Se non avete gli opengraph, <a href="https://developers.facebook.com/docs/opengraph/howtos/maximizing-distribution-media-content" target="_blank" data-wpel-link="external" rel="external noopener noreferrer" class="ext-link wpel-icon-right">qui la documentazione<span class="wpel-icon wpel-image wpel-icon-5"></span></a>. Quello che dovete sapere è che bisogna inserirli tra i tag head nell&#8217;header del vostro blog o sito. Dando per scontato che abbiate gli opengraph nel vostro template, dovete cercare questa riga:</p>
<p></p><pre class="crayon-plain-tag">&lt;meta property="og:description" content="" /&gt;</pre><p></p>
<p style="text-align: justify;">Se questa riga è vuota, Facebook potrebbe valorizzare il campo con l&#8217;incipit del vostro articolo. <strong>Noi vogliamo fare in modo che utilizzi invece un contenuto personalizzato.</strong> Per farlo, sfrutteremo i campi personalizzati (attivabili da &#8220;Impostazioni Schermata&#8221;). Dovremo creare una chiave, che chiameremo &#8220;description&#8221;. Dopo di che alla chiave &#8220;description&#8221;, sul campo di destra, assegneremo un valore, che sarà il contenuto personalizzato. Esempio: &#8220;<em>Ho scritto questo articolo per vedere se verrà condiviso su Facebook. Nel caso non lo fosse, allora vuol dire che ne scriverò uno nuovo</em>&#8220;. Come da questo screenshot:<img class="aligncenter wp-image-2020 size-full" src="http://www.iljester.it/wp-content/uploads/2016/05/Immagine-1.jpg" alt="Immagine-1" width="841" height="285" srcset="http://www.iljester.com/wp-content/uploads/2016/05/Immagine-1.jpg 841w, http://www.iljester.com/wp-content/uploads/2016/05/Immagine-1-300x102.jpg 300w, http://www.iljester.com/wp-content/uploads/2016/05/Immagine-1-768x260.jpg 768w, http://www.iljester.com/wp-content/uploads/2016/05/Immagine-1-400x136.jpg 400w, http://www.iljester.com/wp-content/uploads/2016/05/Immagine-1-200x68.jpg 200w, http://www.iljester.com/wp-content/uploads/2016/05/Immagine-1-150x51.jpg 150w" sizes="(max-width: 841px) 100vw, 841px" /></p>
<p style="text-align: justify;">Ma non è finita qui. Una volta che clicchiamo sul pulsante &#8220;Aggiungi campo personalizzato&#8221; e salviamo l&#8217;articolo, dovremo fare in modo che il contenuto (il valore) venga <em>stampato</em> all&#8217;interno di <span style="background-color: #eff5f1; color: #017501; font-family: 'Courier 10 Pitch', Courier, monospace; font-size: 0.9em; line-height: 18px;">&lt;meta property=&#8221;og:description&#8221; content=&#8221;&#8221; /&gt;</span>. Affinché ciò avvenga dobbiamo richiamare il meta-valore sul nostro tema, <strong>e qui ci viene in aiuto WordPress con la funzione <code><a href="http://codex.wordpress.org/Function_Reference/get_post_meta" target="_blank" data-wpel-link="external" rel="external noopener noreferrer" class="ext-link wpel-icon-right">get_post_meta<span class="wpel-icon wpel-image wpel-icon-5"></span></a></code>.</strong> Ma questa funzione è stata studiata per funzionare all&#8217;interno di un loop WordPress. Per restituire un valore fuori dal loop, dobbiamo &#8220;intercettare&#8221; l&#8217;ID del post (richiesto), usando il valore globale <code>$post</code>. Ecco dunque il codice completo:</p>
<p></p><pre class="crayon-plain-tag">&lt;?php global $post; 
$opengraph_content = get_post_meta($post-&gt;ID, 'description', true); ?&gt;</pre><p></p>
<p style="text-align: justify;">A questo punto il nostro obiettivo è quasi raggiunto:</p>
<p></p><pre class="crayon-plain-tag">&lt;meta property="og:description" content="&lt;?php echo $opengraph_content; ?&gt;" /&gt;</pre><p></p>
<p style="text-align: justify;">Naturalmente potete fare in modo che là dove non dovesse essere impostato alcun valore in &#8220;description&#8221;, venga restituito certamente l&#8217;incipit del post, magari con un&#8217;altra funzione WordPress che assolva questo compito. In tal caso è necessario creare una funzione php più complessa che venga richiamata in <em>content</em>.</p>
</div>]]></content:encoded>
			</item>
		<item>
		<title>WordPress. Creare un custom post type in modo semplice e veloce</title>
		<link>http://www.iljester.com/wordpress-creare-un-custom-post-type-in-modo-semplice-e-veloce-336/</link>
		<pubDate>Wed, 11 May 2016 12:44:05 +0000</pubDate>
		<dc:creator><![CDATA[Davide]]></dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[Wordpress]]></category>
		<category><![CDATA[custom post]]></category>
		<category><![CDATA[post type]]></category>

		<guid isPermaLink="false">http://painterweb.it/?p=336</guid>
		<description><![CDATA[&#160;&#160;Attenzione! Questo post non &#232; stato pi&#249; aggiornato da almeno 90 giorni. Potrebbe contenere dati, notizie e scripts non aggiornati o non in linea con gli attuali standard! In un altro articolo ho spiegato come creare delle tassonomie personalizzate. Ora è interessante spiegare come possiamo creare... <a class="read-more" href="http://www.iljester.com/wordpress-creare-un-custom-post-type-in-modo-semplice-e-veloce-336/" data-wpel-link="internal">Leggi di più &#8594;</a>]]></description>
				<content:encoded><![CDATA[<div class="hyphenate"><div class="alert alert-warning"><i class="fa fa-exclamation-triangle" aria-hidden="true"></i>&nbsp;&nbsp;Attenzione! Questo post non &egrave; stato pi&ugrave; aggiornato da almeno 90 giorni. Potrebbe contenere dati, notizie e scripts non aggiornati o non in linea con gli attuali standard!</div>
<p style="text-align: justify;"><img class="aligncenter wp-image-1996 size-post-thumbnail" src="http://www.iljester.it/wp-content/uploads/2014/05/customposttype-700x300-672x300.png" alt="customposttype-700x300" width="672" height="300" />In un altro articolo ho spiegato <a title="Creare tassonomie personalizzate per WordPress" href="http://www.iljester.it/creare-tassonomie-personalizzate-per-wordpress-259/" data-wpel-link="external" target="_self" rel="external noopener noreferrer" class="ext-link wpel-icon-right">come creare delle tassonomie personalizzate<span class="wpel-icon wpel-image wpel-icon-5"></span></a>. Ora è interessante spiegare come possiamo creare un <strong>custom post type</strong>, cioè una tipologia di post personalizzata, diversa da quella standard (post) e dalle pagine statiche (page).</p>
<p>Il tutto avviene con un semplice snippet da inserire nel file <code>functions.php</code>. Ecco:</p><pre class="crayon-plain-tag">add_action( 'init', 'custom_post_musica' );
function custom_post_musica() {
    register_post_type( 'musica',
        array(
            'labels' =&gt; array(
                'name' =&gt; __( 'Musica' ),
                'singular_name' =&gt; __( 'Musica' )
            ),
            'public' =&gt; true,
            'has_archive' =&gt; true,
            'supports' =&gt; array('title', 'editor', 'excerpt')
        )
    );
}</pre><p></p>
<p style="text-align: justify;">Abbiamo creato un custom post type chiamato &#8220;musica&#8221;. Nel menu della pagina amministrazione verrà visualizzato accanto a &#8220;Pagine&#8221;. Cliccandoci, avremo una sezione simile a quella dei post e delle pagine,<strong> dove possiamo creare articoli specifici dedicati</strong> &#8211; come nell&#8217;esempio &#8211; alla musica (ma potete sbizzarrirvi).</p>
<p style="text-align: justify;">Per richiamare i custom post type nel tema, è necessaria un&#8217;altra funzione, molto simile a quella per richiamare i post e le pagine, con una differenza: in questo caso si utilizza la classe<strong> WP_Query</strong>:</p>
<p></p><pre class="crayon-plain-tag">&lt;?php $args = array( 
    'post_type' =&gt; 'musica', 
    'posts_per_page' =&gt; 10 
);
    $loop = new WP_Query( $args );
    while ( $loop-&gt;have_posts() ) : $loop-&gt;the_post(); ?&gt;
        &lt;?php the_title(); ?&gt;
        &lt;div class="entry-content"&gt;
        &lt;?php the_content();
        &lt;/div&gt;
    &lt;?php endwhile; wp_reset_postdata; ?&gt;</pre><p></p>
<p style="text-align: justify;">Questo codice può essere inserito in qualsiasi punto del tema. Tuttavia, se volete creare dei template specifici per il custom post type &#8220;musica&#8221;, potete<strong> creare dei template pagina</strong>, assegnando il nome del custom post type: single-musica.php e archive-musica.php.</p>
</div>]]></content:encoded>
			</item>
		<item>
		<title>Creare tassonomie personalizzate per WordPress</title>
		<link>http://www.iljester.com/creare-tassonomie-personalizzate-per-wordpress-259/</link>
		<pubDate>Wed, 11 May 2016 09:33:08 +0000</pubDate>
		<dc:creator><![CDATA[Davide]]></dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[Wordpress]]></category>
		<category><![CDATA[custom taxonomy]]></category>
		<category><![CDATA[tassonomie]]></category>
		<category><![CDATA[tassonomie personalizzate]]></category>

		<guid isPermaLink="false">http://painterweb.it/?p=259</guid>
		<description><![CDATA[&#160;&#160;Attenzione! Questo post non &#232; stato pi&#249; aggiornato da almeno 90 giorni. Potrebbe contenere dati, notizie e scripts non aggiornati o non in linea con gli attuali standard! In WordPress, le tassonomie personalizzate sono estremamente utili quando dobbiamo fare delle particolari classificazioni, soprattutto se usiamo... <a class="read-more" href="http://www.iljester.com/creare-tassonomie-personalizzate-per-wordpress-259/" data-wpel-link="internal">Leggi di più &#8594;</a>]]></description>
				<content:encoded><![CDATA[<div class="hyphenate"><div class="alert alert-warning"><i class="fa fa-exclamation-triangle" aria-hidden="true"></i>&nbsp;&nbsp;Attenzione! Questo post non &egrave; stato pi&ugrave; aggiornato da almeno 90 giorni. Potrebbe contenere dati, notizie e scripts non aggiornati o non in linea con gli attuali standard!</div>
<p style="text-align: justify;"><img class="alignleft size-dashedone_200_box wp-image-1982" src="http://www.iljester.it/wp-content/uploads/2014/05/custom-tassonomy-1-200x200.png" alt="custom-tassonomy" width="200" height="200" />In WordPress, le tassonomie personalizzate sono estremamente utili quando dobbiamo fare delle particolari classificazioni, soprattutto se usiamo i <strong>custom post type</strong>, e cioè i tipi di post personalizzati.</p>
<p style="text-align: justify;">La domanda a questo punto è: <strong>come posso creare delle tassonomie personalizzate per WordPress?</strong> Apparentemente l&#8217;idea di creare delle tassonomie personalizzate sembra qualcosa che va oltre le possibilità di uno sviluppatore alle prime armi. Ma la verità, fortunatamente, è un&#8217;altra. E&#8217; sufficiente incollare nel file <code>functions.php</code> il seguente codice, ovviamente personalizzandolo a seconda delle proprie esigenze:</p>
<p></p><pre class="crayon-plain-tag">function create_my_taxonomy() {
                    
register_taxonomy('Genere', 'musica', array(
   'hierarchical' =&gt; true /*visualizza come le categorie*/, 'label' =&gt; 'Genere',
   'query_var' =&gt; true, 'rewrite' =&gt; true));

register_taxonomy('Artista', 'musica', array(
   'hierarchical' =&gt; false /*visualizza come i tag*/, 'label' =&gt; 'Artista',
   'query_var' =&gt; true, 'rewrite' =&gt; true));
}
add_action('init', 'create_my_taxonomy', 0);</pre><p></p>
<p style="text-align: justify;">La prima funzione crea una tassonomia simile a quella delle categorie e cioè gerarchizzata (categoria -&gt; categoria figlia -&gt; categoria figlia della categoria figlia ecc. ecc.). La seconda funzione invece crea una tassonomia simile a quella delle etichette (i tags). <strong>Entrambe possono essere utili soprattutto nelle recensioni di musica e libri</strong> (si usano le tassonomie gerarchizzate per i generi musicali, mentre per esempio le tassonomie non gerarchizzate per gli artisti).</p>
</div>]]></content:encoded>
			</item>
		<item>
		<title>Slidorion. Una slideshow in jQuery per il vostro sito web</title>
		<link>http://www.iljester.com/slidorion-una-slideshow-in-jquery-per-il-vostro-sito-web-152/</link>
		<pubDate>Wed, 11 May 2016 08:58:08 +0000</pubDate>
		<dc:creator><![CDATA[Davide]]></dc:creator>
				<category><![CDATA[Javascript]]></category>
		<category><![CDATA[jquery]]></category>
		<category><![CDATA[slide]]></category>
		<category><![CDATA[slidorion]]></category>

		<guid isPermaLink="false">http://painterweb.it/?p=112</guid>
		<description><![CDATA[&#160;&#160;Attenzione! Questo post non &#232; stato pi&#249; aggiornato da almeno 90 giorni. Potrebbe contenere dati, notizie e scripts non aggiornati o non in linea con gli attuali standard! Volevo segnalarvi un ottimo plugin jQuery che permette di implementare nel vostro sito web una slideshow con... <a class="read-more" href="http://www.iljester.com/slidorion-una-slideshow-in-jquery-per-il-vostro-sito-web-152/" data-wpel-link="internal">Leggi di più &#8594;</a>]]></description>
				<content:encoded><![CDATA[<div class="hyphenate"><div class="alert alert-warning"><i class="fa fa-exclamation-triangle" aria-hidden="true"></i>&nbsp;&nbsp;Attenzione! Questo post non &egrave; stato pi&ugrave; aggiornato da almeno 90 giorni. Potrebbe contenere dati, notizie e scripts non aggiornati o non in linea con gli attuali standard!</div>
<p style="text-align: justify;"><img class="alignleft size-dashedone_200_box wp-image-1989" src="http://www.iljester.it/wp-content/uploads/2013/05/demoscreen-e1368442650507-200x200.jpg" alt="demoscreen-e1368442650507" width="200" height="200" />Volevo segnalarvi un ottimo plugin jQuery che permette di implementare nel vostro sito web <strong>una slideshow con accordion</strong>. Si tratta di Slidorion.</p>
<p style="text-align: justify;">Il plugin è facilmente installabile. Prima di tutto è necessario avere a disposizione <a title="Implementare facilmente jQuery sul vostro blog WordPress" href="http://jquery.com" data-wpel-link="external" target="_self" rel="external noopener noreferrer" class="ext-link wpel-icon-right">le librerie jQuery<span class="wpel-icon wpel-image wpel-icon-5"></span></a>. <strong>Successivamente, dovete richiamare nel vostro tema quelle specifiche di Slidorion </strong>(per WordPress, dovete usare l&#8217;estensione wp_enqueue_script):</p>
<p></p><pre class="crayon-plain-tag">&lt;script src="URL-VOSTRO-TEMA/js/jquery.easing.js"&gt;&lt;/script&gt;
&lt;script src="URL-VOSTRO-TEMA/js/jquery.slidorion.min.js"&gt;&lt;/script&gt;</pre><p></p>
<p style="text-align: justify;">Fatto questo dovete <strong>richiamare il css necessario</strong> per la visualizzazione corretta del plugin (per WordPress idem come sopra). Naturalmente potete modificarlo per armonizzarlo con lo stile del vostro blog:</p>
<p></p><pre class="crayon-plain-tag">&lt;link href="URL-VOSTRO-TEMA/slidorion.css" rel="stylesheet" /&gt;</pre><p></p>
<p style="text-align: justify;">A questo punto,<strong> la struttura html che dovrà riprodurre lo slide</strong>:</p>
<p></p><pre class="crayon-plain-tag">&lt;div id="slidorion"&gt;
	&lt;div id="slider"&gt;
		&lt;div&gt;&lt;/div&gt;
		&lt;div&gt;&lt;/div&gt;
		&lt;div&gt;&lt;/div&gt;
	&lt;/div&gt;

	&lt;div id="accordion"&gt;
		&lt;div&gt;New Features&lt;/div&gt;
		&lt;div&gt;
			&lt;!-- content --&gt;
		&lt;/div&gt;
		&lt;div&gt;A Simple Image&lt;/div&gt;
		&lt;div&gt;
			&lt;!-- content --&gt;
		&lt;/div&gt;
		&lt;div&gt;Background Image&lt;/div&gt;
		&lt;div&gt;
			&lt;!-- content --&gt;
		&lt;/div&gt;
	&lt;/div&gt;
&lt;/div&gt;</pre><p>Infine <strong>la funzione base dello script</strong>, da inserire appena sotto il richiamo delle librerie di slidorion:</p><pre class="crayon-plain-tag">$(document).ready(function(){
	$('#slidorion').slidorion();
});</pre><p></p>
<p style="text-align: justify;">Naturalmente il plugin prevede <strong>una serie di funzionalità che potete implementare con estrema facilità</strong>, tra cui la velocità dello slide, lo stop con il passaggio del mouse e altre interessanti features che potete sperimentare sul sito del plugin o nella demo.</p>
<p style="text-align: justify;"><a href="http://www.slidorion.com/slidorion.zip" data-wpel-link="external" target="_self" rel="external noopener noreferrer" class="ext-link wpel-icon-right">Download<span class="wpel-icon wpel-image wpel-icon-5"></span></a> | <a href="http://www.slidorion.com/" target="_blank" data-wpel-link="external" rel="external noopener noreferrer" class="ext-link wpel-icon-right">Demo<span class="wpel-icon wpel-image wpel-icon-5"></span></a> | <a href="http://www.ben-holland.co.uk/blog/" target="_blank" data-wpel-link="external" rel="external noopener noreferrer" class="ext-link wpel-icon-right">Autore<span class="wpel-icon wpel-image wpel-icon-5"></span></a></p>
</div>]]></content:encoded>
			</item>
		<item>
		<title>CSS3. L&#8217;unita di misura in rem. Come funziona</title>
		<link>http://www.iljester.com/css3-l-unita-di-misura-in-rem-come-funziona-342/</link>
		<pubDate>Wed, 11 May 2016 07:55:46 +0000</pubDate>
		<dc:creator><![CDATA[Davide]]></dc:creator>
				<category><![CDATA[CSS]]></category>
		<category><![CDATA[css3]]></category>
		<category><![CDATA[pixel]]></category>
		<category><![CDATA[rem]]></category>

		<guid isPermaLink="false">http://painterweb.it/?p=342</guid>
		<description><![CDATA[&#160;&#160;Attenzione! Questo post non &#232; stato pi&#249; aggiornato da almeno 90 giorni. Potrebbe contenere dati, notizie e scripts non aggiornati o non in linea con gli attuali standard! Le dimensioni nei fogli di stile normalmente si misurano in px, em o percentuale. Tra le tre... <a class="read-more" href="http://www.iljester.com/css3-l-unita-di-misura-in-rem-come-funziona-342/" data-wpel-link="internal">Leggi di più &#8594;</a>]]></description>
				<content:encoded><![CDATA[<div class="hyphenate"><div class="alert alert-warning"><i class="fa fa-exclamation-triangle" aria-hidden="true"></i>&nbsp;&nbsp;Attenzione! Questo post non &egrave; stato pi&ugrave; aggiornato da almeno 90 giorni. Potrebbe contenere dati, notizie e scripts non aggiornati o non in linea con gli attuali standard!</div>
<p style="text-align: justify;"><img class="alignleft size-dashedone_200_box wp-image-1994" src="http://www.iljester.it/wp-content/uploads/2014/05/internet-594148_960_720-200x200.jpg" alt="internet-594148_960_720" width="200" height="200" />Le dimensioni nei fogli di stile normalmente si misurano in px, em o percentuale. Tra le tre la più utilizzata è indubbiamente l&#8217;unità di misura in px. <strong>Tuttavia, onde creare layout elastici, è interessante l&#8217;utilizzo delle percentuali e degli em.</strong> Si parla in questo caso di unità di misure relative, perché le unità anzidette sono calcolate in base alla dimensione del testo dell’elemento genitore.  Faccio un esempio: se ho un font base di 12px nel body, questo font viene ereditato così com&#8217;è dal contenitore &#8220;figlio&#8221; e dal contenitore &#8220;nipote&#8221;:</p>
<p></p><pre class="crayon-plain-tag">&lt;html&gt;
&lt;body style="font-size:12px"&gt;
    Questo testo avrà la dimensione di 12px;
    &lt;div class="figlio"&gt;
       Questo testo avrà la dimensione di 12px
       &lt;div class="nipote"&gt;
          Questo testo avrà la dimensione di 12px
       &lt;/div&gt;
    &lt;/div&gt;
&lt;/body&gt;
&lt;/html&gt;</pre><p></p>
<p style="text-align: justify;">Supponiamo però che per un motivo o per l&#8217;altro nel contenitore figlio <strong>io voglia fissare una dimensione maggiore</strong>. Supponiamo dunque di volere un font pari a 18px, espresso però in em (in tal caso pari a 1.5em):</p>
<p></p><pre class="crayon-plain-tag">&lt;html&gt;
&lt;body style="font-size:12px"&gt;
    Questo testo avrà la dimensione di 12px;
    &lt;div class="figlio" style="font-size: 1.5em;"&gt;
       Questo testo avrà la dimensione di 12px * 1.5em = 18px
       &lt;div class="nipote"&gt;
         Questo test avrà la dimensione di 1.5em = 18px;
       &lt;/div&gt;
    &lt;/div&gt;
&lt;/body&gt;
&lt;/html&gt;</pre><p></p>
<p style="text-align: justify;">In questo caso, notate che, rispetto all&#8217;esempio in px, il contenitore &#8220;nipote&#8221; eredita la dimensione del font del contenitore &#8220;figlio&#8221; e non del body. <strong>Ora supponiamo io voglia che il contenitore nipote abbia una dimensione di 10px</strong>. In tal caso, il punto di partenza non saranno più i 12px del body, bensì i 18px del contenitore &#8220;figlio&#8221;.</p>
<p></p><pre class="crayon-plain-tag">&lt;html&gt;
&lt;body style="font-size:12px"&gt;
    Questo testo avrà la dimensione di 12px;
    &lt;div class="figlio" style="font-size: 1.5em;"&gt;
       Questo testo avrà la dimensione di 12px * 1.5em = 18px
       &lt;div class="nipote" style="font-size: .55em"&gt;
         Questo test avrà la dimensione di 10px / (12px * 1.5em) = .55em = 10px
       &lt;/div&gt;
    &lt;/div&gt;
&lt;/body&gt;
&lt;html&gt;</pre><p></p>
<p style="text-align: justify;">Con le unità di misura in rem (root em),<strong> l&#8217;ereditarietà del contenitore padre viene meno</strong> e i contenitori figli calcolano le dimensioni relative sulla base della misura determinata nel contenitore di root (html). Conseguentemente:</p>
<p></p><pre class="crayon-plain-tag">&lt;html style="font-size:12px;"&gt;
&lt;body&gt;
    Questo testo avrà la dimensione di 12px;
    &lt;div class="figlio" style="font-size: 1.5rem;"&gt;
       Questo testo avrà la dimensione di 12px * 1.5rem = 18px
       &lt;div class="nipote" style="font-size: .83rem;"&gt;
         Questo test avrà la dimensione di 10px / 12px = .83rem = 10px
       &lt;/div&gt;
    &lt;/div&gt;
&lt;/body&gt;
&lt;html&gt;</pre><p></p>
<p style="text-align: justify;">Il che evita tutta una serie di problemi nello sviluppo dei layout con le dimensioni relative. <strong>In particolar modo con Internet Explorer 9.</strong></p>
<p style="text-align: justify;">La compatibilità dell&#8217;unità di misura in rem, introdotta recentemente, con i CSS3, è abbastanza buona. In particolare <strong>è presente in tutti i browser moderni.</strong></p>
</div>]]></content:encoded>
			</item>
	</channel>
</rss>
