在WooCommerce站点开发中,动态生成携带属性值的自定义链接是常见需求,比如生成带商品分类、价格区间、颜色属性的筛选链接,或者带用户ID、订单号的跳转链接。通过自定义短代码的方式,可以让运营人员直接在文章、页面中插入对应链接,无需手动拼接复杂的URL参数。

短代码实现的核心逻辑
实现带属性值的自定义链接短代码,主要分为三个步骤:注册短代码、解析短代码传入的属性、拼接生成最终链接。WordPress提供了add_shortcode函数用于注册短代码,我们可以在主题的functions.php文件中添加对应逻辑。
1. 注册基础短代码
首先注册一个名为wc_custom_link的短代码,后续用户可以通过[wc_custom_link]的形式调用。基础注册代码如下:
<?php
// 注册自定义短代码
add_shortcode('wc_custom_link', 'generate_wc_custom_link');
// 短代码回调函数
function generate_wc_custom_link($atts) {
// 解析短代码属性,设置默认值
$atts = shortcode_atts(
array(
'base_url' => '', // 基础链接地址
'param1' => '', // 自定义参数1
'param2' => '', // 自定义参数2
),
$atts,
'wc_custom_link'
);
// 基础地址为空时返回提示
if (empty($atts['base_url'])) {
return '请设置基础链接地址';
}
// 拼接链接参数
$params = array();
if (!empty($atts['param1'])) {
$params[] = 'param1=' . urlencode($atts['param1']);
}
if (!empty($atts['param2'])) {
$params[] = 'param2=' . urlencode($atts['param2']);
}
// 生成最终链接
$final_url = $atts['base_url'];
if (!empty($params)) {
$final_url .= (strpos($final_url, '?') !== false ? '&' : '?') . implode('&', $params);
}
return $final_url;
}
?>
2. 适配WooCommerce商品属性场景
如果需要生成带WooCommerce商品属性的链接,比如颜色、尺寸属性,我们可以调整参数解析逻辑,支持传入属性名和属性值,自动拼接符合WooCommerce筛选规则的参数:
<?php
add_shortcode('wc_attr_link', 'generate_wc_attr_link');
function generate_wc_attr_link($atts) {
$atts = shortcode_atts(
array(
'product_id' => 0, // 商品ID
'attribute' => '', // 属性名,比如pa_color
'term' => '', // 属性值别名,比如red
'base_url' => '', // 可选的基础地址,默认使用商品链接
),
$atts,
'wc_attr_link'
);
// 参数校验
if (empty($atts['attribute']) || empty($atts['term'])) {
return '请设置属性和属性值';
}
// 获取商品基础链接
if (empty($atts['base_url']) && $atts['product_id'] > 0) {
$atts['base_url'] = get_permalink($atts['product_id']);
}
if (empty($atts['base_url'])) {
return '请设置基础链接或有效的商品ID';
}
// 拼接WooCommerce属性参数
$param_str = $atts['attribute'] . '=' . urlencode($atts['term']);
$final_url = $atts['base_url'];
$final_url .= (strpos($final_url, '?') !== false ? '&' : '?') . $param_str;
return $final_url;
}
?>
短代码的使用方式
注册完成后,就可以在WordPress的文章、页面编辑器中直接使用短代码了:
- 生成带两个自定义参数的基础链接:
[wc_custom_link base_url="https://ipipp.com/shop" param1="test" param2="demo"] - 生成带商品颜色属性的链接:
[wc_attr_link product_id="12" attribute="pa_color" term="red"] - 自定义基础地址生成属性链接:
[wc_attr_link base_url="https://ipipp.com/filter" attribute="pa_size" term="large"]
注意事项
在使用自定义短代码时需要注意以下几点:
1. 属性值中包含中文或特殊字符时,代码中已经使用了urlencode函数处理,避免出现链接编码错误的问题。2. 如果需要在链接外层添加<a>标签,可以在短代码返回结果外层包裹,或者调整回调函数直接返回完整的<a>标签代码。
3. 修改functions.php文件前建议先备份,避免代码错误导致站点无法正常访问。如果需要返回可点击的链接而不是纯URL,可以调整回调函数,将返回内容修改为如下形式:
<?php
// 返回可点击的链接示例
function generate_wc_custom_link($atts) {
// 前面的参数解析逻辑不变
$atts = shortcode_atts(
array(
'base_url' => '',
'param1' => '',
'param2' => '',
'text' => '点击跳转' // 链接显示文本
),
$atts,
'wc_custom_link'
);
if (empty($atts['base_url'])) {
return '请设置基础链接地址';
}
$params = array();
if (!empty($atts['param1'])) {
$params[] = 'param1=' . urlencode($atts['param1']);
}
if (!empty($atts['param2'])) {
$params[] = 'param2=' . urlencode($atts['param2']);
}
$final_url = $atts['base_url'];
if (!empty($params)) {
$final_url .= (strpos($final_url, '?') !== false ? '&' : '?') . implode('&', $params);
}
// 返回带a标签的完整链接
return '<a href="' . esc_url($final_url) . '">' . esc_html($atts['text']) . '</a>';
}
?>
通过以上方法,就可以快速实现WooCommerce场景下动态生成带属性值的自定义链接短代码,满足不同业务场景的链接生成需求。
WooCommerce短代码自定义链接属性值动态生成修改时间:2026-06-20 16:24:29