基本上,您可以在这里看到我与插件作者 @merefield 的问题和讨论:
他建议我请求 Discourse 团队为我们实现这一功能。
我在网站上一直使用外部 CDN 图片,从未将它们上传到本地上传目录或对象存储,因为那样成本太高,所以不会将图片保存到本地或 S3 存储桶。
目前,我发现我的 meta og:image 标签无法识别这些图片。例如,请查看我的这个主题:How Many Carbs on Keto? - How To Discuss
该图片实际上是从外部公共 URL 加载的,其 IMG SRC 指向该链接。但社交媒体 Open Graph 始终显示我的网站标志作为备用图片,这并不理想。
由于 Discourse 核心行为的这一限制,主题列表预览插件也无法检测到这些缩略图。
我该如何覆盖 meta og:image 标签,强制使用我上传的外部图片?
这样,当我在社交媒体网站分享时,就能看到实际的主题图片,而不是我的网站论坛标志。例如:https://developers.facebook.com/tools/debug/?q=https%3A%2F%2Fhowtodiscuss.com%2Ft%2Fis-yoga-a-good-workout%2F28043
我曾尝试在我的主题页面上强制添加以下代码:
<meta property="og:image" content="https://images.pexels.com/photos/4761347/pexels-photo-4761347.jpeg?auto=compress&cs=tinysrgb&dpr=2&w=500" />
但查看页面源代码时发现,og:image 标签仍然使用我的网站标志作为备用,它认为该主题中没有图片 
任何主题首帖中的第一张图片,即使托管在某个公共 URL 上,也必须被我的 meta og:image 标签识别。目前,只有当图片上传到我自己的服务器时才会被识别。但对我们许多人来说,自建图片托管成本太高,无法承担。如果 Discourse 团队能帮助我们实现这一变更,将非常有帮助。
@Bcat 在他的论坛上也遇到了同样的问题。
2 个赞
david
(David Taylor)
2
Discourse 核心仅支持使用“上传”作为话题缩略图。这些图片可以是本地的,也可以托管在 S3 上,但必须上传到 Discourse。您可以使用“将远程图片下载到本地”站点设置,自动将热链接图片转换为上传文件。
很抱歉,我们目前没有改变 Discourse 此行为的计划。
3 个赞
如果它们托管在 S3 上,那么它们是如何上传到 Discourse 的呢?S3 并不在 Discourse 上,它也是一个托管图片的公共服务器。当我使用来自第三方免费公共 CDN 的远程图片时,它们对任何人都是可访问的,S3 也是如此。那么,为什么 Discourse 不允许/不支持使用公共图片 URL 作为主题缩略图呢?
例如,这个 URL:https://d11a6trkgmumsb.cloudfront.net/optimized/3X/7/1/71abcfa01874c32497d638b372f94c7b9fc021e4_2_1380x718.png
是我刚刚在 meta discourse 上上传的图片,这是一个公共图片托管 URL,而我自己的图片 URL 看起来像这样:https://images.pexels.com/photos/4761347/pexels-photo-4761347.jpeg?auto=compress&cs=tinysrgb&dpr=2&w=500
我的 URL 也是公共托管的图片,为什么 Discourse 不采用我的呢?请配置它以同时支持这两种方式,因为无论是作为爬虫还是 Open Graph 爬虫,这两种图片源都是公共托管的 URL。
我已经开启了这个设置,
但为什么我的热链接图片没有被用作主题缩略图呢?
我还在这个文件设置中禁用了 jpg/jpeg 上传,
我禁用它是为了避免用户直接在我的服务器上上传图片,以节省存储空间。
如果我的论坛变得非常大,管理如此多的图片存储空间将会变得非常困难。
有什么取巧的方法可以实现我的目标吗?我只想强制覆盖 og:image 元标签,使其在主题中使用我的热链接图片。如何简单地实现这一点?或许可以在主题页面添加任何 HTML 代码,强制使用此热链接图片的 src 作为 og:image?
或者,我是否可以在站点的 <head> 中添加一行代码,以阻止默认行为,或者直接移除这个回退到 logo 图片的 og:image 元标签行(当 Discourse 无法检测到主题缩略图时)?
我尝试在主题页面的帖子编辑器中添加以下代码:
<meta property="og:image" content="https://images.pexels.com/photos/4761347/pexels-photo-4761347.jpeg?auto=compress&cs=tinysrgb&dpr=2&w=500" />
但出于某种原因,当我查看主题页面的源代码时,这段代码并没有被渲染出来,这是为什么呢?
这是我尝试过的页面:Is yoga a Good workout - How To Discuss
如何优先处理这一点?如果我的页面有两个 og:image 元标签,它应该只选取并使用我自定义的那个 og:image 元标签吗?
david
(David Taylor)
4
通过如下设置:
因为 Discourse 没有权限访问 S3 存储桶,也无法为网站显示优化图片。此外,Discourse 也无法保证链接始终有效——存储桶的所有者可能会删除该文件。
您的意思是,我的 Discourse 实例没有权限访问其他第三方免费 CDN 图片站点的 S3 存储桶吗?
如果我在浏览器中能够访问某张图片,那么 Discourse 也应该可以访问。而且,Discourse 目前已经在优化我通过热链接分享的图片了。因此,我认为我们确实需要这个功能。
我刚才更新了上面关于 Discourse CDN 对比的回复,请查阅。
您还有什么更便宜的批量托管图片的方案推荐吗?因为我担心,如果我的站点发展到拥有数百万个主题,那将意味着数十亿张图片。届时,我的 Discourse 站点备份会越来越大,变得极难管理、扩展和迁移。在那种情况下,我该怎么办?
david
(David Taylor)
6
它没有权限管理和优化这些文件。
如果您确实需要此功能,最佳方案是在 Marketplace 中发帖,寻找一位插件开发者,协助您构建该功能。
谢谢,我已就同一功能在核心或通过插件创建了一个付费主题: