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

评论

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

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

#1 楼

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


设置WP的干净副本但不安装它
查找站点ID
将文件从blogs.dir / ID / files复制到新的WP Uploads文件夹
将站点使用的主题及其使用的任何插件复制到新的wp-content中的相应文件夹中文件夹
备份多站点数据库,但仅备份目标站点的表以及使用MySQL Workbench或同等功能的user和usermeta表。
将备份还原到新数据库并更改表名前缀,以便他们都是一样的,例如。 'wp_SITEID_'到'wp_'
使用MySQL工作台或查询浏览器整理用户和usermeta表,如下所示:

DELETE FROM wp_usermeta WHERE user_id NOT IN( SELECT distinct(user_id) FROM wp_usermeta where meta_key LIKE 'wp_SITEID_%' );
DELETE FROM wp_users WHERE ID NOT IN( SELECT distinct(user_id) FROM wp_usermeta where meta_key LIKE 'wp_SITEID_%' );
UPDATE wp_usermeta SET meta_key = REPLACE( meta_key, 'wp_SITEID_', 'wp_' ) WHERE meta_key LIKE 'wp_SITEID_%';
UPDATE wp_options SET option_name = REPLACE( option_name, 'wp_SITEID_', 'wp_' ) WHERE option_name LIKE 'wp_SITEID_%';


开始WP安装过程以创建wp-config.php,但不要单击“运行安装”。
如果正在使用永久链接或只是访问永久链接,请创建默认的.htaccess文件。 wp-admin中的“永久链接”页面
,接下来您需要更新数据库中的所有旧URL。理想情况下,使用安全的搜索/替换工具,例如wp-cli中的工具或通过互连/它的通用前驱搜索/替换db。专门将blogs.dir/SITE_ID/files替换为uploads,如果要更改站点URL搜索oldsite.com并替换为newsite.com

相当多的工作,并且您必须谨慎进行数据库编辑,但这是唯一的方法我可以看到从现有的多站点中提取了一个站点及其所有设置等...完整无缺。

编辑:

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

评论


当我将SITEID更改为正确的站点ID时,第7步没有任何作用或没有任何效果。取而代之的是,您应该提到,可能需要在wp_options表中更新siteurl和home选项。其余的都是很好的清单。谢谢。

–杰克
2013年12月2日,下午3:31

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

–杰克
2013年12月2日,凌晨3:40

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

– sanchothefat
2013年12月2日15:35

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

– sanchothefat
2013年12月2日15:45

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

–杰克
2013年12月2日17:29



#2 楼

无需重新安装新博客就可以删除多站点安装。请执行以下步骤。


创建wp-content的备份,数据库转储和文件备份
在wp-config.php中将常量WP_ALLOW_MULTISITE设置为FALSE


删除或注释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 );
*/



.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= [L]

# add a trailing slash to /wp-admin        
RewriteRule ^([_0-9a-zA-Z-]+/)?wp-admin$ wp-admin/ [R=301,L]

RewriteCond %{REQUEST_FILENAME} -f [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^ - [L]
RewriteRule  ^([_0-9a-zA-Z-]+/)?(wp-(content|admin|includes).*)  [L]
RewriteRule  ^([_0-9a-zA-Z-]+/)?(.*\.php)$  [L]
RewriteRule . index.php [L]
# END WordPress


在后端wp-admin/options-permalink.php中创建新的永久链接,并可能将结果复制到.htaccess中(如果无法使用WP),则可以对此文件进行写权限。 />
删除表users中未使用的条目;在诸如phpMyAdmin或Adminer之类的工具中使用follow sql语句

`ALTER TABLE `wp_users` DROP `spam`, DROP `deleted`;`



可以删除以下表:


wp_blogs
wp_blog_versions
wp_registration_log
wp_signups
wp_site
wp_sitemeta
wp_sitecategories(仅,如果存在)

(更改wp_到您的数据库前缀)

现在您只有网络中其他博客的最后一个表。如果您还将使用此内容,则在通过WordPress导出之前将其导出为XML,然后立即以干净的单一安装方式导入。


评论


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

– Tom J Nowell♦
2013年1月3日15:08

#3 楼

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

有很多事情要考虑。


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

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

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

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

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

#4 楼

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

评论


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

– s_ha_dum
13年3月12日在21:29

#5 楼

最重要的一点是,您应该仍然保持这一行:

define( 'WP_ALLOW_MULTISITE', ...

但是应该更改为

define( 'WP_ALLOW_MULTISITE', 0 );