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

WooCommerce Product Vendor前端店铺加载对应供应商ACF字段问题

问题核心原因
  • 裸调用get_field()/the_field()时未指定数据所属对象ID,函数默认读取当前全局主查询关联的对象,供应商归档页全局对象经常指向管理员创建的首页或基础商品,因此永远拉取到管理员账号下的字段值
  • 挂载的woocommerce_archive_description是所有WooCommerce归档页通用钩子,未做页面判断,所有商品分类、商店首页都会触发这段逻辑,不是供应商页面专属钩子
可直接部署的实现代码

前端店铺页自定义字段输出

替换你之前functions.php里的对应代码即可,代码会自动识别当前访问的供应商页面,拉取对应供应商的字段值,不会串数据:

add_action( 'woocommerce_archive_description', 'vendor_custom_profile_render', 7 );
function vendor_custom_profile_render() {
    // 仅在WooCommerce Product Vendors的供应商店铺页执行
    if ( ! is_tax( 'wcpv_product_vendors' ) ) {
        return;
    }
    // 获取当前页面对应的供应商术语对象
    $vendor_term = get_queried_object();
    $acf_target_id = 'term_' . $vendor_term->term_id;

    // 输出成立时间字段,可根据自己的字段替换
    $founded_on = get_field( 'founded_on', $acf_target_id );
    if ( $founded_on ) {
        printf(
            '<div class="vendor-profile-item">成立时间:%s</div>',
            esc_html( $founded_on )
        );
    }

    // 需输出更多字段时,参照上面格式复制修改字段名即可
    // 例:输出自定义简介字段
    // $vendor_intro = get_field('vendor_intro', $acf_target_id);
    // if($vendor_intro) printf('<div class="vendor-profile-intro">%s</div>', wp_kses_post($vendor_intro));
}

供应商前端仪表盘字段编辑能力

下面的代码会把自定义字段加到供应商自带的前端「店铺设置」页,供应商登录后无需进入WP后台即可自行编辑字段内容,提交后自动保存:

// 在前端店铺设置页渲染自定义字段输入框
add_action( 'wcpv_vendor_settings_frontend_shop_settings', 'render_vendor_frontend_custom_fields', 10, 1 );
function render_vendor_frontend_custom_fields( $vendor_term ) {
    $acf_target_id = 'term_' . $vendor_term->term_id;
    $current_founded = get_field( 'founded_on', $acf_target_id );
    ?>
    <p class="form-field">
        <label for="founded_on">店铺成立时间</label>
        <input type="text" class="input-text" name="founded_on" id="founded_on" value="<?php echo esc_attr( $current_founded ); ?>">
        <span class="description">填写店铺正式成立的日期/年份</span>
    </p>
    <?php
    // 新增字段参照上面格式添加即可
}

// 处理供应商前端提交的字段保存逻辑
add_action( 'wcpv_frontend_settings_save', 'save_vendor_frontend_custom_fields', 10, 2 );
function save_vendor_frontend_custom_fields( $vendor_id, $request ) {
    // 权限校验,仅允许供应商编辑自己的字段
    if ( ! current_user_can( 'manage_woocommerce' ) && ! wcpv_vendor_has_cap( get_current_user_id(), $vendor_id ) ) {
        return;
    }
    $acf_target_id = 'term_' . $vendor_id;
    // 保存成立时间字段
    if ( isset( $request['founded_on'] ) ) {
        update_field( 'founded_on', sanitize_text_field( $request['founded_on'] ), $acf_target_id );
    }
    // 新增字段的保存逻辑参照上面格式添加即可
}
配置注意事项
  • ACF字段组的位置规则需设置为「分类术语 等于 供应商(wcpv_product_vendors)」,不要绑定到用户、文章或其他对象类型,否则会出现ID不匹配、读不到值的问题
  • 代码中所有founded_on为示例字段名,实际使用时替换为你自己创建的ACF字段键名即可,新增多个字段时参照注释里的示例复制对应代码块
  • 输出富文本类字段时用wp_kses_post()做安全过滤,不要直接echo用户提交的内容,避免XSS风险

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 10:33:25