如何从 wordpress 的媒体库中获取图像元数据,例如替代文本、标题和描述
How to get an image metadata such as alt text, caption and description from media library in wordpress
我正在尝试获取与特色图片关联的元数据,但 get_post_meta
保持 returning 为空。
$image_alt_text = get_post_meta($image_id, '_wp_attachment_image_alt', true);
这有效并且 returns 数据,但下面的代码不起作用:
$image_description = get_post_meta($image_id, '_wp_attachment_description', true);
$image_caption = get_post_meta($image_id, '_wp_attachment_caption', true);
这两个return为空。我填写了这些字段,但无法将它们恢复到我的模板中!
我正在尝试使用特色图片的 Alt Text
、Title
、Caption
和 Description
来改善我的网站搜索引擎优化,但我不明白为什么他们出来是空的。
我找到了this post and this post,但它们让我更加困惑。
你能帮帮我吗?
提前致谢。
Caption 实际上是 POST Excerpt
,Description 实际上是 POST Content
所以你会这样做:
/* int - the attachment id */
$image_data = get_post( int );
$description = apply_filters( 'the_content', $image_data->post_content );
$caption = apply_filters( 'the_excerpt', $image_data->post_excerpt );
"These two return empty"
因为在 post 元 table 中没有名为 '_wp_attachment_description'
的键。 '_wp_attachment_caption'
也一样。它们存储在 post 中 table。这就是为什么 get_post_meta
return 是空的!
第一种方式
比方说,我上传了一个 wordpress 的徽标并填充了这些元数据字段,如下所示:
现在,为了获得您要查找的数据,您可以使用 attachment_url_to_postid
和 get_post_field
函数。所以你可以这样做:
$image_id = attachment_url_to_postid( 'http://yourwebsite.dev/wp-content/uploads/2021/10/WordPress-logotype-alternative-white.png' );
$image_alt_text = get_post_meta($image_id, '_wp_attachment_image_alt', true);
$image_caption = get_post_field('post_excerpt', $image_id);
$image_title = get_post_field('post_title', $image_id);
$image_content = get_post_field('post_content', $image_id);
$image_name = get_post_field('post_name', $image_id);
$image_post_type = get_post_field('post_type', $image_id);
$image_post_mime_type = get_post_field('post_mime_type', $image_id);
为了测试它,我们可以这样做:
echo "<strong>This is the id of the featured image:</strong><span style='color:green;'> {$image_id}</span>";
echo '<br>';
echo "<strong>This is the alternative Text:</strong><span style='color:green;'> {$image_alt_text}</span>";
echo '<br>';
echo "<strong>This is the caption:</strong><span style='color:green;'> {$image_caption}</span>";
echo '<br>';
echo "<strong>This is the title:</strong><span style='color:green;'> {$image_title}</span>";
echo '<br>';
echo "<strong>This is the description of the image:</strong><span style='color:green;'> {$image_content}</span>";
echo '<br>';
echo "<strong>This is the original name of the file:</strong><span style='color:green;'> {$image_name}</span>";
echo '<br>';
echo "<strong>This is the post type:</strong><span style='color:green;'> {$image_post_type}</span>";
echo '<br>';
echo "<strong>This is the mime type of the image:</strong><span style='color:green;'> {$image_post_mime_type}</span>";
echo '<br>
输出这个:
注意:
- 我对图像使用了一个虚拟 link 只是为了给你一个例子,所以一定要将它更改为你想要获取元数据的图像!
- 如您在屏幕截图中所见,图像描述存储为
post_content
,图像标题存储为 post_excerpt
。
- 我也为你准备了
post_type
和 mime_type
!
第二种方式,在wordpress循环中
如果你想在 wordpress 循环中获取元数据,我们可以使用 get_post_thumbnail_id
函数。所以你可以使用下面的代码:
$args = array(
'post_type' => 'post',
'posts_per_page' => -1,
);
$query = new WP_Query($args);
if($query){
while($query->have_posts()){
$query->the_post();
echo "<strong>This is the title of a post: </strong>" . get_the_title();
$image_id = get_post_thumbnail_id(get_the_id());
echo '<br>';
echo "<strong>This is the id of the featured image:</strong><span style='color:green;'> {$image_id}</span>";
echo '<br>';
$image_alt_text = get_post_meta($image_id, '_wp_attachment_image_alt', true);
$image_caption = get_post_field('post_excerpt', $image_id);
$image_title = get_post_field('post_title', $image_id);
$image_content = get_post_field('post_content', $image_id);
$image_name = get_post_field('post_name', $image_id);
$image_post_type = get_post_field('post_type', $image_id);
$image_post_mime_type = get_post_field('post_mime_type', $image_id);
echo "<strong>This is the alternative Text:</strong><span style='color:green;'> {$image_alt_text}</span>";
echo '<br>';
echo "<strong>This is the caption:</strong><span style='color:green;'> {$image_caption}</span>";
echo '<br>';
echo "<strong>This is the title:</strong><span style='color:green;'> {$image_title}</span>";
echo '<br>';
echo "<strong>This is the description of the image:</strong><span style='color:green;'> {$image_content}</span>";
echo '<br>';
echo "<strong>This is the original name of the file:</strong><span style='color:green;'> {$image_name}</span>";
echo '<br>';
echo "<strong>This is the post type:</strong><span style='color:green;'> {$image_post_type}</span>";
echo '<br>';
echo "<strong>This is the mime type of the image:</strong><span style='color:green;'> {$image_post_mime_type}</span>";
}
}
wp_reset_postdata();
输出这个:
第三种方式,稍微重构和优化我们的代码!
在上述两种解决方案中,我们都在重复自己。因此,为了遵循“DRY”原则,我们可以编写一个可重用的函数,它将 return 与图像 ID 相关的元数据的关联数组。像这样:
此函数进入主题的 functions.php
文件。
/**
* A function to retrieve corresponding metadata for an image uploaded through Media Library in Wordpress
*
* @author https://whosebug.com/users/15040627/ruvee
*
* @param string|int The id of the image you're trying to get metadata for!
*
* @return array This function returns an associative array of metadata related to the image id being passed to it.
*/
function getting_image_metadata($image_id){
$image_metadata_array = array();
$image_metadata_array['image_alt_text'] = get_post_meta($image_id, '_wp_attachment_image_alt', true) ?? '';
$image_metadata_array['image_caption'] = get_post_field('post_excerpt', $image_id) ?? '';
$image_metadata_array['image_title'] = get_post_field('post_title', $image_id) ?? '';
$image_metadata_array['image_content'] = get_post_field('post_content', $image_id) ?? '';
$image_metadata_array['image_name'] = get_post_field('post_name', $image_id) ?? '';
$image_metadata_array['image_post_type'] = get_post_field('post_type', $image_id) ?? '';
$image_metadata_array['image_post_mime_type'] = get_post_field('post_mime_type', $image_id) ?? '';
return $image_metadata_array;
}
现在为了在您的模板中使用此功能,您可以这样做:
$image_id = attachment_url_to_postid( 'http://yourwebsite.dev/wp-content/uploads/2021/10/WordPress-logotype-alternative-white.png' );
$image_metadata_array = getting_image_metadata($image_id);
echo "<pre>";
print_r($image_metadata_array);
echo "</pre>";
或者在 wordpress 循环中:
$image_id = get_post_thumbnail_id(get_the_id());
$image_metadata_array = getting_image_metadata($image_id);
echo "<pre>";
print_r($image_metadata_array);
echo "</pre>";
输出这个关联数组:
希望这个回答能帮您解决问题![=33=]
此答案已经在 wordpress 5.8
上进行了全面测试并且工作正常!
我正在尝试获取与特色图片关联的元数据,但 get_post_meta
保持 returning 为空。
$image_alt_text = get_post_meta($image_id, '_wp_attachment_image_alt', true);
这有效并且 returns 数据,但下面的代码不起作用:
$image_description = get_post_meta($image_id, '_wp_attachment_description', true);
$image_caption = get_post_meta($image_id, '_wp_attachment_caption', true);
这两个return为空。我填写了这些字段,但无法将它们恢复到我的模板中!
我正在尝试使用特色图片的 Alt Text
、Title
、Caption
和 Description
来改善我的网站搜索引擎优化,但我不明白为什么他们出来是空的。
我找到了this post and this post,但它们让我更加困惑。
你能帮帮我吗?
提前致谢。
Caption 实际上是 POST Excerpt
,Description 实际上是 POST Content
所以你会这样做:
/* int - the attachment id */
$image_data = get_post( int );
$description = apply_filters( 'the_content', $image_data->post_content );
$caption = apply_filters( 'the_excerpt', $image_data->post_excerpt );
"These two return empty"
因为在 post 元 table 中没有名为 '_wp_attachment_description'
的键。 '_wp_attachment_caption'
也一样。它们存储在 post 中 table。这就是为什么 get_post_meta
return 是空的!
第一种方式
比方说,我上传了一个 wordpress 的徽标并填充了这些元数据字段,如下所示:
现在,为了获得您要查找的数据,您可以使用 attachment_url_to_postid
和 get_post_field
函数。所以你可以这样做:
$image_id = attachment_url_to_postid( 'http://yourwebsite.dev/wp-content/uploads/2021/10/WordPress-logotype-alternative-white.png' );
$image_alt_text = get_post_meta($image_id, '_wp_attachment_image_alt', true);
$image_caption = get_post_field('post_excerpt', $image_id);
$image_title = get_post_field('post_title', $image_id);
$image_content = get_post_field('post_content', $image_id);
$image_name = get_post_field('post_name', $image_id);
$image_post_type = get_post_field('post_type', $image_id);
$image_post_mime_type = get_post_field('post_mime_type', $image_id);
为了测试它,我们可以这样做:
echo "<strong>This is the id of the featured image:</strong><span style='color:green;'> {$image_id}</span>";
echo '<br>';
echo "<strong>This is the alternative Text:</strong><span style='color:green;'> {$image_alt_text}</span>";
echo '<br>';
echo "<strong>This is the caption:</strong><span style='color:green;'> {$image_caption}</span>";
echo '<br>';
echo "<strong>This is the title:</strong><span style='color:green;'> {$image_title}</span>";
echo '<br>';
echo "<strong>This is the description of the image:</strong><span style='color:green;'> {$image_content}</span>";
echo '<br>';
echo "<strong>This is the original name of the file:</strong><span style='color:green;'> {$image_name}</span>";
echo '<br>';
echo "<strong>This is the post type:</strong><span style='color:green;'> {$image_post_type}</span>";
echo '<br>';
echo "<strong>This is the mime type of the image:</strong><span style='color:green;'> {$image_post_mime_type}</span>";
echo '<br>
输出这个:
注意:
- 我对图像使用了一个虚拟 link 只是为了给你一个例子,所以一定要将它更改为你想要获取元数据的图像!
- 如您在屏幕截图中所见,图像描述存储为
post_content
,图像标题存储为post_excerpt
。 - 我也为你准备了
post_type
和mime_type
!
第二种方式,在wordpress循环中
如果你想在 wordpress 循环中获取元数据,我们可以使用 get_post_thumbnail_id
函数。所以你可以使用下面的代码:
$args = array(
'post_type' => 'post',
'posts_per_page' => -1,
);
$query = new WP_Query($args);
if($query){
while($query->have_posts()){
$query->the_post();
echo "<strong>This is the title of a post: </strong>" . get_the_title();
$image_id = get_post_thumbnail_id(get_the_id());
echo '<br>';
echo "<strong>This is the id of the featured image:</strong><span style='color:green;'> {$image_id}</span>";
echo '<br>';
$image_alt_text = get_post_meta($image_id, '_wp_attachment_image_alt', true);
$image_caption = get_post_field('post_excerpt', $image_id);
$image_title = get_post_field('post_title', $image_id);
$image_content = get_post_field('post_content', $image_id);
$image_name = get_post_field('post_name', $image_id);
$image_post_type = get_post_field('post_type', $image_id);
$image_post_mime_type = get_post_field('post_mime_type', $image_id);
echo "<strong>This is the alternative Text:</strong><span style='color:green;'> {$image_alt_text}</span>";
echo '<br>';
echo "<strong>This is the caption:</strong><span style='color:green;'> {$image_caption}</span>";
echo '<br>';
echo "<strong>This is the title:</strong><span style='color:green;'> {$image_title}</span>";
echo '<br>';
echo "<strong>This is the description of the image:</strong><span style='color:green;'> {$image_content}</span>";
echo '<br>';
echo "<strong>This is the original name of the file:</strong><span style='color:green;'> {$image_name}</span>";
echo '<br>';
echo "<strong>This is the post type:</strong><span style='color:green;'> {$image_post_type}</span>";
echo '<br>';
echo "<strong>This is the mime type of the image:</strong><span style='color:green;'> {$image_post_mime_type}</span>";
}
}
wp_reset_postdata();
输出这个:
第三种方式,稍微重构和优化我们的代码!
在上述两种解决方案中,我们都在重复自己。因此,为了遵循“DRY”原则,我们可以编写一个可重用的函数,它将 return 与图像 ID 相关的元数据的关联数组。像这样:
此函数进入主题的 functions.php
文件。
/**
* A function to retrieve corresponding metadata for an image uploaded through Media Library in Wordpress
*
* @author https://whosebug.com/users/15040627/ruvee
*
* @param string|int The id of the image you're trying to get metadata for!
*
* @return array This function returns an associative array of metadata related to the image id being passed to it.
*/
function getting_image_metadata($image_id){
$image_metadata_array = array();
$image_metadata_array['image_alt_text'] = get_post_meta($image_id, '_wp_attachment_image_alt', true) ?? '';
$image_metadata_array['image_caption'] = get_post_field('post_excerpt', $image_id) ?? '';
$image_metadata_array['image_title'] = get_post_field('post_title', $image_id) ?? '';
$image_metadata_array['image_content'] = get_post_field('post_content', $image_id) ?? '';
$image_metadata_array['image_name'] = get_post_field('post_name', $image_id) ?? '';
$image_metadata_array['image_post_type'] = get_post_field('post_type', $image_id) ?? '';
$image_metadata_array['image_post_mime_type'] = get_post_field('post_mime_type', $image_id) ?? '';
return $image_metadata_array;
}
现在为了在您的模板中使用此功能,您可以这样做:
$image_id = attachment_url_to_postid( 'http://yourwebsite.dev/wp-content/uploads/2021/10/WordPress-logotype-alternative-white.png' );
$image_metadata_array = getting_image_metadata($image_id);
echo "<pre>";
print_r($image_metadata_array);
echo "</pre>";
或者在 wordpress 循环中:
$image_id = get_post_thumbnail_id(get_the_id());
$image_metadata_array = getting_image_metadata($image_id);
echo "<pre>";
print_r($image_metadata_array);
echo "</pre>";
输出这个关联数组:
希望这个回答能帮您解决问题![=33=]
此答案已经在 wordpress 5.8
上进行了全面测试并且工作正常!