如何在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
相关产品推荐
相关产品推荐

