Con l’uscita di WordPress 3.0 molte cose cambieranno per noi sviluppatori. Gli aggiornamente di questa major release sono tanti e davvero utili a chi sviluppa con questo CMS ormai davvero completo. Potremmo dire che si chiude un’era e se ne apre una nuova e densa di possibilià. Rendo quindi omaggio alle precedenti versioni con una serie di utili snippet alcuni ancora validissimi con la nuova release.
Aggiungere un Custom Field in automatico
Tramite gli hook action publish_post e publish_page è possibile intervenire durante la pubblicazione di un post (o pagina). Ad esempio può essere utile aggiungere in automatico un campo personalizzato (custom field) con il relativo valore. Da notare l’utile funzione wp_is_post_revision() per verificare che non stiamo aggendo su una revisione.
1 2 3 4 5 6 7 8 | function add_custom_field ($post_ID) { global $wpdb; if(!wp_is_post_revision($post_ID)) { add_post_meta($post_ID, 'nome del campo', 'valore', true); } } add_action('publish_post', 'add_custom_field'); add_action('publish_page', 'add_custom_field'); |
Visualizzare le miniature nei feed
Se sono utili le action risultano ancor più utili i filtri. Ad esempio tramite the_excerpt_rss e the_content_feed possiamo controllare l’output RSS. In questo caso alteriamo l’output aggiungendo – in testa – la miniatira del Post, se presente, controllandola tramite la funzione has_post_thumbnail():
1 2 3 4 5 6 7 8 9 | function add_thumbnail_feeds($content) { global $post; if(has_post_thumbnail($post->ID)) { $content = '<div>' . get_the_post_thumbnail($post->ID) . '</div>' . $content; } return $content; } add_filter('the_excerpt_rss', 'add_thumbnail_feeds'); add_filter('the_content_feed', 'add_thumbnail_feeds'); |
Impostare la lunghezza dell’excerpt
La funzione get_the_excerpt() restituisce il riassunto di un Post – se presente – altrimenti lo genera in automatico partendo dal contenuto del Post stesso. In quest’ultimo caso il contenuto testuale viene tagliato a n caratteri, dove n è preimpostato in WordPress. Grazie al filtro excerpt_length è possibile alterare questo valore a piacimento, inserendo in functions.php queste linee di codice:
1 2 3 4 | function my_excerpt_length($length) { return 40; } add_filter('excerpt_length', 'my_excerpt_length'); |
More…
Sempre sul fronte excerpt, è possibile anche impostare la stringa che identifica il proseguimento alla lettura:
1 2 3 4 5 6 | function custom_excerpt_more($more) { return '...'; // oppure // return 'leggi tutto...'; } add_filter('excerpt_more', 'custom_excerpt_more'); |
Inoltre, alterando ulteriormente il codice, è possibile eliminare quel “brutto” effetto di WordPress quando si utilizza la taggatura:
1 | <!-- more --> |
Che fa proseguire la lettura dal punto in cui si trovava il more:
1 2 3 4 | function continue_read_all($post) { return '<a href="' . get_permalink($post->ID) . '">Leggi tutto</a>'; } add_filter('excerpt_more', 'continue_read_all'); |
Aggiungere la categoria in body_class()
Le utili funzioni body_class() e post_class() introdotte recentemente in WordPress, “segnalano” tutto tranne la categoria. La body_class(), in particolare, è utile per modificare tramite CSS l’evidenziazione di alcuni elementi del nostro tema, come l’indicazione della sezione dove ci troviamo. Fortunatamente WordPress mette a disposizione, come sempre, filtri per interagire con le sue più comuni funzioni. Tramite questo codice è possibile aggiungere la categoria alla lista di classi che indicano cosa stiamo visualizzando esattamente, categoria compresa:
1 2 3 4 5 6 7 8 9 | function add_category_id_class($classes) { global $post; foreach((get_the_category($post->ID)) as $category) { $classes[] = 'cat-' . $category->cat_ID . '-id'; } return $classes; } add_filter('body_class', 'add_category_id_class'); add_filter('post_class', 'add_category_id_class'); |
Eliminare l’avvertimento di aggiornamento
Se l’amministrazione di WordPress è usata maggiormente da un nostro cliente, può risultare utile nascondere l’avviso di aggiornamento a nuove versioni di WP, giusto per non distrarre il customer:
1 2 3 | remove_action('wp_version_check', 'wp_version_check'); remove_action('admin_init', '_maybe_update_core'); add_filter('pre_transient_update_core', create_function( '$a', "return null;")); |
Aggiungere Google Analytics – o altro – nel footer
Più che modificare direttamente il file footer.php, cosa del tutto lecita, può convenire usare un filtro, ad esempio perchè vogliamo inserire nel footer un contenuto dinamico. Nell’esempio qui sotto ecco come inserire il classico codice Javascript nel footer del nostro tema:
1 2 3 4 5 6 7 8 9 | function add_google_analytics() { echo '<script src="http://www.google-analytics.com/ga.js" type="text/javascript"></script>'; echo '<script type="text/javascript">'; // il code tracker, ad esempio, potrebbe essere recuperato da DB echo 'var pageTracker = _gat._getTracker("UA-XXXXX-X");'; echo 'pageTracker._trackPageview();'; echo '</script>'; } add_action('wp_footer', 'add_google_analytics'); |
Svuotare automaticamente il cestino
L’utile funzione di “cestinare” – invece che rimuove – può trasformarsi in un fastidioso spreco di spazio, soprattutto su blog poco manutenuti. È possibile, come accade per le revisioni, impostare nel file config.php il numero di giorni dopo i quali ripulire tutti gli elementi cestinati:
1 2 |
Impedire di cambiare tema
Sempre nell’ottica di proteggere il backend da usi impropri, ecco come eliminare la possibilità – da parte di un cliente – di modificare il tema:
1 2 3 4 5 6 |
Post con titoli in HTML e sottotitoli
Durante la realizzazione di Musicastelle in Blue mi sono trovato a dover inserire alcuni tag HTML all’interno del titolo di una pagina (o post che è uguale). Questo ovviamente non è permesso in WordPress, non foss’altro per la questione “slug”. Così ho sfruttato i custom field, inserendo un mio campo alternative_title e modificato il template in questo modo:
1 2 3 4 5 | <?php if( ($title = get_post_meta( get_the_ID(), 'alternative_title', true )) != "") : ?> <h2><?php echo $title; ?></h2> <?php else: ?> <h2><?php the_title(); ?></h2> <?php endif; ?> |
In questo modo se il campo alternative_title è impostato viene utilizzato al posto del titolo del Post o Pagina.
Seguendo sempre lo stesso ragionamento, è possibile anche introdurre un sottotitolo:
1 2 3 4 5 6 7 8 9 | <?php if( ($title = get_post_meta( get_the_ID(), 'alternative_title', true )) != "") : ?> <h2><?php echo $title; ?></h2> <?php else: ?> <h2><?php the_title(); ?></h2> <?php endif; ?> <?php if( ($subtitle = get_post_meta( get_the_ID(), 'subtitle', true )) != "") : ?> <p class="subtitle"><?php echo $subtitle ?></p> <?php endif; ?> |









11
[...] 10 utili snippet per WordPress | Undolog.com Con l’uscita di WordPress 3.0 molte cose cambieranno per noi sviluppatori. Gli aggiornamente di questa major release sono tanti e davvero utili a chi sviluppa con questo CMS ormai davvero completo. Potremmo dire che si chiude un’era e se ne apre una nuova e densa di possibilià. Rendo quindi omaggio alle precedenti versioni con una serie di utili snippet alcuni ancora validissimi con la nuova release. [...]
[...] 10 utili snippet per WordPress | Undolog.com [...]