graficajam
WordPress snippets, parte uno

WordPress snippets, parte uno

Giamp14/06/2025

Ciao, volevo iniziare una raccolta di snippet "cotti e mangiati" come promemoria per lo sviluppo veloce in WordPress.

Email SMTP

Sapevi che WordPress include già PHPMailer pronto per essere configurato con SMTP? Non servono plugin: basta aggiungere questo snippet. Tutte le email gestite con wp_mail() verranno inviate tramite la tua configurazione SMTP.

Andiamo nel file wp-config.php di WordPress e creiamo le nostre costanti.

// SMTP email settings
define( 'SMTP_USERNAME', 'example@gmail.com' );  
define( 'SMTP_PASSWORD', '1234567' );   
define( 'SMTP_SERVER', 'smtp.gmail.com' );     
define( 'SMTP_FROM', 'example@example.com' );   
define( 'SMTP_NAME', 'myname' );  
define( 'SMTP_PORT', '587' );     
define( 'SMTP_SECURE', 'tls' );   
define( 'SMTP_AUTH', true );  
define( 'SMTP_DEBUG',   0 );  

Fatto questo andiamo nel file functions.php e usiamo il "gancio" che WordPress, premurosamente, ci mette a disposizione.

add_action( 'phpmailer_init', 'my_phpmailer_smtp' );
function my_phpmailer_smtp( $phpmailer ) {
    $phpmailer->isSMTP();
    $phpmailer->Host = SMTP_SERVER;
    $phpmailer->SMTPAuth = SMTP_AUTH;
    $phpmailer->Port = SMTP_PORT;
    $phpmailer->Username = SMTP_USERNAME;
    $phpmailer->Password = SMTP_PASSWORD;
    $phpmailer->SMTPSecure = SMTP_SECURE;
    $phpmailer->From = SMTP_FROM;
    $phpmailer->FromName = SMTP_NAME;
}

Per la sicurezza: Questo snippet è per sviluppo/test. In produzione:

  • Usa variabili d'ambiente (getenv('SMTP_PASSWORD')) anziché password in chiaro
  • Oppure considera plugin come WP Mail SMTP che gestiscono le credenziali in modo sicuro

Velocizzare il caricamento tramite .htaccess

Ogni caricamento web richiede decine di richieste HTTP tra browser e server per recuperare immagini, script e stili. Senza ottimizzazione, il sito risulta più lento. Intervenendo sul file .htaccess di Apache, possiamo istruire il server a gestire queste risorse in modo efficiente attraverso due tecniche chiave:

  • mod_deflate abilita la compressione GZIP per un trasferimento di informazioni "compresso" quindi più veloce.
  • mod_expires abilita la cache del browser per immagini e file CSS e JS.

Inseriamo questo codice all'inizio del file .htaccess nella root di WordPress.

# --- INIZIO OTTIMIZZAZIONE ---

# 1. ATTIVA LA COMPRESSIONE GZIP
<IfModule mod_deflate.c>
  AddOutputFilterByType DEFLATE text/plain text/html text/xml text/css application/xml application/xhtml+xml application/rss+xml application/javascript application/x-javascript image/svg+xml
</IfModule>

# 2. ATTIVA LA CACHE DEL BROWSER (EXPIRES)
<IfModule mod_expires.c>
  ExpiresActive On
  # Immagini per 1 anno
  ExpiresByType image/jpg "access plus 1 year"
  ExpiresByType image/jpeg "access plus 1 year"
  ExpiresByType image/png "access plus 1 year"
  ExpiresByType image/webp "access plus 1 year"
  ExpiresByType image/gif "access plus 1 year"
  # CSS e JS per 1 mese
  ExpiresByType text/css "access plus 1 month"
  ExpiresByType application/javascript "access plus 1 month"
</IfModule>

# --- FINE OTTIMIZZAZIONE ---

Maintenance mode manuale

Quando proprio i plugin non ci piacciono e abbiamo bisogno di oscurare temporaneamente il nostro sito per manutenzione possiamo usare questo snippet.

function wp_maintenance_mode() {
    if (!current_user_can('edit_themes') || !is_user_logged_in()) {
        wp_die('<h1>Sito in manutenzione</h1><p>torneremo presto online!</p>');
    }
}
add_action('get_header', 'wp_maintenance_mode');

Disabilitare le email di aggiornamento automatico

Per impostazione predefinita, WordPress invia notifiche email quando aggiorna automaticamente core e plugin. Possiamo disabilitarle aggiungendo questi filtri in functions.php:

// Disable auto-update emails.
add_filter( 'auto_core_update_send_email', '__return_false' );

// Disable auto-update emails for plugins.
add_filter( 'auto_plugin_update_send_email', '__return_false' );

Nascondere la versione di WordPress

Di default, WordPress inserisce un tag meta con la versione corrente della nostra installazione.

`<meta name="generator" content="WordPress 6.9.1">`

Per rimuovere questo tag utilizziamo il seguente snippet.

remove_action('wp_head', 'wp_generator');

Blocca l'accesso ai file superflui

Per impostazione predefinita, WordPress include alcuni file che è meglio rendere inaccessibili: readme.html che contiene la versione WP, license.txt che espone informazioni, e wp-config-sample.php che è un file di esempio non necessario. Blocchiamo tutto tramite .htaccess WordPress ci tornerà la pagina 404.

# Blocca accesso a file sensibili
<FilesMatch "^(readme\.html|license\.txt|wp-config-sample\.php)$">
    Order allow,deny
    Deny from all
</FilesMatch>

Personalizzare il logo nella login page

Con questo snippet personalizziamo la pagina di login cambiando il logo, e la destinazione del link settando il nostro sito.

// 1. Cambia il Logo (CSS)
add_action('login_head', 'my_custom_login_logo');
function my_custom_login_logo() {
    ?>
    <style type="text/css">
        #login h1 a {
            background-image: url(<?php echo esc_url(get_stylesheet_directory_uri() . '/img/gi-avatar.png'); ?>) !important;
            background-size: contain !important;
            width: 85px !important;
            height: 85px !important;
            background-position: center !important;
            border-radius: 0%;
        }
    </style>
    <?php
}

// 2. Cambia l'URL del logo (destinazione al click)
add_filter('login_headerurl', 'my_login_logo_url');
function my_login_logo_url() {
    return esc_url(home_url());
}

// 3. Cambia il testo dell'attributo title
add_filter('login_headertext', 'my_login_logo_url_title');
function my_login_logo_url_title() {
    return esc_html(get_option('blogname'));
}

Per questa prima parte è tutto, grazie per aver letto questo post. A presto.

Hai qualcosa da dire?

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *

leggi anche...