I’am trying to use woocommerce_get_order_item_totals
filter hook to add some extra information into the order totals (on orders and email notifications).
add_filter( 'woocommerce_get_order_item_totals', 'display_email_topay', 10, 2 );
function display_email_topay( $total_rows, $order ) {
$total_rows['recurr_not'] = array(
'label' => __( '2nd Installment:', 'woocommerce' ),
'value' => 'DATA NEEDS TO GO HERE' // <===
);
return $total_rows;
}
I have access to $order
which contains the data I want to display but I have no idea how to get it.
Below is a var_dump
(formatted) of $order
variable:
AutomatticWooCommerceAdminOverridesOrder Object
(
[refunded_line_items:protected] =>
[status_transition:protected] =>
[data:protected] => Array
(
[parent_id] => 0
[status] => on-hold
[currency] => GBP
[version] => 4.5.2
[prices_include_tax] =>
[date_created] => WC_DateTime Object
(
[utc_offset:protected] => 0
October 4, 2020 => 2020-10-04 18:25:38.000000
[timezone_type] => 3
[timezone] => Europe/London
)
[date_modified] => WC_DateTime Object
(
[utc_offset:protected] => 0
October 4, 2020 => 2020-10-04 18:25:38.000000
[timezone_type] => 3
[timezone] => Europe/London
)
[discount_total] => 0
[discount_tax] => 0
[shipping_total] => 0.00
[shipping_tax] => 0
[cart_tax] => 0
[total] => 2.00
[total_tax] => 0
[customer_id] => 1
[order_key] => wc_order_FeOmJ7jXgWF4R
[billing] => Array
(
[first_name] => Jon
[last_name] => Conway
[company] =>
[address_1] =>
[address_2] =>
[city] => Frome
[state] =>
[postcode] =>
[country] =>
[email] => <**hidden**>
[phone] =>
)
[shipping] => Array
(
[first_name] =>
[last_name] =>
[company] =>
[address_1] =>
[address_2] =>
[city] =>
[state] =>
[postcode] =>
[country] =>
)
[payment_method] => bacs
[payment_method_title] => Direct bank transfer
[transaction_id] =>
[customer_ip_address] => 127.0.0.1
[customer_user_agent] => Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/14.0 Safari/605.1.15
[created_via] => checkout
[customer_note] =>
[date_completed] =>
[date_paid] =>
[cart_hash] => cb56eda51b920dc5fbffac1c03fe33b1
)
[items:protected] => Array
(
[line_items] => Array
(
[78] => WC_Order_Item_Product Object
(
[extra_data:protected] => Array
(
[product_id] => 0
[variation_id] => 0
[quantity] => 1
[tax_class] =>
[subtotal] => 0
[subtotal_tax] => 0
[total] => 0
[total_tax] => 0
[taxes] => Array
(
[subtotal] => Array
(
)
[total] => Array
(
)
)
)
[data:protected] => Array
(
[order_id] => 1433
[name] => Online concert
[product_id] => 746
[variation_id] => 0
[quantity] => 1
[tax_class] =>
[subtotal] => 2
[subtotal_tax] => 0
[total] => 2
[total_tax] => 0
[taxes] => Array
(
[total] => Array
(
)
[subtotal] => Array
(
)
)
)
[cache_group:protected] => order-items
[meta_type:protected] => order_item
[object_type:protected] => order_item
[id:protected] => 78
[changes:protected] => Array
(
)
[object_read:protected] => 1
[default_data:protected] => Array
(
[order_id] => 0
[name] =>
[product_id] => 0
[variation_id] => 0
[quantity] => 1
[tax_class] =>
[subtotal] => 0
[subtotal_tax] => 0
[total] => 0
[total_tax] => 0
[taxes] => Array
(
[subtotal] => Array
(
)
[total] => Array
(
)
)
)
[data_store:protected] => WC_Data_Store Object
(
[instance:WC_Data_Store:private] => WC_Order_Item_Product_Data_Store Object
(
[internal_meta_keys:protected] => Array
(
[0] => _order_id
[1] => _name
[2] => _product_id
[3] => _variation_id
[4] => _quantity
[5] => _tax_class
[6] => _subtotal
[7] => _subtotal_tax
[8] => _total
[9] => _total_tax
[10] => _taxes
[11] => _product_id
[12] => _variation_id
[13] => _qty
[14] => _tax_class
[15] => _line_subtotal
[16] => _line_subtotal_tax
[17] => _line_total
[18] => _line_tax
[19] => _line_tax_data
)
[meta_type:protected] => order_item
[object_id_field_for_meta:protected] => order_item_id
[must_exist_meta_keys:protected] => Array
(
)
)
[stores:WC_Data_Store:private] => Array
(
[coupon] => WC_Coupon_Data_Store_CPT
[customer] => WC_Customer_Data_Store
[customer-download] => WC_Customer_Download_Data_Store
[customer-download-log] => WC_Customer_Download_Log_Data_Store
[customer-session] => WC_Customer_Data_Store_Session
[order] => WC_Order_Data_Store_CPT
[order-refund] => WC_Order_Refund_Data_Store_CPT
[order-item] => WC_Order_Item_Data_Store
[order-item-coupon] => WC_Order_Item_Coupon_Data_Store
[order-item-fee] => WC_Order_Item_Fee_Data_Store
[order-item-product] => WC_Order_Item_Product_Data_Store
[order-item-shipping] => WC_Order_Item_Shipping_Data_Store
[order-item-tax] => WC_Order_Item_Tax_Data_Store
[payment-token] => WC_Payment_Token_Data_Store
[product] => MAGE_Product_Data_Store_CPT
[product-grouped] => WC_Product_Grouped_Data_Store_CPT
[product-variable] => WC_Product_Variable_Data_Store_CPT
[product-variation] => WC_Product_Variation_Data_Store_CPT
[shipping-zone] => WC_Shipping_Zone_Data_Store
[webhook] => WC_Webhook_Data_Store
[report-revenue-stats] => AutomatticWooCommerceAdminAPIReportsOrdersStatsDataStore
[report-orders] => AutomatticWooCommerceAdminAPIReportsOrdersDataStore
[report-orders-stats] => AutomatticWooCommerceAdminAPIReportsOrdersStatsDataStore
[report-products] => AutomatticWooCommerceAdminAPIReportsProductsDataStore
[report-variations] => AutomatticWooCommerceAdminAPIReportsVariationsDataStore
[report-products-stats] => AutomatticWooCommerceAdminAPIReportsProductsStatsDataStore
[report-categories] => AutomatticWooCommerceAdminAPIReportsCategoriesDataStore
[report-taxes] => AutomatticWooCommerceAdminAPIReportsTaxesDataStore
[report-taxes-stats] => AutomatticWooCommerceAdminAPIReportsTaxesStatsDataStore
[report-coupons] => AutomatticWooCommerceAdminAPIReportsCouponsDataStore
[report-coupons-stats] => AutomatticWooCommerceAdminAPIReportsCouponsStatsDataStore
[report-downloads] => AutomatticWooCommerceAdminAPIReportsDownloadsDataStore
[report-downloads-stats] => AutomatticWooCommerceAdminAPIReportsDownloadsStatsDataStore
[admin-note] => AutomatticWooCommerceAdminNotesDataStore
[report-customers] => AutomatticWooCommerceAdminAPIReportsCustomersDataStore
[report-customers-stats] => AutomatticWooCommerceAdminAPIReportsCustomersStatsDataStore
[report-stock-stats] => AutomatticWooCommerceAdminAPIReportsStockStatsDataStore
)
[current_class_name:WC_Data_Store:private] => WC_Order_Item_Product_Data_Store
[object_type:WC_Data_Store:private] => order-item-product
)
[meta_data:protected] => Array
(
[0] => WC_Meta_Data Object
(
[current_data:protected] => Array
(
[id] => 1496
[key] => Date
[value] => 2020-10-02 10:00:00
)
[data:protected] => Array
(
[id] => 1496
[key] => Date
[value] => 2020-10-02 10:00:00
)
)
[1] => WC_Meta_Data Object
(
[current_data:protected] => Array
(
[id] => 1497
[key] => Adult - £10.00 x 1 =
[value] => £10.00
)
[data:protected] => Array
(
[id] => 1497
[key] => Adult - £10.00 x 1 =
[value] => £10.00
)
)
[2] => WC_Meta_Data Object
(
[current_data:protected] => Array
(
[id] => 1498
[key] => Location
[value] => ,
)
[data:protected] => Array
(
[id] => 1498
[key] => Location
[value] => ,
)
)
[3] => WC_Meta_Data Object
(
[current_data:protected] => Array
(
[id] => 1499
[key] => _event_ticket_info
[value] => Array
(
[0] => Array
(
[ticket_name] => Adult
[ticket_price] => 10
[ticket_qty] => 1
[max_qty] =>
[event_date] => 2020-10-02 10:00:00
)
)
)
[data:protected] => Array
(
[id] => 1499
[key] => _event_ticket_info
[value] => Array
(
[0] => Array
(
[ticket_name] => Adult
[ticket_price] => 10
[ticket_qty] => 1
[max_qty] =>
[event_date] => 2020-10-02 10:00:00
)
)
)
)
[4] => WC_Meta_Data Object
(
[current_data:protected] => Array
(
[id] => 1500
[key] => _event_user_info
[value] => Array
(
)
)
[data:protected] => Array
(
[id] => 1500
[key] => _event_user_info
[value] => Array
(
)
)
)
[5] => WC_Meta_Data Object
(
[current_data:protected] => Array
(
[id] => 1501
[key] => event_id
[value] => 745
)
[data:protected] => Array
(
[id] => 1501
[key] => event_id
[value] => 745
)
)
[6] => WC_Meta_Data Object
(
[current_data:protected] => Array
(
[id] => 1503
[key] => _event_extra_service
[value] => Array
(
)
)
[data:protected] => Array
(
[id] => 1503
[key] => _event_extra_service
[value] => Array
(
)
)
)
)
)
)
... truncated
I want to access:
[id] => 1499
[key] => _event_ticket_info
[value] => Array
(
[0] => Array
(
[ticket_name] => Adult
[ticket_price] => 10
[ticket_qty] => 1
[max_qty] =>
[event_date] => 2020-10-02 10:00:00
)
)
To calculate and get the cost from ticket_price
by ticket_qty
.
Is this possible? Any idea on how to get this specific order item meta data?
2
Answers
The answer of LoicTheAztec helped me solve the problem. This custom meta data array requires a 2nd foreach loop as
$event_ticket_data
is a multi dimensional array.This is the working code:
To get order item custom meta data, first you need to loop through order items, to be able to get that complex custom protected meta data using
WC_Data
methodget_meta()
. Then you will be able to get and calculate your "2nd installment cost as follows:Code goes in functions.php file of your active child theme (or active theme). It should works.
Related: