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

如何正确编写调用ACF文件上传字段的WordPress短代码

问题修复说明

你写的短代码存在4个核心语法/逻辑错误:

  • 变量名非法:判断条件中错误使用$delib-fichier,PHP不允许变量名包含减号,和你之前赋值的$delib_fichier(下划线命名)不匹配,会直接触发语法错误。
  • 嵌套PHP标签错误:已经处于PHP执行环境中拼接字符串时,不需要额外写<?php echo ?>标签,直接拼接变量即可,这种写法会导致PHP标签被当成普通文本输出,代码完全失效。
  • 冗余无效代码:$url = wp_get_attachment_url( $file );这行的$file变量从未定义,属于无用代码,会触发PHP未定义变量警告。
  • 缺少兼容处理:没有兼容ACF文件字段返回附件ID的场景,也没有做安全转义,不符合WordPress开发规范。
正确可直接使用的代码

把以下代码替换你原来的短代码片段,放到主题的functions.php或者自定义功能插件里即可:

add_shortcode('delib-fichier', function($atts, $content = null)
{
    // 提取短代码属性,支持传入post_id指定文章,默认取当前循环文章
    $atts = shortcode_atts([
        'post_id' => get_the_ID(),
    ], $atts);
    
    $delib_fichier = get_field('delib-fichier', intval($atts['post_id']));
    $output = '';
    
    // 兼容ACF返回数组/附件ID两种返回格式
    if (is_numeric($delib_fichier)) {
        $delib_fichier = [
            'url' => wp_get_attachment_url($delib_fichier),
            'filename' => basename(get_attached_file($delib_fichier))
        ];
    }
    
    // 字段有值时输出安全转义后的下载链接
    if (!empty($delib_fichier) && isset($delib_fichier['url'])) {
        $output .= sprintf(
            '<a href="%s" target="_blank" rel="noopener noreferrer">%s</a>',
            esc_url($delib_fichier['url']),
            esc_html($delib_fichier['filename'])
        );
    }
    
    return $output;
});
使用说明
  • 正常在文章/页面内容编辑器里直接写[delib-fichier],即可自动输出当前文章对应ACF字段的文件下载链接
  • 如果需要在非文章循环页面(比如分类页、首页、独立模板页)调用指定文章的文件,可以传参使用:[delib-fichier post_id="123"],把123换成对应文章ID即可

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.03 10:36:39