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

WordPress中如何正确获取自定义属性及其对应值

WooCommerce自定义属性获取失败的正确解决方案

你调用get_attribute()方法拿不到值的核心原因是方法调用对象错误:get_attribute()是WC_Product(WooCommerce产品对象)的专属方法,不支持直接在WC_Order(订单对象)上调用读取自定义值。针对KapidanGecer、KacTane两个自定义属性,分两种常见场景取值:


场景1:属性属于订单内购买的产品

如果两个属性是绑定在商品上的产品属性,需要先获取订单项对应的产品对象,再调用属性方法,注意产品属性默认slug为全小写格式,传驼峰命名会匹配失败:

// 替换为你实际的订单ID,确保拿到合法订单对象
$order = wc_get_order( $order_id );
if ( $order ) {
    // 遍历订单下所有商品项
    foreach ( $order->get_items() as $item ) {
        $product = $item->get_product();
        if ( !$product ) continue;
        // 到后台「产品-属性」页确认两个属性的实际slug替换下方参数
        $kapidanGecer = $product->get_attribute( 'kapidangecer' );
        $kacTane = $product->get_attribute( 'kactane' );

        // 如果属性是存在订单项上的自定义元,而非产品自带属性,用下面的方法读取
        // $kapidanGecer = wc_get_order_item_meta( $item->get_id(), 'KapidanGecer', true );
        // $kacTane = wc_get_order_item_meta( $item->get_id(), 'KacTane', true );
    }
}

场景2:属性属于订单本身的自定义字段

如果两个值是直接存储在订单维度的自定义元数据,直接调用订单对象的元数据读取方法即可,不要使用get_attribute():

$order = wc_get_order( $order_id );
if ( $order ) {
    // 参数需和存储时使用的meta_key完全一致,区分大小写
    $kapidanGecer = $order->get_meta( 'KapidanGecer', true );
    $kacTane = $order->get_meta( 'KacTane', true );
}

常见排查点

  • 确认属性归属:先区分你要取的值是存在产品上、订单项上还是订单主对象上,不同归属的读取方法完全不同
  • 核对键名准确性:产品属性slug默认全小写,自定义元key和存储时的命名完全一致(区分大小写),可通过数据库wp_postmeta表核对实际存储的键名
  • 确认对象合法性:调用方法前先判断拿到的$order、$product对象是否合法,避免空对象调用方法报错

内容的提问来源于stack exchange,提问作者Süleyman Miçooğulları

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 04:42:09