Wordpress 2.3 e tag cloud per le categorie
2 Ottobre 2007
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 '<div id="cloud">'; 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 '<a href="',$catlink,'"'; if ($percentuale_fontsize==$percentuale_massima) { echo ' style="font-size: ', $percentuale_fontsize,'%" class="top_category" title="',$postcnt,' post">'; } else { echo ' style="font-size: ', $percentuale_fontsize,'%" title="',$postcnt,' post">'; } echo $catname,"</a>\r"; } } echo "</div>"; ?>
Wordpress: differenziare i trackback dai commenti
22 Agosto 2007
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
5 Agosto 2007
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):
- versione 2.2.2: elenco delle modifiche e pacchetto con i file modificati rispetto alla versione 2.2.1
- versione 2.0.11: elenco delle modifiche e pacchetto con i file modificati rispetto alla versione 2.0.10
Come sempre è consigliato farsi un backup dei file e del database prima di procedere
BlogBabel Rank Plus su DreamHost
25 Luglio 2007
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).










