gpt4 book ai didi

php - 从 WooCommerce 中的订单项目中获取变体的自定义值

转载 作者:搜寻专家 更新时间:2023-10-31 21:49:05 26 4
gpt4 key购买 nike

我正在尝试获取客户在结帐时从订单中选择的变量值(通过 ID 或其他方式)以映射到用于构建 API URL 的变量 $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 和 subscription-type?

我可以在 woocommerce_order_itemmeta 表中看到我想在我的数据库中获取的值。

我可以从那里获取值吗?

编辑:

根据LoicTheAztec的建议,获取我在 woocommerce_order_itemmeta 表中作为 $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";

最佳答案

更新:您混淆了订单发布元数据和订单项目元数据,它们是非常不同的东西并且位于不同的数据库表中。

此外,您的代码不完整,使用 get_post_meta()$key(这是项目 ID)将无法获得任何信息...

  • get_post_meta( $order_id, 'meta_key', true ) 函数将查找订单发布元数据(与订单项目无关)并使用订单 ID 作为参数。
  • wc_get_order_item_meta( $item_id, 'meta_key', true ) 函数将查找相关的订单项目元数据,并将使用项目 ID 作为参数($key在你的代码中)...
    所以这个函数应该需要在 foreach 循环中使用,而不是在 foreach 循环中获取订单项目数据。

然后2种方式:

  1. 您应该在数据库中检查您在 wp_postmetawp_woocommerce_order_itemmeta 表中的最后一个订单 ID(通过 phpMyAdmin),以查看数据位于何处……<
  2. 或者您可以使用以下代码(仅用于测试)输出您的数据所在的订单商品原始数据。
    此原始数据将输出到商店存档产品页面,只有登录管理员可见。您将需要在其中定义订单 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 );
}
}

关于php - 从 WooCommerce 中的订单项目中获取变体的自定义值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47705514/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com