问题描述

给一个 wordpress 多站点网络,用一个主要的博客,并假设所有的内容已被移动到该博客,怎么会将网络崩溃成一个标准的 wordpress non-network non-multisite 安装?

最佳解决方案

我已经完成了将站点从多站点安装提取到单个实例的步骤:

  1. 设置一个干净的 WP 副本,但不要安装它

  2. 查找网站 ID

  3. 将文件从 blogs.dir /ID /文件复制到新的 WP uploads 文件夹

  4. 将网站使用的主题和其使用的任何插件复制到新的 wp-content 文件夹中的相应文件夹

  5. 备份多站点数据库,但只能使用目标站点和用户的表以及使用 MySQL 工作台或等效的 usermeta 表

  6. 将备份还原到新数据库,并更改表名前缀,以使它们都相同,例如。 ‘wp_SITEID_’ 到’wp_’

  7. 使用 MySQL 工作台或查询浏览器整理用户和 usermeta 表,如下所示:

    1. DELETE FROM wp_usermeta WHERE user_id NOT IN( SELECT distinct(user_id) FROM wp_usermeta where meta_key LIKE 'wp_SITEID_%' );

    2. DELETE FROM wp_users WHERE ID NOT IN( SELECT distinct(user_id) FROM wp_usermeta where meta_key LIKE 'wp_SITEID_%' );

    3. UPDATE wp_usermeta SET meta_key = REPLACE( meta_key, 'wp_SITEID_', 'wp_' ) WHERE meta_key LIKE 'wp_SITEID_%';

    4. UPDATE wp_options SET option_name = REPLACE( option_name, 'wp_SITEID_', 'wp_' ) WHERE option_name LIKE 'wp_SITEID_%';

  8. 开始 WP 安装过程以创建 wp-config.php,但不要单击 「运行安装」

  9. 创建一个默认的.htaccess 文件,如果固定链接使用或只是访问固定链接页面在 wp-admin

  10. 接下来您需要更新数据库中的任何旧 URL 。理想的使用安全的搜索/替换工具,如 wp-cli 或其通用型前体 search/replace db by interconnect/it 。具体替换 blogs.dir/SITE_ID/filesuploads,如果您正在更改您的站点 URL 搜索 oldsite.com 并替换为 newsite.com

一点点努力,你必须小心数据库编辑,但这是唯一可以看到,从现有的多个站点提取一个单一的站点,其所有的设置等… 完好无损。

编辑:

由 @Jake 发现我忘了提到您可能需要采取的最后步骤。搜索/替换旧网址。我已经相应地更新了列表。

次佳解决方案

可以在不重新安装新博客的情况下删除多站点安装。按照步骤。

  1. 创建 wp-content 的备份,数据库转储和文件备份

  2. 将您的 wp-config.php 中的常数 WP_ALLOW_MULTISITE 设置为 FALSE

  3. 删除或注释 wp-config.php 中的 MU 设置,如下所示:

    /**
    define( 'MULTISITE', true );
    define( 'SUBDOMAIN_INSTALL', false );
    $base = '/wordpress/';
    define( 'DOMAIN_CURRENT_SITE', 'localhost' );
    define( 'PATH_CURRENT_SITE', '/wordpress/' );
    define( 'SITE_ID_CURRENT_SITE', 1 );
    define( 'BLOG_ID_CURRENT_SITE', 1 );
    */
    
  4. .htaccess 中删除 MU 设置,如下所示:

    # BEGIN WordPress
    RewriteEngine On
    RewriteBase /wordpress/
    RewriteRule ^index.php$ - [L]
    
    # uploaded files
    RewriteRule ^([_0-9a-zA-Z-]+/)?files/(.+) wp-includes/ms-files.php?file=$2 [L]
    
    # add a trailing slash to /wp-admin
    RewriteRule ^([_0-9a-zA-Z-]+/)?wp-admin$ $1wp-admin/ [R=301,L]
    
    RewriteCond %{REQUEST_FILENAME} -f [OR]
    RewriteCond %{REQUEST_FILENAME} -d
    RewriteRule ^ - [L]
    RewriteRule  ^([_0-9a-zA-Z-]+/)?(wp-(content|admin|includes).*) $2 [L]
    RewriteRule  ^([_0-9a-zA-Z-]+/)?(.*.php)$ $2 [L]
    RewriteRule . index.php [L]
    # END WordPress
    
  5. 在后端 wp-admin/options-permalink.php 中创建新的固定链接,并且可能将结果复制到.htaccess 中,如果 WP 不可用,则在此文件上写入权限。

  6. 删除表 users 中的 un-usefull 条目; 在工具中使用 sql 语句,如 phpMyAdmin 或 Adminer

    `ALTER TABLE `wp_users` DROP `spam`, DROP `deleted`;`
    
  7. 可以删除以下表格:

    • wp_blogs

    • wp_blog_versions

    • wp_registration_log

    • wp_signups

    • wp_site

    • wp_sitemeta

    • wp_sitecategories(仅当存在)

    (将 wp_更改为数据库前缀)

  8. 现在你只有网络的其他博客的最后一张表。如果您也将使用该内容,然后通过 WordPress 导出作为 XML 导出,然后立即导入到干净的单一安装。

参考文献

注:本文内容整合自 Google/Baidu/Bing 辅助翻译的英文资料结果。如果您对结果不满意,可以加入我们改善翻译效果:薇晓朵技术论坛。