Categoria: wordpress

  • Hiddy: dai un taglio allo spam

    Un paio di settimane fa leggevo da Giovy la recensione entusiasta di questo plugin tutto italiano per WordPress: Hiddy.

    Domenica scorsa, dopo che Akismet ha bellamente ignorato una decina di commenti farmaceutici in un colpo solo, mi sono finalmente deciso e l’ho installato. Risultato: funziona! In questo momento ci sono solo 15 commenti nella coda dello spam, quando dovrebbero essercene diverse centinaia 😀

    L’idea non è del tutto originale, ma è stata implementata in maniera semplice e allo stesso tempo intelligente: una volta attivato, Hiddy aggiungerà un campo al form dei commenti.
    Il campo in questione avrà un nome scelto all’interno di un elenco di possibili scelte – tutte “invitanti” dal punto di vista dello spammer -, sarà inserito in un DIV con classe CSS casuale e reso invisibile tramite un’apposita regola. Ecco un esempio:

    Perché il plugin funziona? Semplice: l’utente standard non vedrà il campo “nascosto” e non lo compilerà, uno spam-bot che scandaglia il codice html alla ricerca dei campi da compilare inserirà del testo in questo campo e verrà bloccato.
    In questo modo si semplifica la gestione dei falsi positivi e si alleggerisce il carico sul server: non è necessario inserire i commenti spam nel db, con conseguente risparmio di CPU e spazio.

    Fino a quando Hiddy potrà funzionare? Nel momento in cui questi sistemi anti-spam basati su CSS si diffonderanno, gli spam-bot dovranno necessari adeguarsi: naturalmente il sistema funziona solo se il bot non controlla gli attributi css del campo (valori ampiamente negativi di top e left, display:none, ecc. ecc.).

    Nel frattempo è un plugin assolutamente da installare e consigliare agli amici 😉

    Per il momento ho un unico dubbio: come si comportano i lettori vocali per non vedenti in presenza di un campo nascosto tramite css? Lo ignorano? In caso contrario ci sarebbe un bel problema di accessibilità 😕

    Tag Technorati: , ,
  • WordPress 2.3 e tag cloud per le categorie

    Ritorno sull’argomento tag cloud per le categorie di WordPress: oggi ho provato ad installare in locale la versione 2.3 di WordPress e, come previsto, lo script non è più compatibile.

    La spiegazione è semplice: la tabella wp_categories è stata rimossa e i dati necessari per lo script sono stati distribuiti in due tabelle distinte:

    • nella tabella wp_terms troviamo i term_id e i nomi associati a questi term_id
    • nella tabella wp_term_taxonomy riusciamo ad associare una tipologia ai vari term_id (campo taxonomy) e recuperare il numero di post collegati (campo count)

    A questo punto, per recuperare tutti i valori che prima erano disponibili in un’unica tabella è necessario selezionare i termini di tipo category e fare un join delle due tabelle.

    Ecco il nuovo codice (file in formato txt), compatibile SOLO con WordPress 2.3

    < ?php
    
    // Recupero le informazioni sulle categorie dal database
    $qrystr = "SELECT $wpdb->term_taxonomy.term_id AS id_categoria, count, name, taxonomy FROM $wpdb->term_taxonomy LEFT JOIN $wpdb->terms ON $wpdb->term_taxonomy.term_id=$wpdb->terms.term_id WHERE taxonomy='category' ORDER BY name";
    
    $cats = $wpdb->get_results($qrystr);
    
    //Recupero il numero massimo di post per una singola categoria
    $max_value = 0;
    foreach ($cats as $cat)
    {
     if ($max_value < $cat->count) {
    	$max_value = $cat->count;
     }  	
    }
    
    //Considero 15 scalini , a partire da 60% a 200%
    //Per modificare questi due valori basta modificare i valori delle variabili
    $percentuale_minima = 100;
    $percentuale_massima = 230;
    $percentuale_scalino = 10;
    $numero_scalini = ($percentuale_massima-$percentuale_minima)/$percentuale_scalino;
    $post_per_scalino = $max_value / $numero_scalini;
    	
    // Stampo tutte le categoria all'interno di un div (id=cloud)
    // assegno una classe alla categoria (o alle categorie) più grandi
    echo '
    '; foreach ($cats as $cat) { if ($cat->count>0) { $catname = $cat->name; $catlink = get_category_link($cat->id_categoria); $postcnt = $cat->count; $percentuale_fontsize = $percentuale_minima+(Round($postcnt/$post_per_scalino)*$percentuale_scalino); echo ''; } else { echo ' style="font-size: ', $percentuale_fontsize,'%" title="',$postcnt,' post">'; } echo $catname,"\r"; } } echo "
    "; ?>
  • WordPress: differenziare i trackback dai commenti

    Dopo aver modificato il tema originale per differenziare i commenti, domenica pomeriggio ho approfittato di un attimo di tempo libero per fare un’ulteriore modifica sul template e separare i trackback e i pingback dai commenti normali.

    WordPress, credo dalla versione 1.5, considera trackback e pingback come normali commenti, inserendoli nella cronologia della discussione: personalmente trovo la cosa abbastanza fastidiosa, soprattutto quando i collegamenti esterni cominciano a diventare numerosi. L’idea di fondo è quella di separarli dai commenti tradizionali e visualizzarli in modo visivamente diverso.

    Fortunatamente non c’è molto lavoro da fare: è sufficiente sfruttare il valore dell’attributo comment_type e ripetere per due volte il ciclo sui commenti, uno per visualizzare i commenti standard e un altro per visualizzare trackback e pingback.

    Ecco la struttura semplificata:

           foreach ($comments as $comment) :
            if ($comment->comment_type != "trackback" && $comment->comment_type != "pingback") {
             *** Inserisco il codice per visualizzare i commenti ***
            }
           endforeach;
    
           foreach ($comments as $comment) :
            if ($comment->comment_type == "trackback" || $comment->comment_type == "pingback") {
             *** Inserisco il codice per visualizzare trackback e pingback ***
            }
           endforeach;

    Nel mio caso ho preferito introdurre un’ulteriore differenziazione: per visualizzare i commenti utilizzo la funzione comment_text(), per i trackback uso comment_excerpt(), mostrando solo una sintesi del “commento”.

    Per chi fosse interessato, questo è l’attuale codice completo del mio comments.php, sicuramente migliorabile ma perfettamente funzionante 😉

    Ai trackback viene associata una classe diversa rispetto ai commenti standard, per cui è possibile utilizzare il foglio di stile per modificarne l’aspetto: in fondo a questa pagina, ad esempio, potete vedere i trackback e i pingback separati dai commenti. Sta a voi decidere se posizionarli prima o dopo i commenti standard 😉

  • WordPress 2.2.2 e 2.0.11

    Aggiornamenti di sicurezza per il ramo 2.2.x e il ramo 2.0.x di WordPress: tutti gli utenti della popolare piattaforma sono invitati ad aggiornare il proprio blog 😉

    Sulla base delle informazioni presenti nell’annuncio ufficiale, ho creato dei pacchetti con i soli file modificati (decisamente comodi quando si tratta di aggiornare 5 o 6 blog):

    Come sempre è consigliato farsi un backup dei file e del database prima di procedere 😉

  • BlogBabel Rank Plus su DreamHost

    Emanuele ha rilasciato una nuova versione del plugin per visualizzare nella sidebar del vostro blog WordPress la posizione aggiornata nella classifica di BlogBabel: BlogBabel Rank Plus.

    Piccolo problema: il plugin non funziona su DreamHost (o quantomeno non funziona su questo blog).

    Questo è il codice originale del plugin utilizzato per leggere la posizione

    function bbrp_getRank($blog) {
    	$host = BB_API_URL.$blog.';f=txt';
    	$contents = file_get_contents($host);
    	if($contents != "") {
    		$rankx = explode("rank: ",$contents);
    		$ranky = explode("\n",$rankx[1]);
    		$trend = explode(" ",$ranky[1]);
    	}
    	return array("$ranky[0]","$trend[1]");
    }

    La funzione file_get_contents con URL è disabilitata su DreamHost per motivi di sicurezza, per cui bisogna modificare il codice in questo modo:

    • utilizzare CURL al posto di file_get_contents
    • aggiungere il carattere / al termine dell’URL (variabile $host): in caso contrario non viene restituito alcun risultato

    Per comodità ho scelto di creare una funzione file_get_contents_DreamHost e modificare solo la chiamata a file_get_contents nella funzione originale bbrp_getRank:

    function file_get_contents_DreamHost ($host) {
    	$ch = curl_init();
    	$timeout = 5;
    	curl_setopt ($ch, CURLOPT_URL, $host.'/');
    	curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1);
    	curl_setopt ($ch, CURLOPT_CONNECTTIMEOUT, $timeout);
    	$file_contents = curl_exe_c($ch);
    	curl_close($ch);
    	return $file_contents;
    }
    
    function bbrp_getRank($blog) {
    	$host = BB_API_URL.$blog.';f=txt';
    	$contents = file_get_contents_DreamHost($host);
    	if($contents != "") {
    		$rankx = explode("rank: ",$contents);
    		$ranky = explode("\n",$rankx[1]);
    		$trend = explode(" ",$ranky[1]);
    	}
    	return array("$ranky[0]","$trend[1]");
    }

    Nota importante: nella prima funzione, c’è scritto curl_exe_c. Il secondo “_” va cancellato (questa è la funzione in questione): evidentemente su DreamHost ci sono delle protezioni che impediscono il salvataggio di un post contenente quella stringa (cercando di salvare si ottiene una pagina di errore 503).

  • WordPress: tag Technorati e blog reactions

    Tag Technorati

    Esistono diversi plugin per inserire i tag Technorati al termine dei propri articoli; nel mio caso ho deciso di utilizzare un plugin “minimale”: SimpleTags.

    SimpleTags permette di gestire i TAG direttamente nell’editor avanzato di WordPress: è possibile inserire un elenco di tag al termine all’articolo oppure selezionare delle parole all’interno del post. Ad esempio:

    Questo è il [tag ]testo[/tag ] del post, con testo trasformato in tag technorati. Ovviamente [tag ] e [tags ] vanno scritti senza spazi, in questo caso li ho aggiunti per evitare che vengano interpretati dal plugin.
    [tags ]testo, altri tag[/tags ]

    Per migliorare il risultato estetico bisogna fare una piccola modifica al plugin e al foglio di stile del tema.

    Apriamo il file simpletags.php con un editor di testi: le prime righe di codice che troviamo sono le seguenti:

    $pre_replacement = '

    Technorati Tags: '; $post_replacement = '

    ';

    Bisogna modificare il $pre_replacement in modo da associare una classe al paragrafo con i Technorati Tags (e già che ci siamo sistemiamo l’italiano):

    $pre_replacement = '

    Tag Technorati: '; $post_replacement = '

    ';

    Fatto questo, salviamo l’immagine da utilizzare per i tag nella cartella images del tema in uso e aggiungiamo la seguente regola al foglio di stile

    .tag_technorati {
    background: transparent url(images/technorati.gif) no-repeat scroll left center;
    padding: 8px 2px 8px 20px;
    }

    Naturalmente è possibile anche utilizzare elementi diversi dal paragrafo, ad esempio un DIV.

    Blog Reactions

    In questo caso il codice da inserire in WordPress viene fornito direttamente da Technorati 😉

     View blog reactions