10+ utili “hacks” per il tuo blog WordPress

10+ utili “hacks” per il tuo blog WordPress

1995
14
CONDIVIDI

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')<br />"; 
}

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 = '<div>' . get_the_post_thumbnail($post->ID) . '</div>' . $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;
};
  • Silvia Paldini

    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

    Mario, i tuoi post sono sempre più utili e completi. Grazie!

  • Emporiodev

    gran bel post, su tutti:
    – la paginazione per taxonomies
    – formato data stile FB
    – molto utile anche il discorso sull’inclusione dei files…mica lo sapevo!

  • francesco

    e cosa vuoi di più dalla vita? 😀

  • gWeb

    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

      dovresti inserire la riga di codice nel file dove utilizzi il template di commento.

  • 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

      Elimina il file feed.php dalla root!

    • Non ci crederai, ma anche cancellando il file wp-feed.php dalla root di WP il feed si visualizza lo stesso!

    • Mario Concina

      Prova con questa filtro qui da inserire in “functions.php” del tema corrente:

      function fb_disable_feed() {
      	wp_die( __('Feed RSS non presente') );
      }
       
      add_action('do_feed', 'fb_disable_feed', 1);
      add_action('do_feed_rdf', 'fb_disable_feed', 1);
      add_action('do_feed_rss', 'fb_disable_feed', 1);
      add_action('do_feed_rss2', 'fb_disable_feed', 1);
      add_action('do_feed_atom', 'fb_disable_feed', 1);

      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ì

    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

      Se utilizzi wp_pagenavi dovrebbe accettare come parametri array(‘query’ => $query).

  • 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?