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

如何通过ACF在WooCommerce产品“附加信息”标签添加PDF自定义字段

如何用ACF给WooCommerce产品的「附加信息」标签添加PDF下载链接

没问题,我来帮你一步步实现这个功能,既让管理员能轻松上传PDF,又能在WooCommerce产品的「附加信息」标签里规范显示下载链接:

第一步:创建ACF文件字段

首先在ACF后台新建一个字段组,用来让管理员上传PDF:

  • 给字段组起个直观的名字,比如「产品附加PDF」
  • 添加一个文件类型的字段,字段名设为pdf(这个名字要和后面代码里的一致)
  • 「返回格式」推荐选文件数组(这样能同时获取PDF的URL和文件名,显示更友好),如果选「文件URL」也可以,只是没法直接拿到文件名
  • 设置显示规则:选择「产品」类型的帖子,确保这个字段只出现在WooCommerce产品的编辑页面

第二步:在「附加信息」标签中显示PDF链接

这里有两种更安全的实现方式(不推荐直接修改WooCommerce核心模板,避免主题/插件更新丢失修改):

方式一:用子主题覆盖模板文件

  1. 找到WooCommerce默认模板文件:woocommerce/templates/single-product/product-attributes.php
  2. 把这个文件复制到你的子主题目录下,路径要保持一致:your-child-theme/woocommerce/single-product/product-attributes.php
  3. 打开子主题里的这个文件,找到属性表格的循环结束位置(比如endforeach;之后),添加以下代码:
// 获取ACF字段的PDF数据
$product_pdf = get_field('pdf');
if( $product_pdf ):
    // 处理字段返回的格式(数组或URL)
    if( is_array($product_pdf) ):
        $pdf_url = $product_pdf['url'];
        $pdf_title = $product_pdf['title'];
    else:
        $pdf_url = $product_pdf;
        $pdf_title = __('下载产品PDF', 'woocommerce');
    endif;
    ?>
    <tr class="product-pdf-row">
        <th><?php esc_html_e('产品PDF', 'woocommerce'); ?></th>
        <td>
            <a href="<?php echo esc_url($pdf_url); ?>" target="_blank" rel="noopener noreferrer">
                <?php echo esc_html($pdf_title); ?>
            </a>
        </td>
    </tr>
<?php endif; ?>

方式二:用钩子函数(更推荐,无需修改模板)

如果你不想动模板文件,可以直接在子主题的functions.php里添加以下钩子代码,它会自动把PDF链接追加到「附加信息」的表格里:

add_action('woocommerce_product_additional_information', 'custom_display_product_pdf_link');
function custom_display_product_pdf_link() {
    global $product;
    // 获取当前产品的ACF PDF字段
    $product_pdf = get_field('pdf', $product->get_id());
    
    if( !$product_pdf ) return; // 如果没有上传PDF,直接返回
    
    // 处理返回格式
    if( is_array($product_pdf) ):
        $pdf_url = $product_pdf['url'];
        $pdf_title = $product_pdf['title'];
    else:
        $pdf_url = $product_pdf;
        $pdf_title = __('下载产品PDF', 'woocommerce');
    endif;

    // 输出表格行
    echo '<tr class="product-pdf-row">
            <th>' . esc_html__('产品PDF', 'woocommerce') . '</th>
            <td>
                <a href="' . esc_url($pdf_url) . '" target="_blank" rel="noopener noreferrer">
                    ' . esc_html($pdf_title) . '
                </a>
            </td>
          </tr>';
}

几个关键注意事项

  • 确保你的字段名和代码里的get_field('pdf')完全一致,如果你ACF字段名是product_pdf,就要改成get_field('product_pdf')
  • 代码里的文本翻译用了WooCommerce的默认文本域woocommerce,如果你的主题有自定义文本域,可以替换成对应的
  • 用esc_url()和esc_html()做安全过滤,避免XSS漏洞
  • target="_blank"和rel="noopener noreferrer"是为了安全打开新窗口的标准写法

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 08:42:18