Получите пользовательские значения отклонений от элементов заказа в 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";
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 способа:
- Вы должны проверить в своей базе данных идентификатор последнего заказа, который у вас есть (через phpMyAdmin) в таблицах
wp_postmeta
иwp_woocommerce_order_itemmeta
, чтобы увидеть, где находятся данные... - Или вы можете использовать следующий код (только для тестирования), который будет выводить элементы заказа в исходном виде данные, где находятся ваши данные.
Эти необработанные данные будут выведены в магазине, архив и страницы продуктов , видны только для зарегистрированных администраторов. Вам понадобится , чтобы определить в нем идентификатор заказа.
Вот эта функция тестирования
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 );
}
}