Se possedete un blog WordPress o lo utilizzate per sviluppare quotidianamente questo articolo fa al caso vostro; ho riassunto una dozzina di frammenti di codice alcuni dei quali di difficile reperibilità.
1 – Paginazione con tassonomie e termini
Questo pezzo di codice permette di avere una paginazione anche all’interno di termini e tassonomie
$p = get_query_var('paged') ? get_query_var('paged') : 1;
$args = array(
'post_type' => 'nome_post_type',
'nome_tassonomia' => 'nome_termine',
'paged' => $p,
'post_per_page' => 10);
$query = new WP_Query($args);
while ($query->have_posts()) : $query->the_post();
the_title();
the_excerpt();
endwhile;
wp_reset_postdata();
2 – Rimuovere formattazione automatica
Come già trattato in questo articolo è possibile sia eliminare l’auto-paragrafo che la formattazione automatica degli articoli, per fare ciò si antepone uno dei due seguenti filtri prima della chiamata the_content()
remove_filter('the_content', 'wpautop'); //elimina l'auto-paragrafo
remove_filter('the_content', 'wptexturize'); //elimina la formattazione automatica
3 – Stampare i valori di campi custom
La bellezza dell’architettura WordPress stà nella possibilità di gestire campi custom in totale libertà, sono facilmente implementabili da back-end e da front-end si visualizzano con il seguente codice:
$chiave = get_post_custom_values('chiave');
foreach ( $chiave as $key => $value ) {
echo "$key => $value ('chiave')
";
}
4 – Stampare il valore di un singolo campo custom
Per visualizzare, invece, un dato campo custom:
$meta_value = get_post_meta($post_id, $key, $single);
echo $meta_value;
5 – Ricavare l’immagine in evidenza
La featured image o più conosciuta come immagine in evidenza si visualizza in questo modo:
if ( has_post_thumbnail() ) {
the_post_thumbnail();
}
All’interno possiamo definire 4 tipi di dimensioni:
the_post_thumbnail('thumbnail'); //small
the_post_thumbnail('medium'); //media
the_post_thumbnail('large'); //larga
the_post_thumbnail( array(100,100) ); //custom
6 – Ricavare il link dall’immagine in evidenza
Il punto precedente stampa l’immagine in evidenza comprensiva del tag img, spesso nasce l’esigenza di estrapolare il link dall’immagine per poterlo gestire in maniera differente; lo si può fare con il seguente di codice:
if ( has_post_thumbnail()) {
$vett_immagine = wp_get_attachment_image_src( get_post_thumbnail_id(), 'large');
$link = $vett_immagine[0];
}
7 – Escludere pagine o post dal risultato di una ricerca
Utile questa funzione per mostrare solo post dal risultato di una ricerca, il tutto va inserito nel file function.php del tema:
function SearchFilter($query) {
if ($query->is_search) {
$query->set('cat','0,1');
}
return $query;
}
add_filter('pre_get_posts','SearchFilter');
8 – Immagini all’interno del feed Rss
Di default nel feed vengono stampati data, titolo e excerpt ma è possibile aggiungere anche l’immagine in evidenza andando ad inserire nel file functions.php del tema utilizzato questa funzione:
function diw_post_thumbnail_feeds($content) {
global $post;
if(has_post_thumbnail($post->ID)) {
$content = '' . get_the_post_thumbnail($post->ID) . '' . $content;
}
return $content;
}
add_filter('the_excerpt_rss', 'diw_post_thumbnail_feeds');
add_filter('the_content_feed', 'diw_post_thumbnail_feeds');
9 – Rimuovere aggiornamenti WordPress
Possono risultare invasivi gli aggiornamenti che compaiono all’interno del pannello di controllo per i ruoli diversi da quello di amministratore, detto fatto:
if ( !current_user_can('administrator') ) {
add_action( 'init', create_function( '$a', "remove_action( 'init', 'wp_version_check' );" ), 2 );
add_filter( 'pre_option_update_core', create_function( '$a', "return null;" ) );
}
10 – Page excerpt
Se da pannello di controllo non visualizzate il riassunto all’interno delle pagine inserite in function.php del tema il seguente controllo:
function my_init() {
add_post_type_support('page', array('excerpt'));
}
add_action('init', 'my_init');
11 – Formato data in stile Facebook
E’ possibile modificare il formato della data di commento di un post o di una pagina con il formato ribattezzato “Facebook” (esempio: scritto 3 giorni fa).
echo human_time_diff(get_the_time('U'), current_time('timestamp')) . ' ago'; //per pagine
echo human_time_diff(get_comment_time('U'), current_time('timestamp')) . ' ago'; //per commenti
12 – Includere nuovi script e stili
Spesso quando si integrano script o css viene commesso l’errore di non sfruttare le funzioni che WordPress fornisce, tuttavia ci sarà un motivo per il quale bisogna obbedire a Wp; utilizzando, infatti, wp_enqueue_script e wp_enqueue_style verranno gestite all’interno della funzione wp_head(); tutte le priorità di inclusione evitando molto spesso conflitti tra librerie javascript sempre più utilizzate, ecco alcuni esempi:
In questo caso chiamo jQuery senza includere fisicamente il file, ci sono, infatti, un set di librerie (jQuery, Ajax, SWFObject, ecc…) che risiedono nativamente all’interno di WordPress e non c’è alcun bisogno di includerle nuovamente (motivo per il quale si utilizza wp_enqueue_script);
wp_enqueue_script( 'jquery' );
Troverete nel repository ufficiale di WordPress l’elenco delle librerie caricate di base già al momento dell’installazione del CMS evitando inclusioni doppie e conflitti, per tutto il resto c’è:
wp_enqueue_script( 'nome', 'percorso_file'); //per includere un file
wp_enqueue_style( 'nome', 'percorso_file'); //per includere un css
wp_enqueue_script( 'nome', 'percorso_file', array('jquery')); //per includere un file che utilizza elementi jquery
13 – Sovrascrivere uno script
Seguendo il discorso del punto 11 può capitare che ad esempio la versione jQuery di WordPress non sia la stessa che serve per il nostro progetto, niente paura…basta avvisare wordpress che stiamo utilizzando una versione jQuery diversa dalla sua utilizzando wp_deregister_script():
function your_init_yourscript() {
wp_deregister_script( 'jquery' );
wp_register_script( 'jquery', 'http://ajax.googleapis.com/ajax/libs/jquery/1.4/jquery.min.js');
}
add_action('init', 'your_init_yourscript');
Abbiamo “deregistrato” il jQuery default di Wp e incluso uno a mano. Questo modo di procedere è abbastanza pulito, trasparente e soprattuto evita problemi di conflitto.
14 – Avviso via Email appena pubblicato un post
Inserire in functions.php del tema:
function email_members($post_ID) {
global $wpdb;
$usersarray = $wpdb->get_results("SELECT user_email FROM $wpdb->users;");
$users = implode(",", $usersarray);
mail($users, "Ciao! Abbiamo pubblicato un nuovo post, corri a visitarci.");
return $post_ID;
}
add_action('publish_post', 'email_members');
15 – Controllare che una pagina sia un figlio
Funzione utilissima che verifica se una pagina è figlia di un’altra:
function ma_is_child_of($page_id) {
global $post;
$is_child = false;
$parents = get_post_ancestors($post);
if ($parents) {
foreach ($parents as $one_parent_id) {
if ($one_parent_id == $page_id) {
$is_child = true;
break;
}
}
}
return $is_child;
};
13 comments
Silvia Paldini
18 Luglio 2011 at 10:14
complimenti per il papiro!!! sicuramente questa guida è rivolta a programmatori o simili ma sapreste indicarmi un plugin di avviso via mail quando il post viene pubblicato? in questa maniera qui non ci arrivo proprio :/
Pierpaolo Cerna
18 Luglio 2011 at 20:07
Mario, i tuoi post sono sempre più utili e completi. Grazie!
francesco
18 Luglio 2011 at 22:34
e cosa vuoi di più dalla vita? 😀
gWeb
19 Luglio 2011 at 14:40
Sto provando a inserire la data formato facebook ma non riesco. Ho fatto una funzione e ho inserito tutto all’interno del file functions.php…qualche idea?
Mario Concina
20 Luglio 2011 at 13:47
dovresti inserire la riga di codice nel file dove utilizzi il template di commento.
Consigli per dimagrire
31 Agosto 2011 at 21:10
Davvero molto utili, soprattutto quello per escludere la pagine dai risultati di ricerca.
Sto cercando un modo per disabilitare del tutto il feed RSS, non voglio cioè che sia accessibile in alcun modo. Conosci se c’è un modo? Tramite le opzioni sembra impossibile farlo
pierpaolo cerna
14 Ottobre 2011 at 11:26
Elimina il file feed.php dalla root!
Consigli per dimagrire
14 Ottobre 2011 at 17:41
Non ci crederai, ma anche cancellando il file wp-feed.php dalla root di WP il feed si visualizza lo stesso!
Mario Concina
14 Ottobre 2011 at 17:45
Prova con questa filtro qui da inserire in “functions.php” del tema corrente:
WP genera 5 tipi di feed RSS e per ogni tipo c’è la possibilità di disabilitarlo tramite “hook”. In questo caso tutti e 5.
Pingback: Raccolta di articoli della settimana 2/10/2011 | Saverio Gravagnola
ninì
29 Novembre 2011 at 19:42
ciao ho un problema con le tax query e la paginazione, ho praticamente utilizzato il tuo pezzo di codice che mostri nell’esempio 1 (“Paginazione con tassonomie e termini”) ma continua a non funzionare.
ps: utilizzo wp page navi come plugin per la paginazione
Mario Concina
29 Novembre 2011 at 21:45
Se utilizzi wp_pagenavi dovrebbe accettare come parametri array(‘query’ => $query).
Andrea s
6 Novembre 2014 at 12:29
ciao, io ho un problema opposto, dovrei disabilitare la funzione che dice al template di usare le immagini in evidenza in favore della prima immagine caricata su ogni post, come posso fare?