填写您的邮件地址,订阅我们的精彩内容:

多站点中blog和site的区别

737

之前我也对这个问题非常不理解,在我们开通多站点Multisite功能之后,我们的数据库中就多了很多表,而其中关于blog和site的区别到底是什么呢?

blog就是指子站点(包括主站点在内);
site指的是这个这套系统,指WordPress系统。

home_url与site_url的区别一文中我指出了site_url是安装路径,那么在本文的问题中,site就是指被安装的系统。我们无法用中文表达出system和blog的区别,系统属于底层基础,而站点是在这个基础上实现的应用。

我之所以顿悟blog和site的区别,是今天在使用global $current_blogglobal $current_site时的发现,$current_blog会随着切换到不同的子站点进行变化,而$current_site不会变,所指向的永远是ID为1的站点。(需要解释的是,这仍然不能反映出site是指安装的系统的定论,因为这里它仍然要和子站点对应。)

基于上述的理解,如果你要在开发中获得关于主站点的信息,那么你应该使用global $current_site,例如你要获得关于主站点博客的ID,可以使用:

global $current_site;
$root_blog_id = $current_site['blog_id'];(待检验)

site_id和blog_id又是怎么回事儿?

我查阅了很多资料,都没有一个对这个问题的确切的说法,在数据库中,同时存在_site和_blogs两张表,通过上文的解释,我们已经明确知道了site和blog存在着本质的区别。我们对site_id和blog_id的疑问,实际上是对wp-config.php中的define(‘SITE_ID_CURRENT_SITE’, 1);define(‘BLOG_ID_CURRENT_SITE’, 1);更感兴趣。我们实际上更想知道它们之间的对应关系,site_id和blog_id在wp-config.php中的对应关系一旦变化,会有哪些变化。

SITE_ID_CURRENT_SITE一旦变化,global $current_site中的id就随之变化,global $current_blog中的site_id也会随之变化,而如果改变BLOG_ID_CURRENT_SITE,只有global $current_site中的blog_id会变化。

在官方社区中的这个帖子里有人这样总结:

It’s so simple, make it a rule of thumb and you’ll never forget. (remember you only have two thumbs!)

site_id = the network
blog_id = the sites (formerly known as blogs)

That’s it!

site_id=1 and blog_id=1 <– that’s your main domain. The one you installed WordPress on. By enabling multisite, it becomes the network and the site. This only happens once.

site_id=1 and blog_id=2 <– that’s your second site.
site_id=1 and blog_id=3 <– that’s your third site.

(其实这个人把blog理解为site了,没有理解成我文章最开始说的那种关系。他们都认为在WP3.0之后,只有site,没有blog。)

而我个人认为,这里需要引入“项目”的概念,site相当于一个项目,而blog相当于这个项目中的阶段性成果。如果我们用同样的框架,好比这里的WordPress,开展两个项目,好比这里的site_id,就会对应出不同的阶段性成果,好比这里的blog_id。

而我通过修改SITE_ID_CURRENT_SITEBLOG_ID_CURRENT_SITE也没有发现特别大的区别,唯一找到的变化是:

如果你刚刚开通Multisite功能,你会发现你的主博客固定链接前面会有一个/blog/前缀,而如果你通过修改wp-config.php中的BLOG_ID_CURRENT_SITE值,就能去掉这个/blog/前缀。

这是唯一的发现,也是本文对site_id和blog_id的唯一区别。

下面我简单说几句