WP_GET_ATTACH_IMAGE_SRC多站点问题

时间:2016-01-26 作者:Daniel Dewhurst

我正在运行最新版本的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误以为网络上的每个站点都是第一个主站点。这没用。

1 个回复
最合适的回答,由SO网友:mikemike 整理而成

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 还有其他一些变量。

根据你的问题,我猜你是在自己构建一个主题或插件,所以很有可能你正在使用上述变量。好的做法是在变量前面加上主题所特有的前缀。