Come personalizzare la stringa URL sugli attachment in WordPress
da Massimo Della Rovere · pubblicato il 1 Luglio, 2017 · modificato il 31 Ottobre, 2017

Come sapete quando alleghiamo un file ad un post o ad una pagina viene creata anche una stringa  URL che identifica la pagina per la visualizzazione della risorsa immagine, video, audio o altri formati di file supportati. A dirvi la verità a me non mi è mai piaciuta più di tanto questa soluzione, capisco i motivi ma questi URL lunghissimi con il nome del post o della pagina seguiti dal titolo completo del file ho cercato molte volte di evitarli, anzi molte volte elimino proprio la pagina ed eseguo un redirect.

Introduzione

A prescindere se anche voi apprezziate o no questa soluzione, ci sono dei casi, come ad esempio dei siti di e-commerce che il fatto di agganciare una risorsa solo ad un postype può essere un limite, in quanto la risorsa immagine potrebbe essere comune ad altri prodotti o potrebbe essere cambiata tra un prodotto ad un altro e quindi sarebbe meglio che avesse un permalink fisso che non cambia nel tempo in base a dove si collega.

  • Link default…..: domino.com/post_title/attachment/post_name
  • Link desiderato: domino.com/attachment/id

Ad esempio su alcuni siti di e-commerce che ho sviluppato mi sono trovato molto meglio con il secondo esempio, mi sembra un permalink più semplice, se in futuro devo fare delle regole di redirect sono molto più semplici da sviluppare, scrive codice per creare liste di risorse immagini ed altro specialmente se non si possono usare le funzioni native di WordPress come ad esempio nelle parti di codice che creano HTML con javascript.

Soluzione

Per ottenere questo risultato dobbiamo usare qualche comando PHP e cambiare diverse cose che WordPress imposta in modo standard durante la configurazione dei permalink, per prima cosa dobbiamo scrivere un filtro che cambi il metodo con cui WordPress crea il link di una attachment, dobbiamo togliere le regole di rewrite standard e aggiungere la nostra regola per far riconoscere a WP la richiesta domino.com/attachment/id.

Passo (1) – Filtro su attachment_link

Se andate nell’area di amministrazione del vostro WordPress e selezionate il menu media scegliendo il tipo di visualizzazione dettagliata, potete notare che se passate con il cursore sopra la voce visualizza vedrete in basso nel browser il link standard di attachment.  Per cambiare questo comportamento inseriamo nel nostro file function.php quanto segue:

function my_attachment_link($link,$postid) 
{
    return home_url("/attachment/$postid/");
}

// Personalizzazione del link su attachment
// ricordarsi di cambiare anche il rewrite rule

add_filter('attachment_link','my_attachment_link',10,2);

Salvate il file e ricaricate la pagina di visualizzazione media e controllate il link generato per la voce di menu (visualizza), se è stato cambiato la procedura è stata eseguita in modo corretto, vi allego una schermata di esempio di un sito dove utilizzo questa tecnica:

Passo (2) – Aggiungere la regola di rewrite

Ovviamente il link generato precedentemente ancora non è funzionante, infatti con molta probabilità se cliccate sul nuovo link ricevete un errore 404 di pagina non trovata. Questo perché WordPress quando riceve la richiesta non sa ancora come comportarsi di fronte a questo nuovo permalink. Quindi dobbiamo aggiungere la regola in questo modo:

function my_file_rewrite_add() 
{
    add_rewrite_rule('attachment/([^/]+)/?$',
        'index.php?attachment_id=$matches[1]','top');
}

// Aggiungo le nuove regole per attachment
// che devono essere inserite ad inizio lista

add_filter('init','my_file_rewrite_add');

Anche se questo codice dovrebbe bastare per raggiungere l’obiettivo prefissato è sempre meglio fare le cose per bene e ripulire tutte le regole di rewrite standard che non servono, non solo per questioni di pulizia ma anche di performance.

NB: Per far in modo che queste modifiche siano memorizzate da WordPress dovete andare nel menu impostazioni->permalink è cliccare sul bottone di conferma.

Passo (3) – Rimuovere le regole di rewrite standard

WordPress aggiunge molte regole di rewrite per quanto riguarda gli attachment, proprio perché questi possono esseri collegati sia ad un post che ad una pagina o anche a nessuna risorsa in quanto solo caricati nel media library. Se volete curiosare su questi aspetti vi consiglio di installare il plugin  (Rewrite Rules Inspector) che vi devo dire che mi è tornato utile moltissime volte specialmente quando eseguite delle forti personalizzazioni.

Come potete  vedere le regole sono molte quindi andiamo di pulizia:

function my_rewrite_remove($rewrite)
{
    foreach ($rewrite->rules as $key=>$value)
    {
        if(strpos($value,'attachment=')!== false)
           unset($rewrite->rules[$key]);
    }
}

// Rimuovo le regole attachment che sono
// state inserite dalla procedura standard

add_action('generate_rewrite_rules','my_rewrite_remove');

NB: Per far in modo che queste modifiche siano memorizzate da WordPress dovete andare nel menu impostazioni->permalink è cliccare sul bottone di conferma.

Opzionale – Rewrite diretto su risorsa

Se siete drastici come me è volete eliminare il template HTML attachment per visualizzare direttamente la risorsa immagine, video, etc. Vi allego il codice PHP che dovete inserire nel file attachment.php presente nel vostro tema.

$attachment = wp_get_attachment_image_src(get_the_ID(),'full');
wp_redirect($attachment[0],301); exit();

Community WordPress

Se volete scambiare informazioni su WordPress con altri esperti e rimanere aggiornati sulle ultime news venite a trovarci nella nostra community italiana su google plus. Se per caso non avete un account google ci trovate anche su facebook.

1 Commento

  1. L'articolo è interessante, non sono un SEO ma ho un dubbio, questa modifica al permalink non potrebbe avere degli svantaggi sulla indicizzazione di google? In ogni caso la tecnica può essere usata per personalizzare in maniera diversa un URL del post, tu hai usato un progressivo ma in realtà possiamo fare cose diverse.

condividi