Immagine della guida functions.php: oltre 10 funzioni per il proprio sito del sito Cionfs.it

Il file functions.php

functions.phpIl functions.php, che è possibile trovare il file nella cartella wp-content/themes/nometema/functions.php, è uno dei file più importanti presenti in WordPress. Grazie a questo file, presente in ogni tema di wordpress, è possibile aggiungere diverse funzionalità al proprio sito web. Tramite questo file è possibile richiamare funzioni di WordPress o eseguire funzioni PHP più o meno complesse. Grazie a questo file è possibile evitare l’installazione di plugin per alcune delle modifiche da apportare al proprio sito web.

La modifica del file functions.php permette quindi di aggiungere funzionalità al proprio tema (e sito) senza installare nulla. Questo comporta anche il fatto che cambiando tema si perderanno le modifiche fatte, cosa che non accade installando invece un plugin e che va ad influire su tutto.
Un punto a sfavore della modifica di questo file è che se si decide di cambiare tema vanno riportate tutte le modifiche oppure ne vanno analizzate di nuove. Una buona soluzione per bypassare questo problema è l’utilizzo di un plugin chiamato code snippet . Grazie a questo plugin sarà abbastanza facile e veloce aggiungere, abilitare o disabilitare le funzioni aggiunte su wordpress.

Di seguito alcune utili funzioni.

Rimuovere la versione di wordpress dal codice può risultare utile per evitare che qualcuno tenti di sfruttare dei bug di determinate versioni.

function wpb_remove_version() {
return '';
}
add_filter('the_generator', 'wpb_remove_version');

 

Aggiungere un logo personalizzato nel wp-admin per personalizzare l’aspetto grafico in modo più completo. L’immagine va caricata e richiamata tramite questo snippet.

function wpb_custom_logo() {
echo '
<style type="text/css">
#wpadminbar #wp-admin-bar-wp-logo > .ab-item .ab-icon:before {
background-image: url(' . get_bloginfo('stylesheet_directory') . '/cartella/logopersonalizzato.png) !important;
background-position: 0 0;
color:rgba(0, 0, 0, 0);
}
#wpadminbar #wp-admin-bar-wp-logo.hover > .ab-item .ab-icon {
background-position: 0 0;
}
</style>
';
}
//hook into the administrative header output
add_action('wp_before_admin_bar_render', 'wpb_custom_logo');

 

Modificare l’excerpt ovvero il numero di parole da visualizzare quando viene mostrata la sintesi di un articolo (solitamente in home page). In questo caso viene indicato 20 come numero di parole ma può essere variato.

 

function custom_excerpt_length($length) {
return 20;
}
add_filter('excerpt_length', 'custom_excerpt_length');

 

Aggiungere un widget personalizzato nella dashboard può essere utile per fornire direttive o istruzioni se si hanno degli articolisti/editori/collaboratori sul proprio blog.

add_action('wp_dashboard_setup', 'my_custom_dashboard_widgets');
 
function my_custom_dashboard_widgets() {
global $wp_meta_boxes;
 
wp_add_dashboard_widget('custom_help_widget', 'Theme Support', 'custom_dashboard_help');
}
 
function custom_dashboard_help() {
echo 'In questo campo va inserito il testo da mostrare. Si può inserire anche codice html.';
}

 

Può risultare utile a volte inserire le immagini nei feed RSS

function rss_post_thumbnail($content) {
global $post;
if(has_post_thumbnail($post->ID)) {
$content = '<p>' . get_the_post_thumbnail($post->ID) .
'</p>' . get_the_content();
}
return $content;
}
add_filter('the_excerpt_rss', 'rss_post_thumbnail');
add_filter('the_content_feed', 'rss_post_thumbnail');

 

Può risultare utile anche rimuovere completamente i feed per evitare che aggregatori RSS duplichino il contenuto del sito

function fb_disable_feed() {
wp_die( __('No feed available,please visit our <a href="'. get_bloginfo('url') .'">homepage</a>!') );
}
 
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);

 

E’ possibile disabilitare il nuovo editor Gutenberg grazie a due righe di codice. Cliccare quì per maggiori dettagli.

/** rimozione sidebar a widget */
add_filter( 'gutenberg_use_widgets_block_editor', '__return_false' );
add_filter( 'use_widgets_block_editor', '__return_false' );

 

 

WordPress prevede un numero limitato di files caricabili. E’ possibile tuttavia aggiungere ulteriori estensioni consentite tramite una semplice aggiunta nel functions.php . Una lista completa è reperibile a questo link.

function my_myme_types($mime_types){
    $mime_types['css'] = 'text/css'; //Aggiunta file CSS
    $mime_types['exe'] = 'application/x-msdownload'; //Aggiunta eseguibili windows
    return $mime_types;
}
add_filter('upload_mimes', 'my_myme_types', 1, 1);

 

Disabilitare l’xmlrpc può essere utile per evitare tentativi di attacchi e intrusioni, anche se spesso è bloccato dal servizio hosting

add_filter('xmlrpc_enabled', '__return_false');

 

WordPress, quando viene inviata una mail automatica, utilizza come nome utente “WordPress” e come mittente “wordpress@email.ext”. Con questo codice è possibile modificare la mail e il nome del mittente

 

function wpb_sender_email( $original_email_address ) {
   return 'nome@indirizzo.ext';
}
function wpb_sender_name( $original_email_from ) {
   return 'Nome mittente';
}
add_filter( 'wp_mail_from', 'wpb_sender_email' );
add_filter( 'wp_mail_from_name', 'wpb_sender_name' );

 

Nella sintesi degli articoli, solitamente nella home page o nelle categorie, è presente il link che porta alla lettura dell’articolo completo. Solitamente si tratta di un “read more”. Con questa funzione è possibile personalizzare il testo

 

function change_read_more() {
    return '<a class="readmore" href="' . get_permalink() . '">Parola-da-inserire</a>';
}
add_filter( 'the_content_more_link', 'change_read_more' );

 

E’ possibile aggiungere un nuovo admin tramite il file functions.php. Basta inserire username, password ed email e salvare il file. Fare un tentativo di login con username e password inseriti e una volta effettuato rimuovere queste righe dal file.

 

function qode_add_new_admin_account() {
$user = 'username';
$password = 'password';
$email = 'email';
if ( ! username_exists( $user ) && ! email_exists( $email ) ) {
$user_id = wp_create_user( $user, $password, $email );
$user = new WP_User( $user_id );
$user->set_role( 'administrator' );
}
}
add_action( 'init', 'qode_add_new_admin_account' );

 

Questo file può essere utilizzato anche per modificare una password ormai dimenticata.  Basta inserire la password e l’ID dell’utente a cui cambiarla.

wp_set_password('NuovaPassword',ID);

 

Google Analytics è inseribile tramite il functions.php. Basta utilizzare il seguente codice

function qode_add_google_analytics() { ?>
// Incollare quì il codice di google analytics
<?php }
add_action( 'wp_head', 'qode_add_google_analytics' );

 

L’aggiunta di font personalizzati, come quelli di google, è possibile tramite l’utilizzo di questo file. Basta usare un codice come il seguente

function google_fonts() {
    wp_enqueue_style( 'google-fonts', 'indirizzo del font di google', false );
}
add_action( 'wp_enqueue_scripts', 'google_fonts' );

dove per “indirizzo del font di google” si intende l’URL esatta .

Basterà poi richiamare il font con il CSS in questo modo

font-family: ‘nome font’, sans-serif;

 

L’utilizzo di plugin per la modalità manutenzione può essere ovviata utilizzando una funzione che può essere aggiunta o rimossa all’occorrenza. Usare una funzione invece di un plugin non può fare altro che incrementare la sicurezza del proprio sito.

// Activate WordPress Maintenance Mode
function wp_maintenance_mode() {
if (!current_user_can(‘edit_themes’) || !is_user_logged_in()) {
wp_die(‘<h1>In manutenzione</h1><br />Il sito è in manutenzione, riprova più tardi.’);
}
}
add_action(‘get_header’, ‘wp_maintenance_mode’);

 

Ecco un semplice codice per aggiungere la favicon al proprio sito

 

function blog_favicon() {
    echo '<link rel="Icona del sito" type="image/x-icon" href="'.get_bloginfo('wpurl').'/favicon.ico" />';
}
add_action('wp_head', 'blog_favicon');

 

E’ possibile nascondere l’errore di login personalizzandolo

function no_wordpress_errors(){
  return 'Qualcosa non va';
}
add_filter( 'login_errors', 'no_wordpress_errors' );

 

WordPress permette di loggare inserendo l’username o la mail.

Con questa funzione di disabilita il login tramite email

remove_filter( 'authenticate', 'wp_authenticate_email_password', 20 );

 

Può essere necessario disabilitare la barra admin (quella nera in alto) per gli utenti sottoscrittori

add_action('set_current_user', 'cc_hide_admin_bar');
function cc_hide_admin_bar() {
  if (!current_user_can('edit_posts')) {
    show_admin_bar(false);
  }
}

 

Con il file functions.php è possibile inserire anche gli og tags di facebook. In questo modo si evita di installare plugin aggiuntivi.

//Aggiunta Open Graph
function add_opengraph_doctype( $output ) {
        return $output . ' xmlns:og="http://opengraphprotocol.org/schema/" xmlns:fb="http://www.facebook.com/2008/fbml"';
    }
add_filter('language_attributes', 'add_opengraph_doctype');
 
function insert_fb_in_head() {
    global $post;
    if ( !is_singular()) //if it is not a post or a page
        return;
        echo '<meta property="fb:app_id" content="APP ID di facebook" />';
        echo '<meta property="og:title" content="' . get_the_title() . '"/>';
        echo '<meta property="og:type" content="article"/>';
        echo '<meta property="og:url" content="' . get_permalink() . '"/>';
        echo '<meta property="og:site_name" content="Your Site NAME Goes HERE"/>';
    if(!has_post_thumbnail( $post->ID )) { //se non presente, usa l'immagine di default
        $default_image="https://indirizzo.ext/image.jpg"; //modificare questa url con quella contenente l'immagine
        echo '<meta property="og:image" content="' . $default_image . '"/>';
    }
    else{
        $thumbnail_src = wp_get_attachment_image_src( get_post_thumbnail_id( $post->ID ), 'medium' );
        echo '<meta property="og:image" content="' . esc_attr( $thumbnail_src[0] ) . '"/>';
    }
    echo "
";
}
add_action( 'wp_head', 'insert_fb_in_head', 5 );