Torna al blog

Proxying Media Files in a Local WordPress Development Environment with DDEV

2023-07-043 min di lettura

Il proxying dei file multimediali in un ambiente di sviluppo WordPress locale è un'abilità essenziale per gli sviluppatori che desiderano garantire che il loro sito locale rifletta il contenuto e la funzionalità del sito di produzione live. Scaricare tutti i file multimediali nel tuo ambiente locale potrebbe non essere la soluzione migliore, specialmente se il sito di produzione ha una vasta libreria multimediale. Invece, puoi configurare il tuo ambiente di sviluppo locale per inoltrare le richieste multimediali al server di produzione. Per lo sviluppo locale, sto utilizzando DDEV, uno strumento open-source che rende incredibilmente semplice mettere in funzione ambienti di sviluppo PHP locali in pochi minuti. In questo post del blog, condividerò una soluzione che ho trovato utile per il proxying dei file multimediali in un ambiente DDEV locale senza utilizzare un plugin.

Il Problema

Lavorando con WordPress localmente utilizzando DDEV, avevo bisogno di un modo per visualizzare i file multimediali senza scaricarli effettivamente nel mio ambiente locale. Il mio obiettivo era far sì che WordPress caricasse questi file dal server di produzione ogni volta che venivano richiesti.

La Soluzione

Possiamo raggiungere questo obiettivo aggiungendo funzioni personalizzate al file functions.php del tuo tema WordPress. Queste funzioni cambieranno gli URL degli allegati e delle miniature per puntare al server di produzione.

Ecco lo snippet di codice che puoi aggiungere al tuo file functions.php:

if ($_SERVER['HTTP_HOST'] == 'your-local-ddev-url') {

    function replace_domain($url) {
        return str_replace('https://your-local-ddev-url', 'https://your-production-url', $url);
    }

    function rewrite_attachment_url($url) {
        return replace_domain($url);
    }
    add_filter('wp_get_attachment_url', 'rewrite_attachment_url');

    function rewrite_thumbnail_attributes($attr, $attachment, $size) {
        if (isset($attr['srcset'])) {
            $attr['srcset'] = replace_domain($attr['srcset']);
        }
        return $attr;
    }
    add_filter('wp_get_attachment_image_attributes', 'rewrite_thumbnail_attributes', 10, 3);

}

Sostituisci your-local-ddev-url con l'URL del tuo ambiente DDEV locale e your-production-url con l'URL del tuo server di produzione.

Come Funziona

  • La funzione replace_domain prende un URL come input e sostituisce il dominio locale con il dominio di produzione.
  • La funzione rewrite_attachment_url utilizza il filtro wp_get_attachment_url per modificare gli URL dei file allegati.
  • La funzione rewrite_thumbnail_attributes modifica l'attributo srcset per le immagini in miniatura. Questo è utile quando il tuo tema utilizza immagini responsive di diverse dimensioni.

DDEV: Un Ottimo Strumento per lo Sviluppo Locale

DDEV è uno strumento open-source che ti aiuta a configurare rapidamente ambienti di sviluppo PHP locali con Docker. È incredibilmente facile da usare e può accelerare notevolmente il tuo flusso di lavoro di sviluppo. Utilizzando DDEV per il tuo sviluppo WordPress locale, puoi garantire che il tuo ambiente sia coerente con il tuo server di produzione, il che è fondamentale per evitare il problema "funziona sulla mia macchina".

Se sei nuovo a DDEV e vuoi sapere come configurarlo per WordPress e Drupal, ho una guida che ti accompagnerà nel processo di configurazione di un sito locale con DDEV. Dai un'occhiata al mio post precedente: Come configurare un sito locale WordPress e Drupal con DDEV.

Conclusione

Effettuando il proxying dei file multimediali da un server di produzione, puoi risparmiare spazio e tempo nel tuo ambiente di sviluppo locale. Questa soluzione è particolarmente utile quando si utilizza DDEV per siti WordPress di grandi dimensioni con librerie multimediali estese. Sii sempre consapevole del carico che ciò potrebbe aggiungere al server di produzione e assicurati che il tuo ambiente di produzione possa gestire il traffico aggiuntivo. Buona codifica!