问题描述
我正在运行最新版本的 WordPress 4.4.1,我有一个非常令人沮丧的问题。我运行多站点安装,并在整个站点使用高级自定义字段,以允许图像通过管理面板进行内容管理。
在除主要网站之外的每个网站上,如果没有硬编码,图像不起作用。例如,在每个页面上,我允许用户上传每个页面顶部显示的横幅。
例如,如果他们在网站#2 上,当他们上传图像时,它被放入:
/wp-content/uploads/sites/2/YEAR/MONTH/
然而,无论我在模板中尝试和显示这些图像的方法,总是会将 URL 错误,不包括/sites/siteID/
部分。
我第一次以为这是插件高级自定义字段的问题,以及尝试输出 URL 的方式。我已经排除了这一点,因为我设置了高级自定义字段来传递附件 URL,然后我使用 wp_get_attachment_image_src
将附件 ID 转换为 URL 。这也不行,所以现在我真的卡住了!
这是我的 wp-config.php
的多站点部分:
/* Multisite */
define('WP_ALLOW_MULTISITE', true);
define('SUNRISE', 'on');
define('MULTISITE', true);
define('SUBDOMAIN_INSTALL', true);
define('PATH_CURRENT_SITE', '/');
define('SITE_ID_CURRENT_SITE', 1);
define('BLOG_ID_CURRENT_SITE', 1);
我已经尝试在最后三行评论,认为这可能只是令人困惑的 WordPress 认为网络上的每个网站是第一个主要网站。这没有帮助
最佳解决方案
一些更古老的代码仍然存在于 WordPress 中,特别是在函数内部全局化变量。一个很好的例子是 get_current_blog_id()
,它存在于 wp-load.php
中:
/**
* Retrieve the current blog ID.
*
* @since 3.1.0
*
* @global int $blog_id
*
* @return int Blog id
*/
function get_current_blog_id() {
global $blog_id;
return absint($blog_id);
}
这意味着如果您将 $blog_id
设置为主题,那么可能会遇到问题。这也适用于 $current_site
和其他一些变量。
根据您的问题的声音,我猜你自己正在构建一个主题或插件,所以有很好的机会使用上述变量。良好的做法是将您的变量前缀为您的主题所特有的东西。
参考文献
注:本文内容整合自 Google/Baidu/Bing 辅助翻译的英文资料结果。如果您对结果不满意,可以加入我们改善翻译效果:薇晓朵技术论坛。