You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

WordPress上传JPG时如何用EXIF版权信息填充图片说明?

解决WordPress用EXIF版权自动填充图片说明的问题

我来帮你搞定这个问题!你的代码出现「非法字符串偏移'image_meta'」的错误,主要是两个核心问题没处理好:一是wp_read_image_metadata()的参数用错了,二是没有提前检查元数据数组的键是否存在,直接访问会触发报错。下面是修正后的可用代码,我会一步步给你解释细节:

修正后的完整代码

<?php
add_action( 'add_attachment', 'my_set_image_copyright_as_caption' );
function my_set_image_copyright_as_caption( $post_ID ) {
    // 只处理图片类型的附件
    if ( ! wp_attachment_is_image( $post_ID ) ) {
        return;
    }

    // 获取图片文件的绝对服务器路径(wp_read_image_metadata需要这个,不能直接传post ID)
    $attachment_file = get_attached_file( $post_ID );
    if ( ! file_exists( $attachment_file ) ) {
        return;
    }

    $copyright = '';

    // 优先读取原始图片的EXIF版权信息
    $image_metadata = wp_read_image_metadata( $attachment_file );
    if ( is_array( $image_metadata ) && isset( $image_metadata['copyright'] ) ) {
        $copyright = trim( $image_metadata['copyright'] );
    }
    // 如果原始EXIF没读到,尝试从WordPress已保存的附件元数据里找
    else {
        $attachment_meta = wp_get_attachment_metadata( $post_ID );
        if ( is_array( $attachment_meta ) && isset( $attachment_meta['image_meta']['copyright'] ) ) {
            $copyright = trim( $attachment_meta['image_meta']['copyright'] );
        }
    }

    // 只有拿到有效版权信息时,才更新附件字段
    if ( ! empty( $copyright ) ) {
        // 更新图片说明(对应后台的「说明」字段,即post_excerpt)
        // 同时同步更新描述字段(post_content),不需要的话可以删掉这一行
        wp_update_post( array(
            'ID'            => $post_ID,
            'post_excerpt'  => $copyright,
            'post_content'  => $copyright,
        ) );

        // 可选:把版权信息设为图片的alt文本,不需要就删掉
        update_post_meta( $post_ID, '_wp_attachment_image_alt', $copyright );
    }
}

关键修复点说明

  1. 参数修正:wp_read_image_metadata()需要传入图片的绝对服务器路径,而不是附件的post ID,我用get_attached_file()获取了正确的路径。
  2. 安全检查:每一步都加了数组和字段存在性判断,彻底避免「非法字符串偏移」的报错。
  3. 兼容性处理:先读原始图片的EXIF,再 fallback 到WordPress保存的元数据,确保不同场景下都能拿到版权信息。
  4. 空值判断:只有当版权信息不为空时才执行更新,避免覆盖用户手动设置的内容(如果想强制覆盖,可以去掉这个判断)。

使用注意事项

  • 把代码添加到你的主题functions.php文件,或者自定义插件中即可生效。
  • 这个钩子只对新上传的图片生效,已经上传的旧图片需要批量处理的话,可以额外写个批量更新函数。
  • 注意测试不同格式的图片(JPG/PNG等),不是所有图片都包含EXIF版权信息。

内容的提问来源于stack exchange,提问作者Romain Guillaume

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.29 06:48:10