wp_maybe_generate_attachment_metadata()
云策文档标注
概述
wp_maybe_generate_attachment_metadata() 函数用于在附件元数据缺失时尝试生成它,通过检查文件存在性和避免重复生成来确保数据完整性。
关键要点
- 函数接受一个 WP_Post 对象作为必需参数,代表附件。
- 检查附件 ID 和文件是否存在,如果元数据为空且文件存在,则尝试生成元数据。
- 使用 transient 锁机制防止并发生成,避免重复操作。
- 核心逻辑包括调用 wp_generate_attachment_metadata() 和 wp_update_attachment_metadata() 来创建和更新元数据。
代码示例
function wp_maybe_generate_attachment_metadata( $attachment ) {
if ( empty( $attachment ) || empty( $attachment->ID ) ) {
return;
}
$attachment_id = (int) $attachment->ID;
$file = get_attached_file( $attachment_id );
$meta = wp_get_attachment_metadata( $attachment_id );
if ( empty( $meta ) && file_exists( $file ) ) {
$_meta = get_post_meta( $attachment_id );
$_lock = 'wp_generating_att_' . $attachment_id;
if ( ! array_key_exists( '_wp_attachment_metadata', $_meta ) && ! get_transient( $_lock ) ) {
set_transient( $_lock, $file );
wp_update_attachment_metadata( $attachment_id, wp_generate_attachment_metadata( $attachment_id, $file ) );
delete_transient( $_lock );
}
}
}注意事项
- 函数自 WordPress 3.9.0 版本引入,确保在兼容版本中使用。
- 相关函数包括 wp_generate_attachment_metadata()、get_transient()、set_transient()、delete_transient()、wp_get_attachment_metadata()、wp_update_attachment_metadata()、get_attached_file() 和 get_post_meta(),用于元数据生成和临时数据管理。
- 在编辑表单中由 edit_form_image_editor() 调用,适用于附件处理场景。
原文内容
Maybe attempts to generate attachment metadata, if missing.
Parameters
$attachmentWP_Postrequired-
Attachment object.
Source
function wp_maybe_generate_attachment_metadata( $attachment ) {
if ( empty( $attachment ) || empty( $attachment->ID ) ) {
return;
}
$attachment_id = (int) $attachment->ID;
$file = get_attached_file( $attachment_id );
$meta = wp_get_attachment_metadata( $attachment_id );
if ( empty( $meta ) && file_exists( $file ) ) {
$_meta = get_post_meta( $attachment_id );
$_lock = 'wp_generating_att_' . $attachment_id;
if ( ! array_key_exists( '_wp_attachment_metadata', $_meta ) && ! get_transient( $_lock ) ) {
set_transient( $_lock, $file );
wp_update_attachment_metadata( $attachment_id, wp_generate_attachment_metadata( $attachment_id, $file ) );
delete_transient( $_lock );
}
}
}
Changelog
| Version | Description |
|---|---|
| 3.9.0 | Introduced. |