Un modo per cambiare gli URL delle immagini nei post in URL di immagini CDN?
Per qualche motivo il mio hosting non riesce a risolvere il problema se uso W3 Total Cache o W3 Super Cache per la memorizzazione nella cache: l'utilizzo del SQL del mio sito continua a raggiungere picchi... e durante i picchi alti il server diventa lento e a volte si blocca.
Per questo devo usare il plugin Hyper Cache per la cache, poiché funziona perfettamente, ma questo plugin non supporta il CDN... Ho acquistato un servizio CDN da MaxCDN ma per quello dovrei usare W3 Total Cache o Super Cache...
Quindi sto cercando un modo per cambiare automaticamente gli URL delle immagini nei post da, ad esempio: http://www.sitename.com/wp-content/uploads..... a http://cdn.sitename.com/wp-content/uploads...
È possibile? Se sì, per favore aiutami. Grazie in anticipo.
Hai visto questo plugin? http://wordpress.org/extend/plugins/cdn-rewrites/
Dalla descrizione del plugin:
Fondamentalmente, questo plugin permette a un utente WordPress di specificare due variabili importanti: un host di origine (il tuo sito) e un "host di destinazione" (host CDN). Troverà quindi tutti i contenuti statici da quell'host di origine e li riscriverà nella destinazione in modo che vengano serviti da lì.
Sembra essere ciò di cui hai bisogno?
------------------------------ MODIFICA
Se vuoi evitare di usare plugin, ecco un ottimo articolo al riguardo: http://www.cyberciti.biz/tips/wordpress-cdn-content-delivery-network-configuration.html
Tuttavia, non ho mai provato questo metodo. Ma sembra una soluzione pulita.

Una risposta dovrebbe essere più di un semplice link a un sito esterno. Per favore, aggiungi alcune informazioni alla tua risposta: cosa fa il plugin e come funziona. Grazie.

potresti guardare il codice del plugin e vedere se riesci a integrarlo nel tuo tema. È un plugin piuttosto semplice

ho aggiunto il plugin ma ha rotto il pannello di amministrazione lol... non riesco più ad aggiungere tag

questo è un lol. il plugin aggiunge nuovamente jquery, il che non è necessario e jqueryui, che potresti già avere in esecuzione. ho dovuto rimuovere l'enqueuing perché causava problemi. puoi commentare quelle righe in cdnr.class.php - non sono sicuro che sia questo a causare il tuo problema però...

non sono sicuro se hai risolto, ma ecco un plugin alternativo da provare: http://wordpress.org/extend/plugins/cdn-sync-tool/ da usare in combinazione con http://wordpress.org/extend/plugins/wp-super-cache/

no, ancora non riesco a trovare una soluzione e come ho detto sopra, super cache non funziona sul mio hosting. riguardo allo strumento di sincronizzazione cdn, dice che richiede wp super cache per i cambi di url lol.. la stessa cosa della mia domanda quindi no, ancora nessuna soluzione

se le immagini rimangono nella stessa posizione e vuoi solo cambiare il sottodominio, la RewriteRule di .htaccess sarebbe la soluzione più semplice:
se la regola si applica solo alle immagini, allora:
RewriteCond %{HTTP_HOST} =www.sitename.com
RewriteRule ^.+\.(jpe?g|png|other|img|ext)$ http://cdn.sitename.com/$0 [nocase,redirect=temp,last]
potresti aggiungere un test RewriteCond per le immagini, ma il test eseguito in RewriteCond utilizza le stesse risorse del farlo una volta in RewriteRule.
potresti anche reindirizzare tutto nella directory uploads. se cdn.sitename.com passa attraverso lo stesso set di regole .htaccess, includerei l'istruzione RewriteCond:
RewriteCond %{HTTP_HOST} =www.sitename.com
RewriteRule ^wp-content/uploads/.+$ http://cdn.sitename.com/$0 [nocase,redirect=temp,last]
[redirect=temp] o [redirect=permanent]; spesso scritti come [R=302] e [R=301].
documentazione di apache mod_rewrite
(l'evidenziazione/formattazione automatica della sintassi non è stata progettata pensando a .htaccess :-)
saluti,
Gregory

Puoi analizzare tramite regex le immagini in the_content
; ma questo comporta sempre un caricamento lento.
In alternativa puoi modificare l'URL delle immagini dopo post_save
nel database o modificare i post esistenti nel database creando un CDN personalizzato. Questa è la soluzione più veloce e tutti i plugin di caching hanno il limite di dover analizzare il contenuto.
Per informazioni su come implementare un CDN personalizzato in WP vedi questa risposta.

Se vuoi impostare manualmente le modifiche al src delle immagini, questa è la funzione che fa per te: wp_update_post( $post ); abbinata a un ciclo che analizza ogni post e post_type che vuoi modificare, utilizzando preg_replace per sostituire gli URL src.
Assegna il template a una pagina, carica la pagina ogni volta che vuoi aggiornare gli URL src, elimina la pagina quando non vuoi che altri eseguano il codice.
I pattern di ricerca/sostituzione di grep_replace() sarebbero qualcosa del genere:
ricerca: (<img [^>]*?src=['"]https?://)www\.sitename\.com
sostituisci con: $1cdn.sitename.com
O più specificamente:
ricerca: (<img [^>]*?src=['"]https?://)www(\.sitename\.com/wp-content/uploads/)
sostituisci con: $1cdn$2
Anche se wp_update_post() crea automaticamente una revisione nel caso tu debba annullare la modifica, fai un backup del database prima di caricare la pagina.
Consiglio di testare la combinazione di ciclo, wp_update_post() e preg_replace() prima su un insieme limitato di post, possibilmente specificando gli ID dei post da modificare in un array e iterando su quell'array.
Un'opzione aggiuntiva potrebbe essere creare una nuova categoria temporanea 'Aggiornato CDN' e assegnare questa categoria a ogni post mentre lo aggiorni. Potresti poi escludere dai successivi aggiornamenti i post che hanno già questa categoria. Il piccolo svantaggio è che, anche se in seguito eliminerai la categoria, i valori rimarranno salvati per ogni post nel database (correggimi se sbaglio).
Saluti,
Gregory

questa è un'ottima soluzione, gregory! anche se consiglio vivamente di fare la sostituzione direttamente prima dell'azione di salvataggio, così non dovrai preoccuparti dei nuovi post successivamente. se il tuo sito ha molti post, una funzione che scorre tutti i post più e più volte richiede molto tempo per essere eseguita.

:-) fischietti, ecco perché consiglio di inserire il codice in un template specializzato, assegnare il template a una Pagina e caricare la Pagina solo quando vuoi eseguire la funzione di aggiornamento. il programmatore potrebbe persino includere un controllo dei ruoli nel template per consentire solo agli Admin di caricare la Pagina.

oh, capisco. pensavo volessi eseguire l'aggiornamento sul template frontend della pagina, errore mio ;) hai ragione anche riguardo alla categoria, incluso il piccolo svantaggio - ma combinando i nostri metodi non avresti bisogno di eseguire nuovamente lo script in seguito :)

potresti anche agganciarti all'azione pre_post_update.
il vantaggio è che il tuo server deve solo scambiare gli URL una volta - quindi non utilizzerai sempre lo script str_replace che hai scritto al momento del delivery, ma al salvataggio.
dando per scontato che tu sia già familiare con la sostituzione stessa, inserisci semplicemente la tua funzione in questa funzione, ed ecco fatto!
add_action('pre_post_update', 'change_image_urls', 10 );
function change_image_urls( $post_id ) {
// la tua funzione qui...
// $post = get_post( $post_id );
}

ha senso ma considerando che ci sono già 990 articoli pubblicati non sono sicuro di quanto possa aiutare. quindi sto semplicemente usando uno str replace in una funzione nel file functions.php che sostituisce..

ok, capisco il tuo punto qui - forse potresti scrivere una piccola funzione da chiamare dal backend, dove cerchi in tutti i tuoi articoli aggiornandoli una volta sola? so che ci vuole un po' con i 990 pubblicati, ma sarebbe una soluzione elegante. potresti anche usare il plugin search and replace per eseguire questa azione direttamente nel tuo database.
