13

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

LoicTheAztec
  • 229,944
  • 23
  • 356
  • 399
johnny538
  • 565
  • 1
  • 5
  • 11
  • 1
    in your if statement, `$object = 'DEL_DATE'` should need to be instead `$object == 'DEL_DATE'` *(with a `==`)*, or not? – LoicTheAztec Mar 09 '18 at 12:49

2 Answers2

28

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;
johnny538
  • 565
  • 1
  • 5
  • 11
0

You can use get_post_meta to get the meta value.

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

Simple but effective.

coder618
  • 848
  • 1
  • 9
  • 12