Offuscare le email: lo shortcode per WordPress

WordPress ha una funzione poco nota, messa alcuni giorni fa in evidenza da WP Recipes e poi ripresa da Panese. La funzione si chiama antispambot e serve ad offuscare gli indirizzi email ai crawler finalizzati allo spam.

Vorrei spendere, però, qualche parola in più sul suo funzionamento.
Continua a leggere

Le variabili relative alle pagine in WordPress

Visto che per l’ennesima volta mi sono scordato di appuntarmi in Tomboy il contenuto di queste variabili, lo faccio adesso anche sul blog, così magari vi tornano utili.

Si tratta di alcune variabili globali di WordPress relative alla paginazione di post (quando leggete “post” intendo dire articolo e pagina statica) e di pagine d’archivio. Trovate segnalato se la variabile va usata all’interno del loop; per dichiararla globale si usa global $variabile;.

Variabili globali di post e pagina

$multipage

Dice se un post è suddiviso in più pagine o no. Va usata nel loop.
Ad esempio, se un post è suddiviso in 5 pagine, il valore sarà true.

$numpages

Contiene il numero di pagine di un post suddiviso in più pagine. Va usata nel loop.
Ad esempio, se un post è suddiviso in 5 pagine, il valore sarà 5.

$page

Contiene il numero di pagina visualizzata di un post suddiviso in più pagine.
Ad esempio, se stiamo visualizzando la pagina 3 di un post suddiviso in 5 pagine, il valore sarà 3.

$pages

È un array contenente tanti elementi quante sono le pagine di un post. Va usato nel loop.
Ad esempio, se un post è suddiviso in 3 pagine, l’array conterrà 3 elementi (0, 1, 2) e ciascun elemento conterrà una parte del post.

Variabili globali d’archivio

$paged

Contiene il numero di pagina visualizzata di un archivio.
Ad esempio, se stiamo vedendo la pagina 5 dell’archivio del tag “wordpress”, il valore sarà 5.

$wp_query->max_num_pages

Contiene il numero totale di pagine in cui un archivio è suddiviso. Non è una variabile globale, ma un elemento dell’array $wp_query, che quindi andrà dichiarato globalmente (global $wp_query;)
Ad esempio, se abbiamo impostato WordPress per mostrare 5 post per pagina e abbiamo 20 post con tag “wordpress”, il valore sarà 4 per la pagina d’archivio del tag “wordpress”.

Autenticazione multifattoriale con Perfect Paper Passwords

Qualche mese fa ho scritto un post sul plugin One-Time Password che ha lo scopo di rendere più sicura l’autenticazione nella propria area amministrativa di WordPress mediante l’uso dell’omonima tecnica detta One-Time Password. In breve, con questo sistema possiamo autenticarci alla Bacheca di WordPress usando una password usa-e-getta che può sostituire la password di WordPress (ottimo in caso di utilizzo in un Internet Cafè) o aggiungersi ad essa.

Oltre a questo plugin, ne esiste un altro che fa qualcosa di molto simile: Perfect Paper Passwords. Con esso avrete a disposizione una password usa-e-getta che si aggiunge (e non si sostituisce) a quella di WordPress.

Autenticazione forte

Sappiamo che per autenticarsi a un sistema informatico con ragionevole sicurezza è buona cosa utilizzare un’autenticazione a due fattori:

  • qualcosa che si sa (username e password)
  • qualcosa che si ha (un oggetto, che può essere un token, una smartcard, una chiavetta USB, la SIM del telefono, la biometria o anche un semplice taccuino con password usa-e-getta.

Questo è anche il sistema usato da molte banche per i loro servizi online. In questo modo, anche se un malintenzionato dovesse entrare in possesso delle vostre credenziali, non potrebbe accedere al sistema perché non ha il secondo fattore di autenticazione, il quale appunto cambia continuamente.

Questo plugin vi dà la possibilità di implementare in WordPress il sistema OTP in modo facile e gratuito.
Continua a leggere

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 AddQuicktag 1 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.

Note

  1. Scrissi qualcosa su AddQuicktag in questo post.

Password OTP (usa e getta) per WordPress

Se vi è mai capitato di voler accedere al vostro blog mentre vi trovavate in un ambiente non sicuro e non lo avete fatto perché giustamente non vi fidavate, sappiate che potete far uso del metodo della One Time Password 1 (OTP), oggi disponibile anche per WordPress. Probabilmente conoscerete già questo sistema perché molte banche lo fanno usare ai loro clienti (mi riferisco a quelle specie di chiavette che generano numeri). In breve, si tratta di accedere a un ambiente amministrativo (nel nostro caso alla Bacheca di WordPress) usando non l’unica password che abbiamo precedentemente scelto noi, ma una password che può essere usata una sola volta, quindi una password “usa e getta”. La volta successiva che ci vogliamo autenticare alla Bacheca inseriremo un’altra password, diversa dalla precedente.

È evidente la scomodità di dover sempre digitare una password diversa e non memorizzabile, ma è un piccolo prezzo da pagare se si vuole accedere senza paura in ambienti non sicuri al pannello amministrativo di WordPress. Se il keylogger 2 del PC condiviso che stiamo usando nell’Internet Café ha memorizzato la One Time Password, possiamo stare sicuri che essa è ormai inservibile.

Un sistema del genere certamente può dare una mano per aumentare la garanzia di sicurezza della nostra Bacheca anche se vi accediamo sempre e solo dalla nostra Linux box (su cui non girano malware 3 di sorta), ma tornerà utile soprattutto a chi è sempre in viaggio e fa uso del PC in ambienti non adeguatamente protetti (o di cui noi non ci fidiamo).

Continua a leggere

Shortcode per YouTube rivisto e migliorato

Ho rimesso mano a uno shortcode di cui vi avevo già scritto e che si è rivelato davvero comodo, quello per l’inserimento di un video di YouTube in un post. Le modifiche che ho apportato rispetto a quello già pubblicato riguardano due aspetti:

  1. la possibilità di far partire il video da un punto preciso;
  2. l’inserimento del poster frame del video se il post viene letto via feed.

Niente di particolarmente complicato, quindi, ma mi pare sempre interessante condividere con voi quanto combino.

Continua a leggere

Cambiare la guid dei post

In uno dei siti che gestisco e realizzati con WordPress, avevo l’esigenza di cambiare la GUID di ogni post in modo che combaciasse con il suo ID o, per essere più chiari, con il permalink di default (tipo http://miosito.it/?p=123). Il motivo per cui non combaciava era dovuto all’importazione da un file XML estraneo a WordPress. L’operazione di sostituzione può essere effettuata con gli strumenti che il CMS ci fornisce e, visto che magari vi può tornare utile, questo è lo script che ho usato:

<?php
global $wpdb, $post;
$myposts = get_posts('numberposts=-1');
$i = 0;
$updated = 0;
$not_updated = 0;
foreach($myposts as $post) :
	setup_postdata($post);
	$i++;
	$current_guid = get_post_field('guid', $post->ID);
	$correct_guid = get_permalink($post->ID);
	if ($current_guid != $correct_guid) {
		$where = array('ID' => $post->ID);
		$wpdb->update($wpdb->posts, array('guid' => $correct_guid), $where);
		echo $i.'. GUID del post '.$post->ID.' aggiornato da '.$current_guid.' a '.$correct_guid.'<br />';
		$updated++;
	} else {
		echo $i.'. GUID del post '.$post->ID.' OK<br />';
		$not_updated++;
	}
endforeach;

echo '<p><strong>Risultato:</strong><br />';
echo 'Righe aggiornate: <strong>'.$updated.'</strong><br />';
echo 'Righe non aggiornate: <strong>'.$not_updated.'</strong><br />';
echo 'Totale righe controllate: <strong>'.($updated+$not_updated).'</strong></p>';
?>

In poche parole, lo script confronta il campo guid della riga del post con il permalink (che, anche temporaneamente, va impostato come Default) e, se è diverso, lo adegua. Alla fine dell’operazione, lo script stampa tutte le operazioni eseguite, sia che abbia modificato la riga del database sia che non lo abbia fatto.

Ho utilizzato lo script incollandolo nell’index.php, subito dopo la chiamata all’header. In pochi secondi tutte le migliaia di post avevano la GUID corretta. Per averne anche un riscontro visivo, si può aggiungere all’interno del loop, magari proprio prima del titolo del post, questa riga:

echo get_post_field('guid', $post->ID).'<br />'.get_permalink( $post->ID );

Nel Codex, alla pagina Interfacing With the Database ci sono tutte le informazioni necessarie, in particolare il paragrafo UPDATE rows.