如何通过ACF在WooCommerce产品“附加信息”标签添加PDF自定义字段
如何用ACF给WooCommerce产品的「附加信息」标签添加PDF下载链接
没问题,我来帮你一步步实现这个功能,既让管理员能轻松上传PDF,又能在WooCommerce产品的「附加信息」标签里规范显示下载链接:
第一步:创建ACF文件字段
首先在ACF后台新建一个字段组,用来让管理员上传PDF:
- 给字段组起个直观的名字,比如「产品附加PDF」
- 添加一个文件类型的字段,字段名设为
pdf(这个名字要和后面代码里的一致) - 「返回格式」推荐选文件数组(这样能同时获取PDF的URL和文件名,显示更友好),如果选「文件URL」也可以,只是没法直接拿到文件名
- 设置显示规则:选择「产品」类型的帖子,确保这个字段只出现在WooCommerce产品的编辑页面
第二步:在「附加信息」标签中显示PDF链接
这里有两种更安全的实现方式(不推荐直接修改WooCommerce核心模板,避免主题/插件更新丢失修改):
方式一:用子主题覆盖模板文件
- 找到WooCommerce默认模板文件:
woocommerce/templates/single-product/product-attributes.php - 把这个文件复制到你的子主题目录下,路径要保持一致:
your-child-theme/woocommerce/single-product/product-attributes.php - 打开子主题里的这个文件,找到属性表格的循环结束位置(比如
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
相关产品推荐
相关产品推荐

