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

如何为WordPress WooCommerce编写接收标签数组的产品展示自定义函数

问题描述

需求为WooCommerce开发一个自定义函数,该函数接收产品标签数组作为参数,输出匹配的产品。已完成多选表单及辅助函数编写,需要实现核心的产品查询与展示功能。

用户提供的表单代码:

<form id="form3" method="POST" action="">
<h4>Concerns</h4>
<div class="container-form">
  <input type="checkbox" name="concern1" checked="checked"
  <?php if (isset($concern1) && $concern1=="dryness") echo "checked";?>
  value="dryness"><div class="checkmark">Dryness</div>
 
</div>

<div class="container-form">
  <input type="checkbox" name="concern2"
  <?php if (isset($concern2) && $concern2=="dullness") echo "checked";?>
  value="male"><div class="checkmark">Male</div>
  <br>
</div>

<div class="container-form">
  <input type="checkbox" name="concern3"
  <?php if (isset($concern3) && $concern3=="other") echo "checked";?>
  value="other"><div class="checkmark">Other</div>
  <br>
</div>

<input type="submit" name="submit" class="submit" value="Submit"/>
</form>

用户提供的辅助函数:

<?php
function pre_r($array){
  echo '<pre>';
  print_r($array);
  echo '</pre>';
}
?>
解决方案

第一步:修正表单的name属性

原表单中每个复选框使用独立的concern1/concern2命名,无法直接获取选中标签的数组,需统一改为数组形式的name="concerns[]",同时修正重复的checked属性与逻辑:

<form id="form3" method="POST" action="">
<h4>Concerns</h4>
<div class="container-form">
  <input type="checkbox" name="concerns[]" 
  <?php if (isset($_POST['concerns']) && in_array('dryness', $_POST['concerns'])) echo "checked";?>
  value="dryness"><div class="checkmark">Dryness</div>
</div>

<div class="container-form">
  <input type="checkbox" name="concerns[]"
  <?php if (isset($_POST['concerns']) && in_array('male', $_POST['concerns'])) echo "checked";?>
  value="male"><div class="checkmark">Male</div>
  <br>
</div>

<div class="container-form">
  <input type="checkbox" name="concerns[]"
  <?php if (isset($_POST['concerns']) && in_array('other', $_POST['concerns'])) echo "checked";?>
  value="other"><div class="checkmark">Other</div>
  <br>
</div>

<input type="submit" name="submit" class="submit" value="Submit"/>
</form>

第二步:编写自定义产品查询与展示函数

使用WooCommerce官方推荐的wc_get_products函数实现产品查询,同时处理表单提交逻辑:

<?php
// 保留原辅助函数
function pre_r($array){
  echo '<pre>';
  print_r($array);
  echo '</pre>';
}

// 核心自定义函数:接收标签数组,输出匹配产品
function display_products_by_tags($tag_slugs) {
    // 参数验证
    if (!is_array($tag_slugs) || empty($tag_slugs)) {
        echo '<p>请选择至少一个产品标签</p>';
        return;
    }

    // WooCommerce产品查询参数
    $args = array(
        'status' => 'publish', // 仅展示已发布产品
        'tag' => $tag_slugs,   // 根据标签slug查询
        'limit' => -1,         // 展示所有匹配产品,可按需修改数量
    );

    // 获取产品列表
    $products = wc_get_products($args);

    // 输出产品
    if (!empty($products)) {
        echo '<div class="products-grid">';
        foreach ($products as $product) {
            // 可根据主题需求自定义产品展示结构
            echo '<div class="product-item">';
            echo '<a href="' . esc_url($product->get_permalink()) . '">';
            echo $product->get_image(); // 产品缩略图
            echo '<h3>' . esc_html($product->get_name()) . '</h3>';
            echo '</a>';
            echo '<p class="price">' . $product->get_price_html() . '</p>';
            echo '<a href="' . esc_url($product->add_to_cart_url()) . '" class="add-to-cart-btn">' . __('Add to Cart', 'woocommerce') . '</a>';
            echo '</div>';
        }
        echo '</div>';
    } else {
        echo '<p>未找到匹配的产品</p>';
    }
}

// 处理表单提交逻辑
if (isset($_POST['submit']) && isset($_POST['concerns'])) {
    // 安全过滤用户输入
    $selected_tags = array_map('sanitize_text_field', $_POST['concerns']);
    // 调用函数展示产品
    display_products_by_tags($selected_tags);
}
?>

可选扩展:标签交集查询

如果需要查询同时包含所有选中标签的产品(默认是包含任意一个标签即可),可修改查询参数为:

$args = array(
    'status' => 'publish',
    'tax_query' => array(
        array(
            'taxonomy' => 'product_tag',
            'field'    => 'slug',
            'terms'    => $tag_slugs,
            'operator' => 'AND', // 交集查询
        ),
    ),
    'limit' => -1,
);

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 02:01:15