Пользовательские метаданные, добавленные в Woocommerce, не отображаются в мета-позиции товара - PullRequest
0 голосов
/ 29 августа 2018

У меня есть один фрагмент пользовательских метаданных для заказа WooCommerce, и теперь я хочу отобразить их на странице благодарности после оформления заказа, однако данные недоступны. Данные сохранены и доступны в админке, я просто не могу получить к ним доступ.

function custom_order_item_meta( $item_id, $values ) {

    if ( ! empty( $values['custom_option'] ) ) {
        woocommerce_add_order_item_meta( $item_id, 'custom_option', $values['custom_option'] );           
    }
}
add_action( 'woocommerce_add_order_item_meta', 'custom_order_item_meta', 10, 2 );

Но когда я выбрасываю wc_get_order, мои метаданные не появляются.

Я использую;

woocommerce_add_order_item_meta() чтобы сохранить данные, но выгрузка var_dump(wc_get_order( $order->id )); также не показывает мое собственное мета-поле

есть ли еще один хук, который я должен использовать для доступа к этим данным?

1 Ответ

0 голосов
/ 30 августа 2018

Данные, которые вы ищете, это не метаданные заказа, а заказ элемент метаданные и расположены в wp_woocommerce_order_itemmeta таблице базы данных (см. Ниже, как получить доступ к этим данным) .

Начиная с woocommerce 3, гораздо лучший хук заменяет старый woocommerce_add_order_item_meta хук.

Также meta_key должно быть лучше читаемым названием этикетки , так как эти данные будут отображаться под каждым элементом заказа .

код:

add_action( 'woocommerce_checkout_create_order_line_item', 'custom_order_item_meta', 20, 4 );
function custom_order_item_meta( $item, $cart_item_key, $values, $order ) {
    if ( isset( $values['custom_option'] ) ) {
        $item->update_meta_data( __('Custom option', 'woocommerce'), $values['custom_option'] );          
    }
}

На странице "Заказ получен" (спасибо) вы получите что-то вроде:

enter image description here

Это также будет отображаться в бэкэнде и почтовых уведомлениях.

Для доступа к этим данным позиции заказа вам необходимо получить элементы из объекта заказа в цикле foreach:

foreach( $order->get_items() as $item_id => $item ){
    $custom_data = $item->get_meta( 'Custom option' );
}

Чтобы получить первый элемент заказа (избегая цикла foreach), вы будете использовать:

$items       = $order->get_items(); // Order items
$item        = reset($items); // The first Order item
$custom_data = $item->get_meta( 'Custom option' ); // Your custom meta data

Похожие: Заменить хук woocommerce_add_order_item_meta в Woocommerce 3.4

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...