johnny538
johnny538

Reputation: 625

How to get order meta from array in WooCommerce 3+

I need to create a function that returns a value to one of my plugins WooCommerce Dymo Print. It requires $order_id, $label and $object. The $object is the field I need to return the value to.

I created the following code:

add_filter('wc_dymo_order_function', 'wpf_dymo_order_output',10,3);
function wpf_dymo_order_output( $order_id, $label, $object ) {

    if($label=='shipping' && $object='DEL_DATE') {

        //Get order from order ID
        $order=wc_get_order($order_id);
        $del_date='';

        $order_data = $order->get_data(); // The Order data
        $order_del_date = $order_data['delivery_date'];

        //Return a list (string) of all product inside this order, make sure it's well formatted before printing.
        return $order_del_date;
    } else {
        //Return order_id if is not correct label and object
        return '';
    }
}

It doesn't seem to work however and I think it's because the delivery_date is nested in an array and I'm not fetching it properly.

The meta data should look something like this.

Array
(
[31040763] => Array
    (
        [shipment_id] => 31040763
        [tracktrace] => 3SMYPA000000000
        [shipment] => Array
            (
                [barcode] => 3SMYPA000000000
                [pickup] => Array
                    (
                        [postal_code] => XXXAA
                        [street] => STRAAT
                        [city] => STAD
                        [number] => XX
                        [location_name] => Gamma
                    )
                [options] => Array
                    (
                        [signature] => 0
                        [delivery_date] => 2018-03-10 00:00:00
                    )
            )
    )
)

Where the delivery_date is what I need to return

Upvotes: 13

Views: 58268

Answers (2)

coder618
coder618

Reputation: 1004

You can use get_post_meta to get the meta value.

get_post_meta( $order_id, 'your_meta_key', true );

Simple but effective.

Upvotes: 0

johnny538
johnny538

Reputation: 625

Solved it with the following code:

    $order=wc_get_order($order_id);

    $order_data = $order->get_meta('_shipments');
    $final_array = array_values($order_data);
    $order_del_date = $final_array[0]['options']['delivery_date'];

    return $order_del_date;

Upvotes: 34

Related Questions