从 WooCommerce 中的订单项目中获取变体的自定义值
Get custom values of variations from order items in WooCommerce
我正在尝试获取客户在结账时从订单中选择的变化值(通过 id 或其他方式)以映射到用于构建 API [=39 的变量 $storage 和 $tier =].
我尝试了多种方法将数据添加到变量中,但是 API url 失败了,这让我相信我的变量没有缩进值。
我目前的代码如下(摘录):
add_action( 'woocommerce_order_status_processing', 'my_function' );
function my_function( $order_id ) {
$order = wc_get_order( $order_id );
$items = $order->get_items();
foreach ( $items as $key => $item ) {
$storage = get_post_meta( $key, 'attribute_addon-storage' );
$tier = get_post_meta( $key, 'attribute_subscription-type' );
有谁知道我将如何获取这两个变量 addon-storage
和订阅类型的值?
我可以在 woocommerce_order_itemmeta
table 中看到我想在我的数据库中获取的值。
我可以从那里获取值吗?
编辑:
因此,根据 LoicTheAztec 的建议,获取我在 woocommerce_order_itemmeta table 中看到的数据值的正确方法是 $meta_key:
add_action( 'woocommerce_order_status_processing', 'my_function', 10, 1 );
function my_function( $order_id ) {
$order = wc_get_order( $order_id );
$items = $order->get_items();
foreach ( $items as $key => $item ) {
$storage = wc_get_order_item_meta( $key, 'addon-storage', true );
$tier = wc_get_order_item_meta( $key, 'subscription-type', true );
$anyMetaValue = wc_get_order_item_meta( $key, '$meta_key', true );
// Then I can create the variable I need in the the API url with:
$package = "$tier$storage";
更新: 您混淆了订单 post 元数据和订单项元数据,它们是非常不同的东西,位于不同的数据库表中。
此外,您的代码不完整,使用 get_post_meta()
和 $key
(这是项目 ID)将无法获得任何东西...
get_post_meta( $order_id, 'meta_key', true )
函数将查找订单 post 元数据(与订单项目无关)并使用订单 ID 作为参数。
wc_get_order_item_meta( $item_id, 'meta_key', true )
函数将查找相关的订单项目元数据,并将使用项目 ID 作为参数(代码中的 $key
)...
所以这个函数应该需要在 foreach 循环中使用,而不是在 foreach 循环中获取订单项目数据。
然后2种方式:
- 您应该在您的数据库中检查
wp_postmeta
和 wp_woocommerce_order_itemmeta
表中的最后一个订单 ID(通过 phpMyAdmin),以查看数据位于何处……
- 或者您可以使用以下代码(仅用于测试)输出您的数据所在的订单项目原始数据。
此原始数据将输出在商店、存档和产品页面,仅可见对于已登录的管理员。您将需要在其中定义订单 ID。
这是这个测试函数
add_action( 'woocommerce_before_main_content', 'my_testing_order_function' );
function my_testing_order_function() {
// Define an Order ID
$order_id = 724;
// Only for admin user role
if( ! current_user_can('edit_products')) return;
$order = wc_get_order( $order_id ); // The order object
foreach ( $order->get_items() as $item_id => $item ) {
// Order item meta data Raw output
echo "<pre>ORDER ITEM META DATA - (Item_id $item_id):"; print_r($item->get_data()); echo'</pre>';
echo "<pre>ORDER ITEM META META DATA - (Item_id $item_id):"; print_r($item->get_meta_data()); echo'</pre>';
}
}
现在您拥有了定位和获取数据所需的一切。下面的代码通常应该适合您,允许您从您的变体中获取数据:
add_action( 'woocommerce_order_status_processing', 'my_function', 10, 1 );
function my_function( $order_id ) {
$order = wc_get_order( $order_id );
foreach ( $order->get_items() as $key => $item ) {
// get the data
$storage = wc_get_order_item_meta( $item_id, 'attribute_addon-storage', true );
$tier = wc_get_order_item_meta( $item_id, 'attribute_subscription-type', true );
}
}
我正在尝试获取客户在结账时从订单中选择的变化值(通过 id 或其他方式)以映射到用于构建 API [=39 的变量 $storage 和 $tier =].
我尝试了多种方法将数据添加到变量中,但是 API url 失败了,这让我相信我的变量没有缩进值。
我目前的代码如下(摘录):
add_action( 'woocommerce_order_status_processing', 'my_function' );
function my_function( $order_id ) {
$order = wc_get_order( $order_id );
$items = $order->get_items();
foreach ( $items as $key => $item ) {
$storage = get_post_meta( $key, 'attribute_addon-storage' );
$tier = get_post_meta( $key, 'attribute_subscription-type' );
有谁知道我将如何获取这两个变量 addon-storage
和订阅类型的值?
我可以在 woocommerce_order_itemmeta
table 中看到我想在我的数据库中获取的值。
我可以从那里获取值吗?
编辑:
因此,根据 LoicTheAztec 的建议,获取我在 woocommerce_order_itemmeta table 中看到的数据值的正确方法是 $meta_key:
add_action( 'woocommerce_order_status_processing', 'my_function', 10, 1 );
function my_function( $order_id ) {
$order = wc_get_order( $order_id );
$items = $order->get_items();
foreach ( $items as $key => $item ) {
$storage = wc_get_order_item_meta( $key, 'addon-storage', true );
$tier = wc_get_order_item_meta( $key, 'subscription-type', true );
$anyMetaValue = wc_get_order_item_meta( $key, '$meta_key', true );
// Then I can create the variable I need in the the API url with:
$package = "$tier$storage";
更新: 您混淆了订单 post 元数据和订单项元数据,它们是非常不同的东西,位于不同的数据库表中。
此外,您的代码不完整,使用 get_post_meta()
和 $key
(这是项目 ID)将无法获得任何东西...
get_post_meta( $order_id, 'meta_key', true )
函数将查找订单 post 元数据(与订单项目无关)并使用订单 ID 作为参数。wc_get_order_item_meta( $item_id, 'meta_key', true )
函数将查找相关的订单项目元数据,并将使用项目 ID 作为参数(代码中的$key
)...
所以这个函数应该需要在 foreach 循环中使用,而不是在 foreach 循环中获取订单项目数据。
然后2种方式:
- 您应该在您的数据库中检查
wp_postmeta
和wp_woocommerce_order_itemmeta
表中的最后一个订单 ID(通过 phpMyAdmin),以查看数据位于何处…… - 或者您可以使用以下代码(仅用于测试)输出您的数据所在的订单项目原始数据。
此原始数据将输出在商店、存档和产品页面,仅可见对于已登录的管理员。您将需要在其中定义订单 ID。
这是这个测试函数
add_action( 'woocommerce_before_main_content', 'my_testing_order_function' );
function my_testing_order_function() {
// Define an Order ID
$order_id = 724;
// Only for admin user role
if( ! current_user_can('edit_products')) return;
$order = wc_get_order( $order_id ); // The order object
foreach ( $order->get_items() as $item_id => $item ) {
// Order item meta data Raw output
echo "<pre>ORDER ITEM META DATA - (Item_id $item_id):"; print_r($item->get_data()); echo'</pre>';
echo "<pre>ORDER ITEM META META DATA - (Item_id $item_id):"; print_r($item->get_meta_data()); echo'</pre>';
}
}
现在您拥有了定位和获取数据所需的一切。下面的代码通常应该适合您,允许您从您的变体中获取数据:
add_action( 'woocommerce_order_status_processing', 'my_function', 10, 1 );
function my_function( $order_id ) {
$order = wc_get_order( $order_id );
foreach ( $order->get_items() as $key => $item ) {
// get the data
$storage = wc_get_order_item_meta( $item_id, 'attribute_addon-storage', true );
$tier = wc_get_order_item_meta( $item_id, 'attribute_subscription-type', true );
}
}