自wordpress版本4.0以来,有一个wordpress核心功能attachment_url_to_postid “试图将附件URL转换为帖子ID。”但这些函数存在巨大缺陷,因为它无法转换自定义图像URL大小。
在尝试解决这些问题之前,几乎所有的答案都是最重要的,但所有这些答案都有一个非常繁重的数据库查询,试图获取所有现有的附件,然后遍历所有这些答案,试图获取附件元数据并在其中查找自定义大小。只有在wordpress项目中有少量附件时,它才能正常工作。但如果你有一个有10000多个附件的大项目,你肯定会遇到性能问题。
但您可以通过现有的过滤器attachment\\u url\\u to\\u postid扩展attachment\\u url\\u to\\u postid核心功能,然后尝试强制attachment\\u url\\u to\\u postid功能在自定义图像大小之间搜索。只需将下面的代码添加到函数中。活动wordpress主题的php文件。然后像以前一样使用attachment\\u url\\u to\\u postid函数,但使用其他自定义大小功能。
add_filter( \'attachment_url_to_postid\', \'change_attachment_url_to_postid\', 10, 2 );
function change_attachment_url_to_postid( $post_id, $url ) {
if ( ! $post_id ) {
$file = basename( $url );
$query = array(
\'post_type\' => \'attachment\',
\'fields\' => \'ids\',
\'meta_query\' => array(
array(
\'key\' => \'_wp_attachment_metadata\',
\'value\' => $file,
\'compare\' => \'LIKE\',
),
)
);
$ids = get_posts( $query );
if ( ! empty( $ids ) ) {
foreach ( $ids as $id ) {
$meta = wp_get_attachment_metadata( $id );
foreach ( $meta[\'sizes\'] as $size => $values ) {
$image_src = wp_get_attachment_image_src( $id, $size );
if ( $values[\'file\'] === $file && $url === array_shift( $image_src ) ) {
$post_id = $id;
}
}
}
}
}
return $post_id;
}