问题描述

我正在运行最新版本的 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 辅助翻译的英文资料结果。如果您对结果不满意,可以加入我们改善翻译效果:薇晓朵技术论坛。