Получите пользовательские значения отклонений от элементов заказа в WooCommerce


Я пытаюсь получить значения вариаций, выбранные клиентом при оформлении заказа (по идентификатору или иным образом), для сопоставления с переменными $storage и $tier, которые используются для создания URL-адреса API.

Я пробовал различные методы, чтобы получить данные о переменных, но URL-адрес API не работает, что наводит меня на мысль, что у меня нет значений с отступами в моих переменных.

Мой текущий код выглядит следующим образом (извлечение):

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";
Author: Matt B, 2017-12-08

1 answers

Обновлено: Вы путаете метаданные публикации заказа и метаданные элемента заказа, которые очень разные и расположены в разных таблицах базы данных.

Кроме того, ваш код неполон, и вы ничего не получите, используя get_post_meta() с помощью $key (который является идентификатором элемента)...

  • Функция get_post_meta( $order_id, 'meta_key', true ) будет искать метаданные записи заказа (не связанные с элементами заказа) и использовать идентификатор заказа в качестве аргумента.
  • Функция wc_get_order_item_meta( $item_id, 'meta_key', true ) будет искать порядок метаданные элемента реализованы и будут использовать идентификатор элемента в качестве аргумента ($key в вашем коде)...
    Таким образом, эту функцию необходимо использовать в цикле foreach, где вместо этого вы получаете данные элементов заказа.

Затем 2 способа:

  1. Вы должны проверить в своей базе данных идентификатор последнего заказа, который у вас есть (через phpMyAdmin) в таблицах wp_postmeta и wp_woocommerce_order_itemmeta, чтобы увидеть, где находятся данные...
  2. Или вы можете использовать следующий код (только для тестирования), который будет выводить элементы заказа в исходном виде данные, где находятся ваши данные.
    Эти необработанные данные будут выведены в магазине, архив и страницы продуктов , видны только для зарегистрированных администраторов. Вам понадобится , чтобы определить в нем идентификатор заказа.

Вот эта функция тестирования

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 );
    }
}
 0
Author: LoicTheAztec, 2017-12-08 00:43:59