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

技术问询:如何通过属性名称获取Woocommerce产品属性ID

通过WooCommerce属性Slug获取属性ID的解决方案

嗨,我之前也碰到过这个需求!确实,WooCommerce的产品属性本质是自定义分类法,但WordPress自带的get_taxonomy()函数只能返回分类法的注册信息对象,拿不到咱们在后台看到的那个属性ID——因为这个ID其实是WooCommerce把属性作为product_attribute分类法下的术语存储的term_id,下面给你两种亲测好用的方法:

方法一:用WordPress原生函数get_term_by

这是最规范的做法,不用直接操作数据库:

// 替换为你的目标属性Slug,比如pa_foobar
$target_attribute_slug = 'pa_foobar';

// 从product_attribute分类法中查找对应Slug的术语
$attribute_term = get_term_by('slug', $target_attribute_slug, 'product_attribute');

// 验证结果并获取ID
if ($attribute_term && !is_wp_error($attribute_term)) {
    $attribute_id = $attribute_term->term_id;
    // 这里可以用$attribute_id做后续操作
    echo "找到的属性ID是:" . $attribute_id;
} else {
    echo "未找到对应Slug的产品属性";
}

方法二:直接数据库查询(适合需要更高性能的场景)

如果你的场景需要更直接的查询,可以用WPDB类来操作,避免函数调用的额外开销:

global $wpdb;
$target_attribute_slug = 'pa_foobar';

$attribute_id = $wpdb->get_var(
    $wpdb->prepare(
        "SELECT t.term_id 
         FROM {$wpdb->terms} t 
         INNER JOIN {$wpdb->term_taxonomy} tt ON t.term_id = tt.term_id 
         WHERE t.slug = %s AND tt.taxonomy = 'product_attribute'",
        $target_attribute_slug
    )
);

if ($attribute_id) {
    echo "找到的属性ID是:" . $attribute_id;
} else {
    echo "未找到对应Slug的产品属性";
}

补充说明

为什么get_taxonomy()拿不到ID?因为get_taxonomy()返回的是分类法的注册配置(比如标签、描述、是否公开等),而WooCommerce后台显示的属性ID,其实是该属性作为product_attribute分类法下的术语ID——这是WooCommerce存储属性的特殊方式,所以得从术语表而非分类法配置里取ID。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 09:33:27