是的,你可以做到!它简单/容易吗?有点。。。它是否快速且可扩展?哦,天哪,不。
超级昂贵的解决方案这里的解决方案是这个函数:
$post_id = url_to_postid( $url );
问题是,这是一个非常慢的函数,调用起来很昂贵。如果在显示每篇帖子时都调用此选项,则DB服务器将处于超高压力下,除非正确配置并将其放置在专用机器上,否则可能会崩溃。
Note: 您不能提前调用此函数,它必须位于setup_theme
挂起或更高版本,否则将导致发生致命错误
有了这个功能,我们可以提取帖子内容中的每个URL,并进行测试,看看它是否以我们网站的URL开头。如果是,我们可以检查它是否与任何附件匹配,如果不匹配,则我们知道它是未连接的,可以使用此功能获取副本。
然而,如何检索帖子内容中的所有URL是一个主题或另一个问题。测试URL是否用于附加附件是一个简单的if语句比较循环(对于每个附加的内容,检查其URL是否与我们正在测试的URL匹配)
加快速度有一些事情可能会降低此功能的成本:
在save and update posts钩子上运行该过程,并将结果存储在post meta中,将该函数包装在缓存层中以加快速度(仅当有对象缓存解决方案(如memcached)时有效,而不像以前的机制那样有效)-使用由使用DB查询的Pippins插件编写的不太精确的方法。这将绕过缓存,而且仍然很贵,但没有缓存那么贵url_to_postid
. 它也只适用于guid,因此准确度的权衡是一个更昂贵的解决方案,通过WP_Query
然后逐个检查每个附件,看看它们是否出现在您的帖子中。
这是迄今为止最慢、最昂贵的方法:
当你上传更多的媒体时,你必须在进行查询时加载更多的内容,对于任何有超过30或40个附件的网站,你都会出现内存不足的致命错误。这是一项繁重的数据库操作,你的数据库必须发送所有附件,如果你有几个人同时浏览,这将是一个很大的问题,它永远不会超过5-10个并发用户,如果你运气好的话,它很慢,检查每个附件都需要时间