如何在帖子中检索未连接媒体的ID?
我有两个帖子:POST A 和POST B 和一个名为file.pdf.
我已上传file.pdf 到POST A 然后又将其插入POST B.
现在file.pdf 仍附加到POST A 所以我无法通过使用get_attached_media( \'\', $post_B_id )
.
如何检索中使用的所有媒体的列表POST B, 包括“我的文件”等文件。pdf-未附加,通过插入POST B?
如何在帖子中检索未连接媒体的ID?
我有两个帖子:POST A 和POST B 和一个名为file.pdf.
我已上传file.pdf 到POST A 然后又将其插入POST B.
现在file.pdf 仍附加到POST A 所以我无法通过使用get_attached_media( \'\', $post_B_id )
.
如何检索中使用的所有媒体的列表POST B, 包括“我的文件”等文件。pdf-未附加,通过插入POST B?
是的,你可以做到!它简单/容易吗?有点。。。它是否快速且可扩展?哦,天哪,不。
$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个并发用户,如果你运气好的话,它很慢,检查每个附件都需要时间
您可以运行这样的功能,在帖子中查找并提取媒体
add_action(\'the_content\', function($content) {
$mediaRegex = "/(src|href)=\\"(.+?).(jpg|png|pdf)\\"/i";
$mediaFind = preg_match_all($mediaRegex, $content, $media);
if (isset($media[2]) && count($media[2]) > 0)
$content = "<pre>MEDIA WITHIN THIS PAGE: \\n".print_r($media[2],true)."</pre>".$content;
return $content;
});
您可以修改regex模式以更好地适应您的设置。您可以让regex获取插入媒体的类名(而不是URL),并以这种方式检索附件ID。和/或如果要进一步优化找到的媒体,确保其位于媒体库中,可以将媒体库中的媒体项目URL放入阵列中:
// get the media library for comparison
$library = array();
$args = array(
\'post_type\' => \'attachment\',
//\'post_mime_type\' => \'image\', // if theres only one
\'numberposts\' => -1,
\'post_status\' => null,
\'post_parent\' => null,
);
$attachments = get_posts($args);
foreach ($attachments as $post)
$library[] = wp_get_attachment_url($post->ID);
然后编写一些代码来与以下内容进行争论in_array()
对于个人$media[2]
匹配vs$library
. 根据使用情况,您可能需要添加Wordpress Transients 并包装库代码段。要找到媒体文件的所有用法,很难得到简短的提示和源代码。WordPress创建了一个与帖子类型的用法关系。但您也有机会使用图库中的媒体文件、插件、主题、自定义代码等。
我有一个WordPress网站,上面有现有的内容和图片。目前,帖子中的图像链接到原始媒体文件。我想对此进行修改,以便它们链接到图像的大小调整版本(例如,最大2000x2000像素)。最好,这应该由呈现页面时应用的一些过滤器来完成,这样我就不必编辑帖子中的现有链接。E、 g.,我想要这个:<a href=\"/wp-content/uploads/file.jpg\"><img ... /></a> 要转换为:<a href=\"/wp-content/u