问题描述

我意识到有一些问题围绕着我解决的方式进行跳舞,但我相信我正在寻找具体的东西。

这实际上是两部分问题:

1) 我的目标是让 WordPress 在网络 (multi-site) 模式下运行,我试图找出一种基本上”group” 特定网站的方法。我知道”Multi-Network” 插件,但我质疑这是最好的方法吗?这里的关键是允许特定用户添加/编辑自己的 sub-network 中的站点。

2) 这是这篇文章的关键问题… 我想知道最好的方法,这将允许我本质上查询从这个”sub-network” 的网站的帖子。所以,例如,如果这个 sub-network 中有 10 个站点,并且每个站点都在自定义帖子类型中创建了称为”news” 的帖子,那么我希望能够显示 10 个最近发布的 10 个站点的帖子。

注意:我需要能够创建 sub-networks 的乘法,这反过来意味着对最新发布的”news” 的查询只能显示属于正确组的帖子。

最后 – 我确实认识到解决方案存在这样的事情,但我正在寻找最好的方法在这两种情况下,需要最低数量的数据库加载/查询。我也非常希望通过我的 functions.php 文件中的代码来执行此操作,而不是安装创建额外膨胀的插件。

我很乐意接受任何建议,感谢任何回应。

最佳解决方案

我知道你说你不想安装一个 plug-in,但这正是你想在这种情况下做的。将代码放在主题的 functions.php 文件中需要您在 sub-network 中的所有站点使用相同的主题,或者保留同一文件的多个副本。另一方面,您可以为网络创建一个简单的 plug-in 来封装功能,然后 activate it on the network,并立即具有只有一个文件来维护的功能。这实际上会比依赖于您的 functions.php 文件创造更少的膨胀。

这里要注意的是,您将需要循环访问网络上的每个站点以查找您的帖子或执行自定义查询。我会选择第二个例程,因为虽然它有点复杂,但它是一个单一的查询,而不是每个博客的不同查询。

基本上… 您需要执行以下操作:

  1. 获取网络中所有博客 ID 的列表/sub-network 。如果使用香草安装,可以在 wp_blogs 表中找到。只需做一个简单的 SELECT 查询来加载一个数组,然后你可以循环添加每个博客到你的主要查询。

  2. 创建一个循环,将每个博客添加到大型查询中。您将需要 JOIN 表和 blog_id(wp_blogs),post_id(wp_BLOG_posts) 和自定义分类法进行搜索。

就像我说的那样,这不是一个简单的解决方案 (SQL 语句将会非常复杂,我没有时间在此刻破解它),但是它将是一个单一的语句来完成所有的工作。

或者…

  1. 获取博客 ID 的列表并将其存储在数组中。

  2. 通过您的阵列迭代查询网络中的每个博客,并将您的匹配 (具有特定分类术语的帖子) 附加到单独的数组。

使用替代方法,您必须为网络中的每个博客运行单独的查询。如果你的网络是 10-20 个网站,这不是太多的问题。如果您的网络是 200-500 个网站,预计会出现一些性能问题才能开始播放。

此外,如果可能,您应该缓存查询的结果。如果它是在多个页面加载 (即,通过网络共享的侧边栏小工具) 上运行,则只有当有新数据可以运行时才需要运行查询。否则,提供缓存的结果,这样您就不会减慢网络速度。

参考文献

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