【问题标题】:Get custom values of variations from order items in WooCommerce从 WooCommerce 中的订单项中获取自定义变量值
【发布时间】:2017-12-07 23:28:26
【问题描述】:

我正在尝试获取客户在结帐时从订单中选择的变体值(通过 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 和订阅类型?

我可以在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";

【问题讨论】:

    标签: php wordpress woocommerce metadata orders


    【解决方案1】:

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

    此外,您的代码不完整,使用 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 循环中使用,而不是在其中获取订单商品数据。

    然后是两种方式:

    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 );
        }
    }
    

    【讨论】:

    • 感谢您的澄清,我绝对混淆了这两者。不幸的是,当前的代码也没有让 API url 工作。数据在 woocommerce_order_itemmeta 下的数据库中显示为 addon-storage 和 subscription-type,因此我将这些行更改为: wc_get_order_item_meta( $key, addon-storage, true ); wc_get_order_item_meta( $key, 订阅类型, true );我得到了 url 变量: $package = '$tier$storage';但是 API 调用未成功进行。我是否至少正确地提取了数据?
    • 我成功了!!!我是个白痴,在 url 变量周围使用 ' 而不是 "。非常感谢您的帮助!!!!
    猜你喜欢
    • 2021-05-09
    • 1970-01-01
    • 1970-01-01
    • 2018-02-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-09-08
    • 2021-07-23
    相关资源
    最近更新 更多