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

如何在WooCommerce中修改widget的innerHTML以给分类列表添加促销标识

WooCommerce分类列表小工具添加促销标签实现方案

推荐方案:钩子代码实现(无需修改核心/分类名称)

该方案完全通过WordPress原生钩子实现,不会修改分类原生名称,升级主题、插件不会丢失配置。

步骤1:添加代码到站点

将以下两段代码添加到当前主题的functions.php文件中,或者通过「代码片段」类插件插入:

代码1:给商品分类添加促销文本自定义字段

// 商品分类新增促销文本设置项
add_action('product_cat_add_form_fields', 'wc_add_cat_sale_field');
function wc_add_cat_sale_field() {
    ?>
    <div class="form-field">
        <label for="cat_sale_text">促销文本</label>
        <input type="text" name="cat_sale_text" id="cat_sale_text" placeholder="例:ON SALE! -50%">
        <p class="description">填写后将在分类列表小工具中该分类旁显示对应促销标签</p>
    </div>
    <?php
}

add_action('product_cat_edit_form_fields', 'wc_edit_cat_sale_field', 10, 1);
function wc_edit_cat_sale_field($term) {
    $sale_text = get_term_meta($term->term_id, 'cat_sale_text', true);
    ?>
    <tr class="form-field">
        <th scope="row"><label for="cat_sale_text">促销文本</label></th>
        <td>
            <input type="text" name="cat_sale_text" id="cat_sale_text" value="<?php echo esc_attr($sale_text); ?>" placeholder="例:ON SALE! -50%">
            <p class="description">填写后将在分类列表小工具中该分类旁显示对应促销标签</p>
        </td>
    </tr>
    <?php
}

// 保存促销文本配置
add_action('edited_product_cat', 'wc_save_cat_sale_field', 10, 1);
add_action('create_product_cat', 'wc_save_cat_sale_field', 10, 1);
function wc_save_cat_sale_field($term_id) {
    if (isset($_POST['cat_sale_text'])) {
        update_term_meta($term_id, 'cat_sale_text', sanitize_text_field($_POST['cat_sale_text']));
    }
}

代码2:将促销文本插入到分类列表小工具输出中

// 分类列表小工具追加促销标签
add_filter('wp_list_categories', 'wc_append_sale_tag_to_cat_widget', 10, 2);
function wc_append_sale_tag_to_cat_widget($output, $args) {
    // 仅对WooCommerce自带分类列表小工具生效
    $is_wc_cat_widget = isset($args['taxonomy']) && $args['taxonomy'] === 'product_cat' 
        && isset($args['widget_id']) 
        // PHP8.0+用下面一行
        && str_contains($args['widget_id'], 'woocommerce_product_categories');
        // 低于PHP8.0替换上面一行为:&& strpos($args['widget_id'], 'woocommerce_product_categories') !== false;
    if (!$is_wc_cat_widget) return $output;
    // 匹配所有分类项ID
    preg_match_all('/class="cat-item cat-item-(\d+)"/', $output, $matches);
    if (empty($matches[1])) return $output;
    foreach ($matches[1] as $term_id) {
        $sale_text = get_term_meta($term_id, 'cat_sale_text', true);
        if (!$sale_text) continue;
        $sale_tag = ' <span class="cat-sale-tag">' . esc_html($sale_text) . '</span>';
        // 插入到分类名称后
        $output = preg_replace('/(cat-item-' . $term_id . '.*?<a.*?>.*?)(<\/a>)/i', '$1' . $sale_tag . '$2', $output);
    }
    return $output;
}

步骤2:配置促销分类

进入WordPress后台→「商品」→「分类」,编辑需要添加促销标识的分类,在「促销文本」输入框填入需要显示的内容(如ON SALE! -50%)后保存即可生效。

步骤3:自定义促销标签样式

可以将以下CSS添加到主题自定义CSS(后台「外观」→「自定义」→「额外CSS」)中,调整促销标签的显示效果:

.cat-sale-tag {
    color: #d9534f;
    font-size: 0.85em;
    font-weight: 700;
    margin-left: 6px;
    /* 可选额外样式 */
    background: #ffebee;
    padding: 2px 5px;
    border-radius: 3px;
}

注意事项

  • 该方案仅针对WooCommerce自带的分类列表小工具生效,如果你使用的是第三方主题/插件自定义的分类列表,只需修改代码中判断小工具的条件即可适配。
  • 所有配置完全独立于分类原生名称,修改/删除促销文本不会影响分类本身的设置。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.08 22:09:02