Evitare il texturize di WordPress

Nel cantiere continuamente aperto, che è questo blog, ho trasferito tutti gli shortcode che andavo copiando di tema in tema in un plugin apposito, UBN Shortcodes, in modo da averli sempre disponibili anche su temi che intendo solo provare. Si tratta di funzioni che mi aiutano parecchio nella stesura degli articoli; unito poi all’uso di AddQuicktag1 la cosa diventa straordinaria.

Mentre facevo questa operazione, ho aggiunto uno shortcode dedicato all’elemento pre e mi sono accorto che WordPress cambiava le virgolette diritte " in quelle tipografiche . Mi chiedevo come mai, visto che se usavo direttamente quell’elemento il cambio non veniva operato. Era chiaro che bisognava dare uno sguardo al file /wp-includes/formatting.php e, di preciso, alla funzione wptexturize($text), una vecchia conoscenza per chi ha a che fare con la creazione di temi e plugin. Questa funzione, che appunto trasforma alcuni caratteri in altri, non viene eseguita su quei caratteri che si trovano all’interno di alcuni elementi HTML prestabiliti, e cioè:

$default_no_texturize_tags = array('pre', 'code', 'kbd', 'style', 'script', 'tt');

Come vedete, troviamo anche il nostro pre. Alla riga successiva, troviamo un altro array, ma stavolta dedicato agli shortcode da non “texturizzare”. L’array, però, contiene solo code:

$default_no_texturize_shortcodes = array('code');

Per questo motivo il mio shortcode [pre] subiva gli effetti “nefasti” di wptexturize.

Per includere in un tema o in un plugin anche altri shortcode all’array, è sufficiente aggiungere un filtro. Infatti, se nel file formatting.php guardiamo un po’ oltre, vediamo questa riga:

$no_texturize_shortcodes = '(' . implode( '|', apply_filters( 'no_texturize_shortcodes', $default_no_texturize_shortcodes ) ) . ')';

dove la presenza di apply_filters ci consente di ampliare gli shortcode che non subiscono alcuna modifica al loro contenuto. Più tecnicamente, dobbiamo creare un array di elementi HTML da assegnare a no_texturize_shortcodes che verranno quindi aggiunti all’array principale $default_no_texturize_shortcodes.

Basta così creare una funzione apposita nel proprio tema o plugin che può suonare più o meno così:

add_filter('no_texturize_shortcodes',  'ubn_no_texturize_shortcodes');

function ubn_no_texturize_shortcodes( $shortcodes_array ) {
  $shortcodes_array = array( 'pre', 'tt' );

  return $shortcodes_array;
}

Ho inserito sia pre che tt, cioè due shortcode che uso io: potete sostituirli con quelli che volete o aggiungerne d altri. Questa semplice funzione vi garantisce che il testo inserito all’interno rimarrà intatto. Con questa tecnica si può allargare, ovviamente, pure l’array dedicato ai “tags”, anche se comunque non vedo necessità di farlo.


  1. Scrissi qualcosa su AddQuicktag in questo post↩︎