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

如何从ACF自定义字段提取附件URL用于WordPress发布邮件

解决WordPress首次发布文章时通过ACF字段获取附件发送邮件的问题

问题核心是ACF返回的是文件URL,但wp_mail需要服务器本地文件路径,直接用get_field拿到的URL无法被识别为有效附件,需要做URL到本地路径的转换,以下是修改后的完整代码:

function send_mail_post($new_status, $old_status, $post) {
    // 仅在文章首次发布时触发
    if ($new_status === 'publish' && $old_status !== 'publish') {
        $attachments = array();
        
        // 从ACF获取附件URL
        $attachment_url = get_field('attachment_1', $post->ID);
        
        if ($attachment_url) {
            // 将URL转换为服务器本地文件路径
            $attachment_path = ABSPATH . parse_url($attachment_url, PHP_URL_PATH);
            
            // 验证文件存在后再加入附件数组
            if (file_exists($attachment_path)) {
                $attachments[] = $attachment_path;
            }
        }

        // 发送邮件(确保$destinatario_email等变量已提前定义)
        wp_mail($destinatario_email, $oggetto_email, $email_message, $intestazioni_email, $attachments);
    }
}
add_action('transition_post_status', 'send_mail_post', 10, 3);

关键说明:

  • URL转本地路径:用parse_url($attachment_url, PHP_URL_PATH)提取URL中的路径部分,再通过ABSPATH(WordPress根目录绝对路径)拼接成服务器可识别的本地文件路径。
  • 有效性校验:增加file_exists检查,避免因ACF字段为空或文件不存在导致邮件发送失败。
  • ACF字段配置:确保你的ACF附件字段「Return Format」选项设置为「File URL」,否则无法正确获取到URL值。

额外注意:

  • 确认服务器对目标文件路径有读取权限,否则wp_mail无法读取附件内容。
  • 若需支持多个附件,可循环处理多个ACF字段,依次将有效路径加入$attachments数组。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 00:32:12