Come personalizzare il nome file di upload in WordPress
da Massimo Della Rovere · pubblicato il 3 Giugno, 2017 · modificato il 23 Giugno, 2017

Quando carichiamo un file nella libreria multimedia presente in WordPress vengono creati diversi file in base alle dimensioni definite nel tema utilizzato. I nomi di questi file normalmente seguono questo standard {nome}-{width}x{height}.jpg. La parte del nome viene presa dal nome del file originale, mentre le dimensioni vengono prese dal tema attualmente utilizzato. Come facciamo a personalizzare la parte {nome}?

Personalizzare il nome del file

Nella maggior parte dei casi il nome del file originale che viene caricato è più che sufficiente per ottenere il risultato desiderato, però ci possono essere dei casi in cui questa libertà potrebbe rilevarsi un problema. Ad esempio io ho trovato utile questa tecnica su un portale di annunci dove i file vengono caricati direttamente degli utenti, e dato che non esisteva un controllo sui nomi usati abbiamo deciso di cambiare metodo.

Nell’esempio che vi riporto abbiamo usato un progressivo numerico che sostituisce il nome del file originale caricato dall’utente. Però ci sono anche casi di utilizzo diversi, come ad esempio rendere il nome del file sempre minuscolo o aggiungere un prefisso all’inizio del nome per riconoscerlo con altri strumenti di calcolo.

Codice PHP necessario

Per eseguire questa funzionalità basta attivare un filtro di WordPress e scrivere il codice PHP per personalizzare il nome in base alle proprie esigenze. Nell’esempio uso una classe dedicata allo scopo ma volendo potete usare il classico procedurale.

// Nel file function.php del vostro tema aggiungete il comando
// per attivare il filtro. In questo caso chiamo una classe.

eMarket_Filter_Multimedia::set_file_name();

// Definizione CLASSE per esecuzione dello script.
// Caricamento della classe tramite metodo autoload.

class eMarket_Filter_Multimedia
{
  // Definizione di un filtro per indicare la funzione PHP
  // che dovrà essere eseguita durante la sua elaborazione

  static function set_file_name()
  {
     add_filter('wp_handle_upload_prefilter',
        array(__CLASS__,'get_file_name'));
  }

  // Funzione collegata alla modifica del FILTRO principale
  // che riceverà i parametri in base alla documentazione

  static function get_file_name($file)
  {
    $info = (object) pathinfo($file['name']);
    $name = {codice di personalizzazione};

    // Calcolo il nome del file con o senza
    // estensione in base al valore originale

    if (empty($info->extension)) $file['name']=$name;
      else $file['name']=sprintf('%s.%s',$name,$info->extension);

    // Ritorno alla funzione chiamante la
    // nuova struttura del file modificata

    return $file;
  }
}

Titolo del file caricato

Usando questa tecnica anche il titolo del vostro file sarà impostato con il nome che avete personalizzato. Se volete aggiungere qualcosa o volete personalizzare in modo diverso il titolo dovete utilizzare un’altro filtro. Nel mio esempio precedente io ho aggiunto il prefisso UPLOAD davanti al nome del file. Però le possibilità sono infinite.

// Aggiungete al vostro file function.php anche la
// chiamata al nuovo metodo per impostare il titolo

eMarket_Filter_Multimedia::set_file_name();
eMarket_Filter_Multimedia::set_file_title();

// Nella classe definita nell'esempio precedente
// aggiungete i seguenti metodi o fatelo in modo procedurale

static function set_file_title()
{
  add_filter('wp_insert_attachment_data',
      array(__CLASS__,'get_file_title'),10,2);
}

// Funzione collegata alla modifica del FILTRO principale
// che riceverà i parametri in base alla documentazione

static function get_file_title($data,$post)
{
    if (isset($data['post_title']) && empty($post['ID'])) {
        $data['post_title']=sprintf('UPLOAD %s',$data['post_title']);
    }

    return $data;
}

Titolo del file caricato

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.

2 Commenti

  1. Ciao Massimo, sto provando il filtro su un sito che ha una necessità simile, volevo usare il numero interno collegato al file attachment per creare il titolo, va non trovo nulla nei parametri che il filtro passsa alla funzione. Sai come è possibile reperire questa informazione? Grazie mille, leggo sempre con piacere i tuoi articoli.

  2. Sandro da quello che posso vedere il filtro agisce ancora prima che venga creato il record effettivo e quindi una assegnazione automatica di un ID che avviene a livello di database. Quindi non penso che sia possibile usare un valore che ancora non è stato generato. L'unica soluzione è vedere nell'elenco dei filtri se esiste qualcosa dopo la creazione dell'immagine e casomai modificare il titolo con un update SQL sul database.

condividi