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

如何在WordPress中获取并使用音频元数据?返回值为false怎么办

嘿,我来帮你搞定WordPress里音频元数据的问题,我之前做项目时也踩过wp_read_audio_metadata()的坑,下面分点给你讲清楚:

在WordPress中获取音频元数据的正确姿势

WordPress内置了wp_read_audio_metadata()函数专门用来读取音频文件的元数据(比如时长、文件大小、格式这些),不过要注意这个函数属于后台媒体处理模块,前台默认没加载,所以必须先引入对应的文件:

require_once( ABSPATH . 'wp-admin/includes/media.php' );
为什么wp_read_audio_metadata()会返回false?

你示例里用远程URL导致返回false是最常见的原因,除此之外还有几个可能:

  • 必须用本地文件路径:这个函数只能读取服务器本地的文件,远程URL(比如https://example.com/audio.mp3)是不行的,它没法跨服务器读取文件内容。
  • 文件权限不足:服务器的PHP进程没有读取目标音频文件的权限,比如文件权限设成了600,而PHP运行用户不是文件所有者,就会读取失败。
  • 格式不支持:虽然函数支持MP3、WAV、OGG、M4A这些主流格式,但小众格式或者编码异常的文件可能解析失败。
  • 文件损坏:音频文件本身损坏,或者元数据标签(ID3之类的)缺失,函数没法提取有效信息。
如何获取并使用音频元数据

下面给你两种场景的正确示例代码:

场景1:读取媒体库中已上传的音频

如果音频是通过WordPress媒体库上传的,直接用附件ID获取本地路径最方便:

// 加载媒体处理函数
require_once( ABSPATH . 'wp-admin/includes/media.php' );

// 替换成你的音频附件ID
$attachment_id = 123;
// 获取文件在服务器上的本地绝对路径
$audio_path = get_attached_file( $attachment_id );

// 读取元数据
$audio_meta = wp_read_audio_metadata( $audio_path );

// 检查是否成功获取
if ( $audio_meta ) {
    // 提取需要的字段
    $duration = $audio_meta['playtime_seconds'] ?? '未知';
    $file_size = size_format( $audio_meta['filesize'] ?? 0 );
    $mime_type = $audio_meta['mime_type'] ?? '未知';

    // 输出示例
    echo "<p>音频时长:{$duration} 秒</p>";
    echo "<p>文件大小:{$file_size}</p>";
    echo "<p>MIME类型:{$mime_type}</p>";
} else {
    echo "<p>无法读取该音频的元数据,请检查文件是否正常。</p>";
}

场景2:处理远程音频文件

如果必须处理远程音频,得先把文件下载到服务器临时目录,读取完再删除临时文件:

require_once( ABSPATH . 'wp-admin/includes/media.php' );
require_once( ABSPATH . 'wp-admin/includes/file.php' ); // 用于下载远程文件

$remote_audio_url = 'https://example.com/audio.mp3';

// 下载远程文件到临时目录
$temp_file = download_url( $remote_audio_url );

// 检查下载是否成功
if ( ! is_wp_error( $temp_file ) ) {
    // 读取元数据
    $audio_meta = wp_read_audio_metadata( $temp_file );

    if ( $audio_meta ) {
        echo "远程音频时长:{$audio_meta['playtime_seconds']} 秒";
    } else {
        echo "无法解析该远程音频的元数据";
    }

    // 记得删除临时文件,避免服务器空间浪费
    unlink( $temp_file );
} else {
    echo "下载远程音频失败:" . $temp_file->get_error_message();
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.07 14:52:48