如何在WooCommerce商品按钮链接后追加PHP变量及值?
修改WooCommerce店铺页面商品按钮链接的方案
1. 最优方案:使用WooCommerce内置过滤器钩子
WooCommerce提供了专门的过滤器woocommerce_loop_add_to_cart_link,用于修改店铺、产品分类等循环页面中的商品按钮链接,直接在主题的functions.php文件中添加以下代码即可:
add_filter( 'woocommerce_loop_add_to_cart_link', 'custom_modify_product_button_link', 10, 2 ); function custom_modify_product_button_link( $button_html, $product ) { // 定义要追加的变量和值 $custom_param = 'var=value'; // 获取产品的原始链接 $original_link = get_permalink( $product->get_id() ); // 拼接新链接:判断原始链接是否已有参数,决定用?还是& $new_link = $original_link . ( strpos( $original_link, '?' ) === false ? '?' : '&' ) . $custom_param; // 替换按钮HTML中的原始链接,保留其他属性不变 $button_html = str_replace( $original_link, $new_link, $button_html ); return $button_html; }
代码说明:
- 钩子优先级设为10(默认优先级),确保能正常触发
- 函数接收两个参数:按钮的原始HTML代码和当前产品对象
- 处理链接时会自动判断是否已有查询参数,避免出现
??这类错误格式 - 仅替换链接部分,按钮的class、data属性、文本内容等均保持原样
2. 备选方案:修改模板文件(不推荐)
如果过滤器因特殊场景无法生效,可直接修改模板文件,但需注意维护成本:
- 将WooCommerce插件内的
loop/add-to-cart.php文件,复制到当前主题的woocommerce/loop/目录下(切勿直接修改插件文件,否则插件更新后会被覆盖) - 在复制后的文件中,找到获取产品链接的代码
get_permalink( $product ),替换为:
$product_link = add_query_arg( 'var', 'value', get_permalink( $product ) );
- 用新的
$product_link替换原文件中输出链接的部分
注意:
- 修改模板属于硬编码操作,后续WooCommerce若更新模板结构,需同步更新主题内的模板文件,维护成本较高,因此优先使用过滤器方案。
内容的提问来源于stack exchange,提问作者user2197774
相关产品推荐
相关产品推荐

