将多站点WordPress安装转换为单个站点


17

给定一个带有主博客的WordPress多站点网络,并假设所有内容都已移至该博客,那么如何将网络折叠回标准WordPress非网络非多站点安装?


我在下面找到了两个有用的链接,这是可能的。我在以下位置找到了有用的信息:wpmututorials.com/how-to/how-to-disable-multisite,以及以下位置:wordpress.org/support/topic/…我们将会看到进展。

我认为一种更好的表述方式是从网络中提取单个站点。倒塌的网络只能真正在主站点上起作用,而不能在主站点上创建任何站点。
sanchothefat 2013年

Answers:


17

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

  1. 设置WP的干净副本但不要安装它
  2. 查找站点ID
  3. 将文件从blogs.dir / ID / files复制到新的WP uploads文件夹
  4. 将网站使用的主题及其使用的所有插件复制到新的wp-content文件夹中的相应文件夹中
  5. 备份多站点数据库,但仅备份目标站点的表以及使用MySQL工作台或等效版本的users和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中的工具或其通用的前体搜索/替换db(通过interconnect / it)。专门替换blogs.dir/SITE_ID/filesuploads,如果要更改网站URL,请搜索oldsite.com并替换为newsite.com

相当多的工作,您必须谨慎进行数据库编辑,但这是我唯一能看到的从现有多站点中提取所有设置等完整的站点。

编辑:

正如@Jake所指出的,我忘记提及您可能需要采取的最终步骤,例如。搜索/替换旧网址。我已经相应地更新了列表。


当我更改SITEID为正确的站点ID 时,第7步没有任何作用或没有任何效果。与其相反,您应该提到表中的siteurland home选项可能需要更新wp_options。其余的都是很好的清单。谢谢。
杰克

如果更改,还可能需要在数据库中查找并替换旧域/新域。并且几乎肯定需要查找并替换blogs.dir或上载/站点,以确保指向图像/文件的任何链接都是正确的。但是请注意WP中的所有序列化数据。在MYSQL中运行开放式查找和替换并不是很安全。使用类似这样的内容:interconnectit.com/products/…–
Jake

@杰克,谢谢,我忘记了更改URL的上下文,您是对的,我错过了现有URL的搜索/替换步骤,并为了完整起见添加了它
sanchothefat

@Jake我没有详细介绍,但是步骤7基本上删除了不属于您要提取的站点的用户,并确保他们仍然具有正确的权限。这确实是一个清理任务。
sanchothefat 2013年

我了解他们所做的事情,只是第一对夫妇为我返回了错误,但是也许我遗漏了一些东西,而且我不确定是否需要清理任何用户,因此无论如何都很容易跳过。而且请不要误会我的意思,如果没有其他内容,这将非常有用,请注意以后使用。谢谢!
杰克

5

无需重新安装新博客就可以删除多站点安装。遵循步骤。

  1. 创建wp-content的备份,数据库转储和文件备份
  2. WP_ALLOW_MULTISITE在wp-config.php中将常量设置为FALSE
  3. 删除或评论中的MU设置wp-config.php,如下所示:

    /**
    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. 从中删除MU设置.htaccess,例如以下来源:

    # 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;在工具(例如phpMyAdmin或Adminer)中使用follow sql语句

    `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,然后立即以干净的单一安装方式导入。


1
这是一个很好的答案,但是,我已经接受@sanchothefat的回答,因为他可以用来提取任何站点,而无需考虑ID,而您的指示将为我提供根站点
Tom J Nowell

1

实际上,这是可能并且相当容易做到的;我自己做了几次。

有一些事情要考虑。

  1. wp-config.php定义是多站点还是单个站点
  2. .htaccess,其中包含支持多站点的重写规则
  3. 为支持多站点而创建的其他表

注释掉wp-config中的多站点define(?)并更新您的永久链接会将站点恢复为单站点/默认模式。然后,您要做的就是清理数据库。

如果由于某种原因您无法访问wp-admin来更新永久链接,只需删除.htaccess文件即可。WordPress将在单站点模式下为您重新创建它。

我将尽力找到代码/支持文章的链接,并使用它来更新答案。

这是指向支持论坛http://wordpress.org/support/topic/revert-to-single-site上一个项目的链接


0

即使在WP 3.5.1中,此处的基本过程也能正常运行。需要澄清的一点是:如果为子站点命名,则必须更改数据库中的链接以删除该名称。如果我的子站点名为... mysite.com/comics,则按照上述步骤操作后,您的WP将查找mysite.com/comics并在固定链接上获取错误。编辑WP-OPTIONS表以查找/ comics扩展名并将其删除。另外,请检查Uploads目录是否指向正确的位置-它可能仍显示blogs.dir条目,现在应指向wp-content / uploads /


您能否将其编辑为独立答案?似乎应该是对其他答案之一的评论。
s_ha_dum

0

重要的一点不应该被错过,而且很少被谈论,它是您仍然应该这句话:

define( 'WP_ALLOW_MULTISITE',...

但应将其更新为

define( 'WP_ALLOW_MULTISITE', 0 );

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.