WordPress 3.2, PHP e jQuery

La versione 3.2 di Wordpress introduce alcune novità da testare prima del prossimo aggiornamento.

Aggiornamento del 5 luglio 2011: è uscita la versione 3.2 di WordPress!

E’ stata rilasciata la versione beta 2 di WordPress 3.2, con alcune importanti novità. In attesa dell’uscita della release definitiva è stata inviata una comunicazione agli sviluppatori con l’invito a fare dei test: ci saranno infatti alcuni cambiamenti rilevanti, ed è bene che siano noti a tutti coloro che usano WordPress soprattutto in ambito lavorativo.

Continua a leggere WordPress 3.2, PHP e jQuery »

WordPress: personalizzare la pagina di scrittura post

Istruzioni per modificare la struttura delle pagine admin di Wordpress, nascondendo gli elementi inutili.

Se gestite un blog WordPress dando agli utenti la possibilità di registrarsi, avrete gli iscritti suddivisi su più ruoli. Normalmente WordPress mostra a tutti gli utenti registrati la stessa pagina di editing dei post, ma in alcuni casi potrebbe essere utile poterla personalizzare, nascondendo alcuni pannelli.

Sono infatti presenti dei box inutili per degli utenti alle prime armi: campi personalizzati, revisioni, trackback, tutti dettagli che creano solo confusione. E’ possibile modificare il layout delle pagine di amministrazione di WordPress tramite il pannello impostazioni schermo, ma è comunque una soluzione che solo gli utenti più esperti sono in grado di notare.

Continua a leggere WordPress: personalizzare la pagina di scrittura post »

WordPress 3.0: menu personalizzati

La nuova funzione wp_nav_menu di Wordpress 3.0, tra drag & drop e menu su misura.

Una delle funzioni più interessanti del prossimo WordPress 3.0 permette di creare menu di navigazione personalizzati direttamente dal pannello di amministrazione.

E’ possibile infatti creare dei menu contenenti contemporaneamente:

  • pagine
  • categorie
  • link diretti ad url specifiche

Questa novità facilita le possibilità di personalizzazione: non è più necessario nemmeno modificare nel template funzioni come wp_list_pages() o wp_page_menu, alle quali andavano passate come parametri le pagine da escludere.

I menu personalizzati sono gestiti in maniera simile alle widget: si selezionano le pagine e con il drag & drop è possibile ordinarle anche su sottolivelli. Il problema più grave di questo metodo riguarda l’accessibilità: non c’è stato alcun miglioramento dalle versioni precedenti di WordPress. E’ infatti impossibile ordinare gli elementi senza usare il mouse.

Rendere compatibile un tema con i menu personalizzati

E’ possibile adattare un tema esistente con i nuovi custom menu senza troppe difficoltà. E’ stata infatti introdotta una nuova funzione, che inserisce automaticamente sul sito il primo menu personalizzato che viene creato:

<?php wp_nav_menu(); ?>

Trovate la documentazione relativa ed i parametri opzionali in questa pagina del Codex. L’unica cosa necessaria da sapere è che se non è stato creato nessun menu personalizzato, la funzione wp_nav_menu va in fallback direttamente su wp_page_menu, di cui avevo già parlato in passato. Questo garantisce sempre la presenza di un menu di navigazione, permettendo agli utenti con esigenze particolari di poterlo personalizzare.

Aggiornamento: in attesa dell’uscita della versione ufficiale, potete scaricare la beta 2 di WordPress 3.0 dal blog.

Le funzioni wp_list_pages e wp_page_menu di WordPress

Un confronto tra le due soluzioni disponibili per creare un menu di navigazione.

Su WordPress esistono due funzioni php essenziali per la gestione dei menu di navigazione: wp_list_pages e wp_page_menu. Che abbiate un semplice blog o un sito più complesso, in ogni caso avrete quasi sempre bisogno di un menu di navigazione, anche solo per includere i link alla homepage, alla pagina about ed a quella dei contatti.

Le due funzioni hanno alcune differenze: wp_page_menu è stata introdotta dalla versione 2.7 e va ad estendere wp_list_pages, che comunque fa ancora egregiamente il suo dovere. Recentemente mi sono imbattuto in queste funzioni per un aggiornamento al tema Stardust, ed ho deciso di condividere quello che ho scoperto.

La funzione wp_list_pages

Se lavorate con WordPress, conoscerete bene questo template tag, esistente ormai da anni:

<?php wp_list_pages(); ?>

Il suo punto di forza sono le possibilità di personalizzazione.

Escludere una pagina dal menu

Una delle opzioni più usate è quella che consente di nascondere dal menu alcune pagine. Per farlo è sufficiente usare il parametro exclude (in questo caso elimina dall’elenco le pagine con ID 1 e 7:

<?php wp_list_pages('exclude=1,7'); ?>

Mostrare solo le pagine di primo livello

Un altro parametro molto utile è depth, che permette di nascondere tutte le sottopagine e controllare la profondità del menu:

<?php wp_list_pages('depth=1'); ?>

In questo caso, depth=1 mostra solo le pagine di primo livello.

Nascondere il titolo

Se invece non avete bisogno del titolo prima dell’elenco delle pagine, ad esempio perché il menu non è nella sidebar ma disposto in orizzontale, potete usare il parametro title_li:

<?php wp_list_pages('title_li='); ?>

La funzione wp_list_pages offre ottime possibilità di personalizzazione, e spesso è più che sufficiente. Per tutti i dettagli vi consiglio di consultare anche la pagina ufficiale su WordPress.org, dove sono illustrati i parametri utilizzabili ed i rispettivi valori.

La funzione wp_page_menu

Dalla versione 2.7 di WordPress è stato introdotta la funzione wp_page_menu, che aumenta le possibilità a disposizione degli sviluppatori. La differenza principale con wp_list_pages è nel codice che viene generato, e nella possibilità di mostrare un link alla homepage.

Usando la funzione

<?php wp_page_menu(); ?>

Questo sarà l’HTML creato:

<div class=”menu”>
  <ul>
    <li class=”current_page_item”><a href=”…” title=”…”>Pagina attiva</a></li>
    <li class=”page_item”><a href=”…” title=”…”>Pagina</a></li>
    …
  </ul>
</div>

Non c’è quindi bisogno di aggiungere codice HTML intorno alla funzione php, tutto il necessario viene generato automaticamente.

Cambiare la classe associata al menu

Per cambiare la classe del menu, è sufficiente usare il parametro menu_class:

<?php wp_page_menu('menu_class=navigation'); ?>

Mostrare un link alla home nel menu

La novità principale però riguarda il parametro per includere automaticamente un link alla homepage:

<?php wp_page_menu('show_home=1'); ?>

Utilizzando wp_list_pages questo era possibile solo inserendo manualmente nel template un link alla home, ma è una soluzione poco elegante. Inoltre possono esserci problemi quando la prima pagina del blog è una pagina statica: il link alla homepage apparirebbe duplicato.

Con wp_page_menu questo non accade: con un parametro è possibile gestire tutto senza problemi.

Altri parametri

Una caratteristica non è specificata sulla documentazione ufficiale, ma è fondamentale: la funzione wp_page_menu supporta tutti i parametri di wp_list_pages, essendo un’estensione di quest’ultima.

Se ad esempio volete creare un menu con classe “nav”, mostrando anche la homepage e solo un livello di profondità, questa è la funzione:

<?php wp_page_menu('menu_class=nav&show_home=1&depth=1'); ?>

Potete approfondire il discorso sulla pagina di wordpress.org dedicata alla funzione, ricordandovi quindi anche di wp_list_pages.

Quale funzione utilizzare?

La presenza di due funzioni simili potrebbe confondere le idee, ed in effetti viene da chiedersi quale sia l’utilità del conservarle entrambe. La risposta è da cercare nella retrocompatibilità per le vecchie versioni di WordPress.

Se però dovete sviluppare un nuovo tema e non avete problemi di questo tipo, il mio consiglio è di sfruttare fin da subito wp_page_menu. I vantaggi non sono incredibili ma ci sono: i vostri visitatori non noteranno niente di diverso, ma voi avrete un codice più facile da mantenere.

Come personalizzare i default Widget di WordPress

Una guida alla creazione di Widget personalizzati per Wordpress.

Wordpress LogoWordPress include una serie di widget molto utili, che possono essere inseriti fin da subito all’interno di ogni tema. Possono essere visualizzati gli ultimi commenti, i post più recenti ed una serie di altre informazioni utili gestendo tutto dal pannello di amministrazione.

Spesso però i default widget sono limitati e non adatti a tutte le occasioni: potreste avere la necessità di eliminare una particolare categoria dagli ultimi post, o di modificare il codice html con cui viene presentato il box di ricerca.

La soluzione fortunatamente esiste e non è complessa: è possibile infatti recuperare i widget esistenti, modificarli e farli apparire sul pannello di amministrazione accanto a quelli standard.

Aggiornamento 2022: WordPress è cambiato nel tempo e i default Widget ora sono suddivisi ognuno nel suo file, all’interno della cartella wp-includes/widgets. Le istruzioni di questo post restano valide.

I passi da seguire

Se avete un minimo di basi di php, creare i vostri widget è semplice. Questa è la procedura in sintesi:

  1. Aprite il file wp-includes/default-widgets.php, dove sono presenti tutti i widget di default.
  2. Individuate il widget da personalizzare. Ognuno ha qualche riga di commento che ne chiarisce la funzione, ma i nomi delle classi sono già autoesplicativi: WP_Widget_Search, WP_Widget_Recent_Comments, WP_Widget_Tag_Cloud, ecc.
  3. Copiate tutto il codice del widget che vi interessa dentro il file functions.php del vostro tema (se non l’avete, createlo).
  4. Personalizzate il nome della classe in tutte le sue occorrenze e le altre informazioni necessarie (ad esempio la descrizione che appare sul pannello di amministrazione).
  5. Modificate il codice secondo le vostre esigenze. Qualche esempio? Personalizzare i link del widget meta, cambiare il form nel widget della ricerca, mostrare gli ultimi post di una specifica categoria… le possibilità sono infinite.
  6. Aggiungete subito dopo la definizione del nuovo widget, nel file functions.php, la riga
    register_widget('nome_del_widget_personalizzato');

I vantaggi di questo metodo sono notevoli:

  • Non è necessario conoscere php approfonditamente, basta saperlo leggere per poter aggiungere qualche riga di codice
  • E’ possibile aggiornare WordPress senza problemi
  • Il nuovo widget appare sul pannello di amministrazione, e può essere usato anche da utenti non esperti (l’ideale quando si ha a che fare con clienti poco tecnici)

Se decidete di personalizzare i widget, fate però attenzione: non modificate direttamente il file default-widgets.php, è bene che il core di WordPress resti intatto. Utilizzare functions.php è l’ideale: eviterete possibili problemi e soprattutto potrete aggiornare WordPress senza preoccupazioni. Gli update della piattaforma sono frequenti e spesso essenziali per motivi di sicurezza, non è mai bene vincolarsi ad una particolare versione.

La funzione body_class() di WordPress 2.8

Guida alla personalizzazione delle singole pagine di un blog Wordpress, con una semplice funzione php.

La versione 2.8 di WordPress introduce una novità molto utile per chi sviluppa dei temi. E’ stata infatti creata una nuova funzione php, chiamata body_class().

Utilizzandola nel template è possibile avere delle classi differenti sul tag HTML body, a seconda della pagina visualizzata. Questo consente di personalizzarne l’aspetto esclusivamente tramite CSS, senza bisogno di creare template su misura.

Per utilizzarla è sufficiente aggiungerla nel tag body, che di solito è nel template header.php, in questo modo:

<body <?php body_class(); ?>>

Il risultato sulla homepage del blog sarà:

<body class="home blog">

mentre su un singolo articolo (ad esempio con ID 23):

<body class="single postid-23">

E’ possibile anche aggiungere una o più classi personalizzate a piacere, che appariranno insieme alle altre:

<body <?php body_class('nome-classe'); ?>>

Una funzione php analoga, relativa però ai singoli post, è chiamata post_class(): ne ho parlato in passato, trovate la relativa guida a questo indirizzo.

Le potenzialità di queste funzioni sono notevoli, ma credo sia bene utilizzarle solo se veramente necessario. Soprattutto nel caso di body_class(), il rischio è quello di trovarsi il codice inutilmente appesantito. L’elenco completo delle classi stampate dalla nuova funzione è in questo post di WPEngineer.

Interagire con il Database di WordPress in php

Come sfruttare la classe $wpdb per leggere il Database di Wordpress.

Wordpress LogoSe avete mai realizzato un tema per WordPress, prima o poi avrete avuto la necessità di ricavare delle informazioni dal database non accessibili tramite i template tag di questo CMS. Non ci sono problemi ad ottenere il titolo del blog, di un post, l’elenco delle pagine o delle categorie esistenti, ma quando le necessità si fanno più specifiche diventa necessario scrivere qualche riga in php.

La realtà è molto più semplice di quello che può sembrare: esiste infatti una classe chiamata $wpdb che consente di andare a recuperare qualsiasi informazione dal database. Può essere sfruttata su qualsiasi tabella, anche quelle che non sono state create da WordPress, ma ad esempio da un plugin esterno.

Esempi pratici di utilizzo

Volete visualizzare sulla homepage del blog il numero di utenti registrati? Vi basta aggiungere questa funzione nel file functions.php:

function userCount() {
global $wpdb;
$user_count = $wpdb->get_var("SELECT COUNT(*) FROM $wpdb->users;");
echo $user_count;
}

Dal template index.php basterà poi richiamare la funzione per visualizzare il risultato:

<p>Utenti registrati: <?php userCount(); ?></p>

E’ possibile eseguire anche query più complesse, ad esempio per ricavare un array di elementi da stampare, come l’elenco delle bozze ancora da pubblicare:

function showDrafts() {
global $wpdb;
$fivesdrafts = $wpdb->get_results("SELECT ID, post_title FROM $wpdb->posts WHERE post_status = 'draft' ");
foreach ($fivesdrafts as $fivesdraft) {
echo '<li>' . $fivesdraft->post_title . '</li>';
}
}

Da visualizzare poi così:

<h3>Bozze in attesa di pubblicazione:</h3>
<ul>
<?php showDrafts(); ?>
</ul>

Questo strumento è interessante, perchè con un minimo di conoscenza del database e delle query possibili, qualsiasi informazione può essere estratta senza difficoltà. C’è un’ottima documentazione a disposizione sul Codex ufficiale di WordPress, di cui trovate anche la traduzione in italiano su wordpress-it.it.

Tra le funzioni a disposizione della classe, potrebbe servirvi $wpdb->show_errors, che visualizza gli errori MYSQL. L’ho trovata molto utile in fase di debug, e se non conoscete bene la sintassi da utilizzare vi sarà di grande aiuto.

Il mio consiglio comunque è di fare qualche test in locale per capire le potenzialità dello strumento: non è così difficile da imparare, anche se non siete dei programmatori. Dopo aver osservato la struttura del database (ad esempio con phpMyAdmin) per conoscere i nomi delle tabelle e dei campi, potrete fare qualsiasi cosa.