将一个站点移动到另一个域后,所有图像都会丢失

时间:2014-09-04 作者:p.a.

我从www.domain1.comwww.domain2.com

但是,图像路径仍然指向www.domain1.com/wp-content/uploads.... 那么什么时候www.domain1.com 我所有的图像都不再显示了。

我更新了wp_posts 所有附件现在指向的表www.domain2.com/wp-content/uploads..., 但图像存在于www.domain2.com 我仍然看不到任何图像。我的缓存是否已关闭?

10 个回复
SO网友:Steve Mitchell

听起来您需要更改旧图像的URL。最简单的(&A);最快的方法是在MySQL数据库上进行查找和替换。

您可以使用PHPMyAdmin(通常由您的web主机提供)或其他MySQL编辑软件(如Sequel Pro)对MySQL数据库进行更改,而无需接触WordPress管理区域。这意味着您可以通过运行SQL查询来进行大规模更改,而不是逐个进行更改,这既繁琐又耗时。

记住首先备份数据库。要在PHPMyAdmin中执行此操作,请从左侧的侧栏中选择数据库,然后单击“导出”。“简单”方法很好,但如果您想对其进行更多控制,那么“自定义”方法会为您提供大量选项。

备份完成后,单击SQL选项卡并将以下内容粘贴到文本区域:

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\');
并用旧URL替换“oldurl”,用新URL替换“newurl”,保留http://但删除尾部斜杠。仔细检查,然后当您满意时,单击Go按钮。

导航到您的站点并检查图像是否正常工作。如果不是,通常是因为输入错误,可以通过从过程开始时所做的备份中恢复数据库并重试来修复。

有一个关于WordPress域迁移的扩展指南this site, 它还有一个指向脚本的链接,可以为您生成SQL查询。

SO网友:Michael Ecklund

如果你的网站相当小,你可以。。。

登录phpMyAdmindomain1.com 具有domain2.com.


EDIT 03/18/2016

完成上述步骤后,请继续执行以下步骤:

步骤1–创建要使用的函数

function mbe_migrate_widgets() {

}
步骤2–指定要搜索的内容和替换的内容
function mbe_migrate_widgets() {

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

}
步骤3–检索所有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_%\'
        "
    );

}
步骤4–循环浏览所有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_%\'
        "
    );

    if ( ! $widgets ) {
        return false;
    }

    $actions = array();

    foreach ( $widgets as $widget ) {

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

    }

    return $actions;

}
步骤5–对小部件数据执行搜索和替换,并更新数据库记录
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;

}
步骤6–包括自定义递归数组替换函数
// 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;

}
给你。运行该函数一次,您的所有小部件就会神奇地重新开始工作。

Note: 这取决于您将此代码放置在何处或如何执行。请同时替换变量$old_domain$new_domain 照着

Extra Note: 还请记住,此示例仅影响小部件。如果您的网站的其他部分包含序列化数据中的URL,请相应地修改您的数据库查询。(我指的是代码的这一部分:SELECT option_id, option_name FROM $wpdb->options WHERE option_name LIKE \'%widget_%\' )

我会在我的博客上发布一个关于这个主题的链接,但我不想显得“垃圾”。这基本上是我在我的网站上写的一篇文章的复制/粘贴03/18/2016. 这个答案中的内容可能会过时,我网站上文章中的内容将来可能会变得更加相关。如果您感兴趣,请查看我的个人资料,以获得指向我的网站的链接。

序列化数据的有用解释:Anatomy of a serialize()\'ed value.

SO网友:eyedarts

冒着只使用一个链接回答问题的风险,我认为本页的以下步骤(http://codex.wordpress.org/Moving_WordPress) 是您想要的:

Changing Your Domain Name and URLs

您需要将数据库中旧域名的所有实例安全地更改为新域名。可以使用以下方法之一执行此操作:

仅在wp\\U posts表上执行搜索和替换。

使用Search and Replace for WordPress Databases Script 安全地更改所有实例。(如果您是开发人员,请使用此选项。这是一个单步过程,而不是下面的15步过程)

您也可以选择使用在线工具(如果您不想麻烦将脚本上载到服务器上)Online WordPress Serialized PHP Search and Replace 它允许用新域或URL替换旧域或URL,同时修复序列化数据。

该页面上还有许多其他有用的WP迁移信息。

SO网友:JMau

听起来您可能已经有了答案,但我强烈建议您使用DBSR(db search replace)将所有出现的domain1替换为domain2。有一些工具可以做到这一点。这个很干净:https://github.com/interconnectit/Search-Replace-DB

描述了整个过程。有一个很好的UI。

这样,您就可以确保有关DB记录的一切都正常。

SO网友:Ethan O\'Sullivan

虽然你说你已经更新了wp_posts 数据发送至www.domain2.com, 还有homesiteurl 在您的wp_options 其他东西中需要更改的表。

要确保所有数据都已更新到新域,请执行以下步骤:

去下载Interconnect IT\'s Database Search & Replace Script herereplace (screenshot)http://www.domain2.com/replace) 和you will see the search/replace toolsearch for… 字段和中的新URLreplace with… 字段您可以单击“操作”下的“干运行”按钮,查看在执行脚本之前将替换的内容。完成后,请确保删除/replace/ 文件夹

SO网友:Atif Aqeel

非常简单的方法

安装此插件Velvet 进入wordpress后端。

现在转到velvet设置,输入旧域并输入新域。点击更新按钮。你完成了

SO网友:Ravi Patel

使用WP Migrate DB用于导出基于数据的zip并替换url。

使用此插件,您不能丢失小部件或任何序列化数据。

enter image description here

SO网友:afxentios

您可以使用Wordpress插件:Go Live Update Urls

这真的很简单,很快。

SO网友:Cristian Mergea

进入cPanel后,找到Databases类别并单击phpMyAdmin工具图标。您现在位于主phpMyAdmin页面。找到新添加的数据库,并从左侧边栏中单击其名称。我们的示例数据库名为testdb。这将打开数据库,屏幕将刷新表列表。再次使用侧栏,查找并单击wp posts表。看看屏幕的顶部,你会看到页面上有几个选项卡。单击SQL选项卡。您现在处于MySQL编辑器屏幕上。在代码区域中,复制MySQL的以下位。

UPDATE wp_posts SET post_content=(REPLACE (post_content, \'dommain1.com\',\'domain2.com\'));
可能有用吗?

SO网友:prempal sharma

您好,如果您是awaire数据库,请使用以下步骤。

登录phpMyAdmin

结束

相关推荐

无法打开Advanced-cache.php,这将破坏媒体库

在我的WordPress安装中,它是3.8版本,所有插件都已更新,它使用的是Magic Fields 2和Hypercache等插件。我无法在帖子中插入图像,因为当我上传时,它会给我一个错误:上载时出错。请稍后再试。帖子“插入媒体”中的媒体库窗口显示为空白,尽管我知道那里有图像,可以通过侧边栏中的查看它们。当我尝试插入带有魔术字段的图像时,当我单击“插入帖子”时,窗口是空白的,它不会插入图像。在wp配置中。php,我已将调试设置为true:define(\'WP\\u DEBUG\',true);我在禁用