web-dev-qa-db-fra.com

Après avoir déplacé un site vers un autre domaine, toutes les images sont perdues

Je suis passé de www.domain1.com à www.domain2.com

Cependant, les chemins de l'image pointent toujours sur www.domain1.com/wp-content/uploads.... Ainsi, lorsque www.domain1.com est tombé en panne, toutes mes images ne sont plus affichées.

J'ai mis à jour la table wp_posts où toutes les pièces jointes désignent maintenant www.domain2.com/wp-content/uploads..., mais les images existent dans www.domain2.com et je ne vois toujours pas d'image. Est-ce que ma mise en cache est désactivée?

3
p.a.

Il semble que vous deviez changer les URL des anciennes images. Le moyen le plus simple et le plus rapide consiste à rechercher et à remplacer la base de données MySQL.

Vous pouvez utiliser PHPMyAdmin (généralement fourni par votre hébergeur) ou un autre logiciel d'édition MySQL tel que Sequel Pro pour modifier votre base de données MySQL sans toucher à la zone d'administration de WordPress. Cela signifie que vous pouvez effectuer des modifications à grande échelle en exécutant des requêtes SQL au lieu de les traiter une par une, ce qui est fastidieux et prend du temps.

N'oubliez pas de faire d'abord une sauvegarde de votre base de données. Pour ce faire dans PHPMyAdmin, sélectionnez votre base de données dans la barre latérale à gauche, puis cliquez sur "Exporter". La méthode "Simple" convient, mais si vous souhaitez davantage de contrôle, la méthode "Personnalisée" vous offre de nombreuses options.

Après avoir effectué votre sauvegarde, cliquez sur l'onglet SQL et collez le texte suivant dans la zone de texte:

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');

Et remplacez "oldurl" par votre ancienne URL et "newurl" par votre nouvelle URL, en conservant http: // mais en supprimant les barres obliques. Vérifiez-le, puis lorsque vous en serez satisfait, cliquez sur le bouton Go.

Accédez à votre site et vérifiez si vos images fonctionnent. Sinon, c'est généralement à cause d'une faute de frappe, que vous pouvez corriger en restaurant la base de données à partir de la sauvegarde effectuée au début du processus et en essayant à nouveau.

Il existe un guide détaillé sur la migration de domaine WordPress sur ce site , qui contient également un lien vers un script permettant de générer la requête SQL à votre place.

4
Steve Mitchell

Vous semblez avoir déjà votre réponse, mais je vous recommande fortement d'utiliser DBSR (db search replace) pour remplacer TOUTES les occurrences de domain1 par domain2. Il existe des outils pour cela. Celui-ci est assez propre: https://github.com/interconnectit/Search-Replace-DB

L'ensemble du processus est décrit. Il y a une bonne interface utilisateur.

De cette façon, vous serez sûr que tout va bien pour les enregistrements de base de données.

0
JMau

Au risque de répondre à la question avec seulement un lien, je pense que les étapes suivantes de cette page ( http://codex.wordpress.org/Moving_WordPress ) sont ce que vous recherchez:

Modification de votre nom de domaine et de vos URL

Vous devez modifier toutes les occurrences de votre ancien nom de domaine par votre nouveau nom de domaine dans la base de données en toute sécurité. Vous pouvez le faire en utilisant l’une des méthodes suivantes:

  1. Effectuez uniquement une recherche et un remplacement sur la table wp_posts.

  2. Utilisez le script Search and Replace for WordPress Databases pour modifier en toute sécurité toutes les instances. (Si vous êtes un développeur, utilisez cette option. Il s’agit d’un processus en une étape, contrairement à la procédure en 15 étapes ci-dessous)

  3. Facultativement, vous pouvez également utiliser un outil en ligne (au cas où vous ne voudriez pas télécharger des scripts sur votre serveur) WordPress en ligne sérialisé PHP Rechercher et remplacer , ce qui permet de remplacer un ancien domaine. ou une URL avec une nouvelle adresse tout en corrigeant les données sérialisées en même temps.

Il y a également beaucoup d'autres informations utiles sur la migration WP sur cette page.

0
eyedarts

méthode très facile

Installez ce plugin Velvet dans votre backend wordpress.

Maintenant, allez dans le paramètre velvet et entrez votre ancien domaine et entrez le nouveau domaine. cliquez sur le bouton de mise à jour. Vous avez terminé

0
Atif Aqeel

UtilisezWP Migrez la base de donnéespour exporter des données au format Zip en remplaçant votre URL.

en utilisant ce plugin, vous ne pouvez pas perdre de widget ou de données sérialisées.

 enter image description here 

0
ravi patel

Bien que vous disiez que vous avez mis à jour vos données wp_posts avec www.domain2.com, il reste toujours les variables home et siteurl dans votre table wp_options qui doivent être modifiées, entre autres choses.

Pour vous assurer que toutes vos données ont été mises à jour dans votre nouveau domaine, procédez comme suit:

  1. Allez télécharger Le script de recherche et de remplacement de base de données d'Interconnect IT ici
  2. Décompressez le fichier et déposez le dossier (via FTP) où votre WordPress est installé (la racine) et renommez le dossier enreplace( screenshot )
  3. Naviguez jusqu'au nouveau dossier que vous avez créé dans votre navigateur (ex: http://www.domain2.com/replace) et vous verrez l'outil de recherche/remplacement
  4. Cela devrait être assez explicite jusqu'à ce point: entrez votre ancienne URL dans le champsearch for…et la nouvelle URL dans le champreplace with…

Vous pouvez cliquer sur le bouton exécution à sec sous actions pour voir ce qu'il va remplacer avant d'exécuter le script. Une fois que vous avez terminé, veillez à supprimer le dossier /replace/.

0

Si votre site est assez petit, vous pourriez ...

  1. Connectez-vous à phpMyAdmin.
  2. Exportez votre base de données sous forme de fichier SQL.
  3. Faites une copie du fichier SQL de votre base de données pour que vous ayez une sauvegarde de votre base de données originale, au cas où vous foiriez.
  4. Ouvrez votre fichier SQL de base de données dans un éditeur de texte.
  5. Recherchez et remplacez domain1.com par domain2.com.
  6. Enregistrez votre fichier SQL de base de données.
  7. Reconnectez-vous à phpMyAdmin.
  8. Importez votre fichier SQL de base de données.

EDIT le 18/03/2016

APRÈS avoir suivi les étapes ci-dessus, procédez comme suit:

Étape 1 - Créez une fonction à utiliser.

function mbe_migrate_widgets() {

}

Étape 2 - Spécifiez quoi rechercher et quoi remplacer.

function mbe_migrate_widgets() {

    $old_domain = 'http://dev.';
    $new_domain = 'http://beta.';

}

Étape 3 - Récupérer tous les widgets WordPress.

function mbe_migrate_widgets() {

    $old_domain = 'http://dev.';
    $new_domain = 'http://beta.';

    global $wpdb;

    // Get all Widgets
    $widgets = $wpdb->get_results(
        "
        SELECT `option_id`, `option_name`
        FROM $wpdb->options
        WHERE `option_name`
        LIKE '%widget_%'
        "
    );

}

Étape 4 - Parcourez tous les widgets WordPress et récupérez les informations pour chaque widget.

function mbe_migrate_widgets() {

    $old_domain = 'http://dev.';
    $new_domain = 'http://beta.';

    global $wpdb;

    // Get all Widgets
    $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 ) {

        // Retrieve the Widget data.
        $widget_data = get_option( $widget->option_name );

    }

    return $actions;

}

Étape 5 - Effectuez la recherche et remplacez les données du widget et mettez à jour les enregistrements de la base de données.

function mbe_migrate_widgets() {

    $old_domain = 'http://dev.';
    $new_domain = 'http://beta.';

    global $wpdb;

    // Get all Widgets
    $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 ) {

        // Retrieve the Widget data.
        $widget_data = get_option( $widget->option_name );

        // Update the Widget data changing old domain to new domain.
        $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;

}

Étape 6 - Incluez la fonction de remplacement de tableau récursif personnalisée.

// Recursive String Replace - 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;

}

Voilà. Exécutez cette fonction une fois et tous vos widgets devraient à nouveau fonctionner comme par magie.

Note: C'est à vous de choisir où placer ce code ou comment vous l'exécutez. Veuillez également remplacer les variables $old_domain et $new_domain en conséquence.

Extra Remarque: Gardez également à l'esprit que cet exemple n'affecte que les widgets. Si d'autres parties de votre site Web contiennent des URL dans des données sérialisées, veuillez modifier votre requête de base de données en conséquence. (Je parle de cette partie du code: SELECT option_id, option_name FROM $wpdb->options WHERE option_name LIKE '%widget_%')

Je voudrais poster un lien vers mon blog sur ce sujet, mais je ne souhaite pas apparaître comme "spam". C'est essentiellement un copier/coller d'un article que j'ai écrit sur mon site web le 03/18/2016 . Le contenu de cette réponse risque de devenir obsolète et le contenu de l'article de mon site Web pourrait devenir plus pertinent à l'avenir. S'il vous plaît, si vous êtes intéressé, consultez mon profil pour un lien vers mon site.

Explication utile des données sérialisées: Anatomie d'une valeur sérialisée () .

0
Michael Ecklund