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

如何在WP中为Gravity Forms下拉字段填充商品分类

如何将WooCommerce商品分类填充到Gravity Forms下拉字段

嘿,这个需求我太熟了——很多商城站点都会需要把商品分类动态同步到表单里,不用手动一个个加,省超多事。下面给你两个实用的方案,优先推荐代码方案,灵活度最高:

方案一:用代码动态填充(最推荐)

这个方法通过Gravity Forms的钩子,在表单渲染前自动拉取所有商品分类并填充到指定的下拉字段里。步骤很简单:

  1. 先找到你的表单ID(编辑表单时URL里的id=X)和下拉字段的ID(在表单编辑界面,每个字段右上角的数字)。
  2. 打开你主题的functions.php文件(或者更安全的子主题functions.php),添加下面的代码:
// 钩子:在表单渲染/验证/提交前触发,填充分类选项
add_filter( 'gform_pre_render', 'populate_woocommerce_categories_to_gf' );
add_filter( 'gform_pre_validation', 'populate_woocommerce_categories_to_gf' );
add_filter( 'gform_pre_submission_filter', 'populate_woocommerce_categories_to_gf' );
add_filter( 'gform_admin_pre_render', 'populate_woocommerce_categories_to_gf' );

function populate_woocommerce_categories_to_gf( $form ) {
    // 替换成你的表单ID和目标下拉字段ID
    $target_form_id = 1;
    $target_field_id = 3;

    // 不是目标表单就直接返回
    if ( $form['id'] !== $target_form_id ) {
        return $form;
    }

    foreach ( $form['fields'] as &$field ) {
        // 找到目标下拉字段
        if ( $field->id === $target_field_id && $field->type === 'select' ) {
            // 获取所有商品分类,可根据需求调整参数
            $product_categories = get_terms( array(
                'taxonomy' => 'product_cat', // WooCommerce商品分类的 taxonomy
                'hide_empty' => false, // 设为true则只显示有商品的分类
                'orderby' => 'name', // 按名称排序
                'order' => 'ASC' // 升序排列
            ) );

            // 清空原有选项(如果想保留默认选项,删掉这行)
            $field->choices = array();

            // 遍历分类,添加到下拉选项
            foreach ( $product_categories as $cat ) {
                $field->choices[] = array(
                    'text' => $cat->name, // 显示给用户的分类名称
                    'value' => $cat->term_id // 提交后存储的分类ID,也可以换成$cat->slug用别名存储
                );
            }
        }
    }

    return $form;
}

可选优化:显示层级分类缩进

如果你的商品分类有父级/子级关系,想让下拉列表里的子分类显示缩进(更直观),可以把上面的分类遍历代码改成这样:

foreach ( $product_categories as $cat ) {
    // 根据分类层级添加缩进
    $indent = str_repeat( '  ', $cat->depth );
    $field->choices[] = array(
        'text' => $indent . $cat->name,
        'value' => $cat->term_id
    );
}

方案二:用可视化扩展(适合不想写代码的情况)

如果你完全不想碰代码,可以试试Gravity Forms的官方扩展Gravity Forms Dynamic Fields(不过这个是付费扩展),它支持直接从WooCommerce分类、产品等数据源里拉取选项,可视化配置就能完成,不用写一行代码。

注意事项

  • 修改主题文件前,一定要先备份站点,或者用子主题来添加代码,避免主题更新后代码丢失。
  • 测试表单:保存代码后,前端打开表单看看分类是否正确显示,提交测试数据确认存储的value符合你的需求。
  • 如果分类很多,hide_empty设为true可以过滤掉没有商品的空分类,让列表更简洁。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 10:02:08