Consentire caricamento file xml in WordPress

Di norma WordPress consente il caricamento di file solo per le estensioni ritenute “sicure”. A causa delle nuove leggi per le pubbliche amministrazioni queste ultime hanno la necessità di caricare sui propri siti dei file XML e renderli accessibili ai vari Ministeri ed Enti. WordPress non lascia caricare file XML per questioni di sicurezza (non che il file xml abbia in sè delle criticità, ma non rientra nelle estensioni consentite di default), per poterli caricare bisogna aggiungere nel file functions.php (lo trovate nella cartella del vostro tema) le seguenti righe:

function my_myme_types($mime_types){
        $mime_types[‘xml‘] = ‘application/xml‘; //aggiunge l’estensione XML
        return $mime_types;
}
add_filter(‘upload_mimes’, ‘my_myme_types’, 1, 1);

Se avete realizzato un tema figlio potete creare un nuovo file functions.php da inserire nella cartella del tema figlio contenente le righe indicate sopra.
Per aggiungere tutte le estensioni di cui si ha bisogno è sufficiente aggiungere all’array $mime_types quelle desiderate.

Se non siete programmatori e volete un modo veloce per aggiungere questa funzionalità al vostro sito in WordPress, potete scaricare il plugin gratuito che ho realizzato: scarica caricaxml

(aggiornato a WordPress 4.7.1)

9 risposte a “Consentire caricamento file xml in WordPress”

  1. Non sono un tecnico informatico, ma avrei bisogno di sapere perché il caricamento di file xml può portarte questi problemi e quali sono.
    Se quindi modifico il file function.php espongo il sito?

  2. Ciao, se abiliti l’upload da functions.php consenti a tutti gli utenti di caricare file XML che spesso sono stati usati per sfruttare vulnerabilità dei componenti di WP, soprattutto quando non viene aggiornato spesso il sistema. Meglio caricare via FTP il file XML e linkarlo successivamente dal sito se possibile 😉

    1. Ciao, ho aggiornato il codice all’ultima versione di WordPress e realizzato recentemente anche un plugin gratuito che puoi utilizzare direttamente nei siti, provali e dovresti risolvere il problema 😉

  3. Ciao Simone,
    ho scaricato e installato il tuo plugin ma quando vado ad attivarlo mi restituisce un errore fatale. Indagando ho scoperto che la funzione my_myme_types() (che dovrebbe essere usata dal tuo plugin) è già presente nel codice del tema wp che sto utilizzando (per permettere il caricamento di file svg): da quel che capisco tale funzione non può essere chiamata due volte.
    Come posso fare per risolvere, evitando di andare a cancellare parte del codice del tema che inevitabilmente tornerebbe con un aggiornamento dello stesso, portando quindi ad un down del sito?
    Grazie,
    Andrea

    1. Ciao, potresti utilizzare un tema figlio , scarica una copia del file functions.php del tuo tema attuale, credo che al suo interno ci sia la funzione my_myme_types(), puoi copiarla in un nuovo file functions.php da caricare nel tema figlio in cui aggiungi l’estensione xml. Grazie al tema figlio non hai problemi ad aggiornare il tema padre, e il codice non ti si sovrascrive 😉

      1. Grazie per la tempestiva risposta.
        La soluzione del tema child, che già uso, l’avevo già presa in considerazione ma purtroppo la funzione my_myme_types() è in un altro file. Potrei copiare tale file nel tema child ma, a differenza del function, in caso di aggiornamenti potrei tranquillamente aggiornare ma perderei eventuali modifiche fatte in quel file. Sbaglio?
        In ogni caso come posso fare per aggiungere l’estensione xml con la stessa funzione già utilizzata? Nel codice vedo questo:

        function my_myme_types($mime_types){
        $mime_types[‘p12’] = ‘application/x-pkcs12’;
        return $mime_types;
        }

        Posso semplicemente aggiungere xml accanto a p12? Occorre qualche virgola o punto e virgola?
        Grazie infinite

        1. Ciao, i file nel tema figlio non vengono mai sovrascritti quando fai l’aggiornamento del tema genitore, devi solo fare attenzione nel caso in cui siano state introdotte delle modifiche nella nuova versione che aggiorni e replicarle in quello figlio.
          Per quanto riguarda i tipi di file, è sufficiente aggiungere ulteriori righe, così ad esempio:

          function my_myme_types($mime_types){
          $mime_types[‘p12’] = ‘application/x-pkcs12’;
          $mime_types[‘xml‘] = ‘application/xml‘;
          }
          add_filter(‘upload_mimes’, ‘my_myme_types’, 1, 1);

Rispondi