Dopo Aver Spostato un Sito su un Altro Dominio, Tutte le Immagini Sono Perse
Ho spostato il sito da www.domain1.com
a www.domain2.com
Tuttavia, i percorsi delle immagini puntano ancora a www.domain1.com/wp-content/uploads...
. Quindi quando www.domain1.com
è andato offline, tutte le mie immagini non vengono più visualizzate.
Ho aggiornato la tabella wp_posts
dove tutti gli allegati ora puntano a www.domain2.com/wp-content/uploads...
, ma le immagini esistono in www.domain2.com
e ancora non riesco a vedere alcuna immagine. È un problema di cache?

Sembra che tu debba modificare gli URL delle vecchie immagini. Il modo più semplice e veloce per farlo è eseguire una ricerca e sostituzione sul database MySQL.
Puoi utilizzare PHPMyAdmin (solitamente fornito dal tuo hosting web) o altri software per modificare MySQL come Sequel Pro per apportare modifiche al tuo database MySQL senza toccare l'area di amministrazione di WordPress. Questo significa che puoi fare modifiche su larga scala eseguendo query SQL invece di farle una per una, cosa noiosa e che richiede tempo.
Ricorda di fare prima un backup del tuo database. Per farlo in PHPMyAdmin, seleziona il tuo database dalla barra laterale a sinistra, poi clicca su "Esporta". Il metodo "Semplice" va bene, ma se vuoi più controllo allora il metodo "Personalizzato" ti offre molte opzioni.
Dopo aver fatto il backup, clicca sulla scheda SQL e incolla il seguente codice nell'area di testo:
UPDATE wp_options SET option_value = replace(option_value, 'oldurl', 'newurl') WHERE option_name = 'home' OR option_name = 'siteurl';
UPDATE wp_posts SET guid = replace(guid, 'oldurl','newurl');
UPDATE wp_posts SET post_content = replace(post_content, 'oldurl', 'newurl');
UPDATE wp_postmeta SET meta_value = replace(meta_value,'oldurl','newurl');
E sostituisci "oldurl" con il tuo vecchio URL e "newurl" con il nuovo URL, mantenendo http:// ma rimuovendo gli slash finali. Ricontrolla, e quando sei sicuro, clicca il pulsante Esegui.
Vai sul tuo sito e controlla se le tue immagini funzionano. Se non funzionano, di solito è a causa di un errore di battitura, che puoi correggere ripristinando il database dal backup che hai fatto all'inizio del processo e riprovando.
C'è una guida più dettagliata sulla migrazione di dominio WordPress su questo sito, che contiene anche un link a uno script per generare la query SQL per te.

Una risposta dovrebbe essere più di un semplice link. Questo è al limite, ma assicurati di rivedere "Come scrivo una buona risposta?": "I link a risorse esterne sono incoraggiati, ma per favore aggiungi del contesto attorno al link così che gli altri utenti abbiano un'idea di cosa si tratta e perché è lì. Cita sempre la parte più rilevante di un link importante, nel caso il sito di destinazione non sia raggiungibile o venga rimosso definitivamente."

Se il tuo sito è piuttosto piccolo, potresti...
- Accedere a phpMyAdmin.
- Esportare il tuo database come file SQL.
- Fare una copia del tuo file SQL del database così da avere un backup del database originale, nel caso tu faccia un errore.
- Aprire il file SQL del database in un editor di testo.
- Cercare e sostituire
domain1.com
condomain2.com
. - Salvare il file SQL del database.
- Riaccedere a phpMyAdmin.
- Importare il file SQL del database.
AGGIORNAMENTO 18/03/2016
DOPO aver eseguito i passaggi sopra indicati, procedi con la seguente procedura:
Passo 1 – Creare una funzione da utilizzare.
function mbe_migrate_widgets() {
}
Passo 2 – Specificare cosa cercare e con cosa sostituire.
function mbe_migrate_widgets() {
$old_domain = 'http://dev.';
$new_domain = 'http://beta.';
}
Passo 3 – Recuperare tutti i widget di WordPress.
function mbe_migrate_widgets() {
$old_domain = 'http://dev.';
$new_domain = 'http://beta.';
global $wpdb;
// Ottieni tutti i Widget
$widgets = $wpdb->get_results(
"
SELECT `option_id`, `option_name`
FROM $wpdb->options
WHERE `option_name`
LIKE '%widget_%'
"
);
}
Passo 4 – Scorrere tutti i widget di WordPress e recuperare le informazioni per ciascun widget.
function mbe_migrate_widgets() {
$old_domain = 'http://dev.';
$new_domain = 'http://beta.';
global $wpdb;
// Ottieni tutti i Widget
$widgets = $wpdb->get_results(
"
SELECT `option_id`, `option_name`
FROM $wpdb->options
WHERE `option_name`
LIKE '%widget_%'
"
);
if ( ! $widgets ) {
return false;
}
$actions = array();
foreach ( $widgets as $widget ) {
// Recupera i dati del Widget.
$widget_data = get_option( $widget->option_name );
}
return $actions;
}
Passo 5 – Eseguire la ricerca e sostituzione sui dati del widget e aggiornare i record del database.
function mbe_migrate_widgets() {
$old_domain = 'http://dev.';
$new_domain = 'http://beta.';
global $wpdb;
// Ottieni tutti i Widget
$widgets = $wpdb->get_results(
"
SELECT `option_id`, `option_name`
FROM $wpdb->options
WHERE `option_name`
LIKE '%widget_%'
"
);
if ( ! $widgets ) {
return false;
}
$actions = array();
foreach ( $widgets as $widget ) {
// Recupera i dati del Widget.
$widget_data = get_option( $widget->option_name );
// Aggiorna i dati del Widget sostituendo il vecchio dominio con il nuovo.
$update = update_option(
$widget->option_name,
recursive_array_replace( $old_domain, $new_domain, $widget_data )
);
if ( $update ) {
$actions['success'][] = $widget->option_id;
} else {
$actions['failed'][] = $widget->option_id;
}
}
return $actions;
}
Passo 6 – Includere la funzione personalizzata di sostituzione ricorsiva nell'array.
// Sostituzione Ricorsiva di Stringhe - recursive_array_replace(mixed, mixed, array);
function recursive_array_replace( $find, $replace, $array ) {
if ( ! is_array( $array ) ) {
return str_replace( $find, $replace, $array );
}
$newArray = array();
foreach ( $array as $key => $value ) {
$newArray[ $key ] = recursive_array_replace( $find, $replace, $value );
}
return $newArray;
}
Ecco fatto. Esegui questa funzione una volta e tutti i tuoi widget dovrebbero magicamente ricominciare a funzionare.
Nota: Sta a te decidere dove posizionare questo codice o come eseguirlo. Sostituisci anche le variabili $old_domain
e $new_domain
di conseguenza.
Nota aggiuntiva: Tieni anche presente che questo esempio riguarda solo i widget. Se hai altre parti del tuo sito web che contengono URL in dati serializzati, modifica la query del database di conseguenza. (Mi riferisco a questa parte del codice: SELECT option_id, option_name FROM $wpdb->options WHERE option_name LIKE '%widget_%'
)
Vorrei postare un link al mio blog su questo argomento, ma non voglio sembrare "spam". Questo è essenzialmente un copia/incolla da un articolo che ho scritto sul mio sito web in data 18/03/2016. Il contenuto in questa risposta potrebbe diventare obsoleto e il contenuto nell'articolo sul mio sito web potrebbe diventare più rilevante in futuro. Se sei interessato, controlla il mio profilo per un link al mio sito web.
Spiegazione utile sui dati serializzati: Anatomia di un valore serialize().

Non farlo! Alcune impostazioni si danneggiano facendo così! Se memorizzi un array in WordPress, vengono salvate con una sintassi come questa: a:1:{i:0;s:6: "setting"}. I numeri rappresentano la lunghezza della stringa (1 array, chiave 0, stringa con lunghezza 6), quindi se cambi da mysite.com a mynewsite.com, la lunghezza non corrisponderà più, corrompendo l'array.

Al rischio di rispondere alla domanda con solo un link, penso che i seguenti passaggi su questa pagina (http://codex.wordpress.org/Moving_WordPress) siano ciò che stai cercando:
Modificare il Nome del Dominio e gli URL
Devi cambiare in modo sicuro tutte le istanze del tuo vecchio nome di dominio con il nuovo nome di dominio nel database. Puoi farlo utilizzando uno dei seguenti metodi:
Esegui solo una ricerca e sostituzione sulla tabella wp_posts.
Utilizza lo Script di Ricerca e Sostituzione per Database WordPress per modificare in modo sicuro tutte le istanze. (Se sei uno sviluppatore, usa questa opzione. È un processo in un solo passaggio rispetto alla procedura in 15 passaggi qui sotto)
Opzionalmente, puoi anche utilizzare uno strumento online (nel caso tu non voglia occuparti di caricare script sul tuo server) Ricerca e Sostituzione PHP Serializzato per WordPress Online che consente di sostituire un vecchio dominio o URL con uno nuovo correggendo allo stesso tempo i dati serializzati.
C'è anche molta altra utile informazione sulla migrazione di WP su quella pagina.

Sembra che tu abbia già la tua risposta, ma ti consiglio vivamente di utilizzare DBSR (db search replace) per sostituire TUTTE le occorrenze di dominio1 con dominio2. Esistono strumenti per questo. Questo è piuttosto pulito: https://github.com/interconnectit/Search-Replace-DB
L'intero processo è descritto. Ha una buona interfaccia utente.
In questo modo sarai sicuro che tutto sia a posto riguardo ai record del database.

Anche se hai detto di aver aggiornato i tuoi dati in wp_posts
con www.domain2.com
, ci sono ancora i valori home
e siteurl
nella tabella wp_options
che devono essere modificati, insieme ad altre cose.
Per assicurarti che tutti i tuoi dati siano stati aggiornati al nuovo dominio, segui questi passaggi:
- Scarica lo script di ricerca e sostituzione nel database di Interconnect IT qui
- Decomprimi il file e carica la cartella (tramite FTP) nella root della tua installazione WordPress, rinominandola in
replace
(screenshot) - Accedi alla nuova cartella creata tramite browser (es:
http://www.domain2.com/replace
) e visualizzerai lo strumento di ricerca/sostituzione - Da qui dovrebbe essere tutto abbastanza intuitivo: inserisci il tuo vecchio URL nel campo
search for…
e il nuovo URL nel camporeplace with…
Puoi cliccare il pulsante dry run sotto actions per vedere cosa verrà sostituito prima di eseguire lo script. Una volta terminato, assicurati di rimuovere la cartella /replace/
.

metodo molto semplice
Installa questo plugin Velvet nel backend di WordPress.
Ora vai nelle impostazioni di Velvet e inserisci il tuo vecchio dominio e il nuovo dominio. Premi il pulsante di aggiornamento. Hai finito.

Utilizza WP Migrate DB per esportare i dati in formato zip con sostituzione dell'URL.
Con questo plugin non perderai widget o dati serializzati.

Puoi utilizzare il plugin Wordpress: Go Live Update Urls
È davvero facile e veloce.

Una volta all'interno del cPanel, individua la categoria Database e clicca sull'icona dello strumento phpMyAdmin. Ora ti trovi nella pagina principale di phpMyAdmin. Trova il database appena aggiunto e clicca sul suo nome nella barra laterale sinistra. Il nostro database di esempio si chiama testdb. Questo aprirà il database e la schermata si aggiornerà mostrando un elenco delle tabelle. Utilizzando nuovamente la barra laterale, individua e clicca sulla tabella wp-posts. Guarda nella parte superiore dello schermo e vedrai diverse schede disposte orizzontalmente. Clicca sulla scheda SQL. Ora ti trovi in una schermata di editor MySQL. Nell'area del codice, copia il seguente frammento di MySQL.
UPDATE wp_posts SET post_content=(REPLACE (post_content, 'dommain1.com','domain2.com'));
Potrebbe funzionare?

In cosa differisce dalla altra risposta? Ci sono più riferimenti alle immagini nel database oltre al solo contenuto del post.

Ciao, se hai familiarità con i database, segui questi passaggi.
- Accedi a phpMyAdmin.
- Esporta il tuo database come file SQL.
- Crea una copia del tuo file SQL del database così da avere un backup del database originale, nel caso tu commetta un errore.
- Apri il file SQL del database in un editor di testo.
- Cerca e sostituisci domain1.com con domain2.com.
- Salva il file SQL del database.
- Accedi nuovamente a phpMyAdmin.
- Importa il tuo file SQL del database.
