Поддержка WooCommerce Как получить значение из WC_Meta_Data Object?

  • Решено alexandergood

    (@alexandergood)


    Очень прошу помощи, так как я новичек.
    Есть код

    
    add_action( 'woocommerce_thankyou', 'my_custom_tracking' );
    function my_custom_tracking( $order_id ) {
    $order = wc_get_order( $order_id );
    $line_items = $order->get_meta_data(); 
    echo '<pre>';
      print_r ($line_items);
      echo '</pre>';
    

    Получаю на выходе:

    
    Array
    (
        [0] => WC_Meta_Data Object
            (
                [current_data:protected] => Array
                    (
                        [id] => 11512
                        [key] => _billing_middle_name
                        [value] => Сергеевич
                    )
    
                [data:protected] => Array
                    (
                        [id] => 11512
                        [key] => _billing_middle_name
                        [value] => Сергеевич
                    )
    
            )
    
        [1] => WC_Meta_Data Object
            (
                [current_data:protected] => Array
                    (
                        [id] => 11513
                        [key] => is_vat_exempt
                        [value] => no
                    )
    
                [data:protected] => Array
                    (
                        [id] => 11513
                        [key] => is_vat_exempt
                        [value] => no
                    )
    
            )
    
        [2] => WC_Meta_Data Object
            (
                [current_data:protected] => Array
                    (
                        [id] => 11514
                        [key] => billing_middle_name
                        [value] => Сергеевич
                    )
    
                [data:protected] => Array
                    (
                        [id] => 11514
                        [key] => billing_middle_name
                        [value] => Сергеевич
                    )
    
            )
    
    )
    
    

    Как из этого массива получить значение Сергеевич ?
    Уже все перерыл, ничего не получается.
    Нашел в поиске:

    
    	public function __get( $key ) {
    		if ( array_key_exists( $key, $this->current_data ) ) {
    			return $this->current_data[ $key ];
    		}
    		return null;
    	}
    

    Но как это применить не понимаю. Вроде уже по разному подставлял.

    • Тема изменена 2 мес. назад пользователем  Yui. Причина: в раздел woocommerce
Просмотр 6 ответов — с 1 по 6 (всего 6)
  • Вот еще такой код нашел. А как его применить не понимаю. Уже по разному пробовал, но не хватает знаний. Помогите пожалуйста.

    public function get_changes() {
    		$changes = array();
    		foreach ( $this->current_data as $id => $value ) {
    			if ( ! array_key_exists( $id, $this->data ) || $value !== $this->data[ $id ] ) {
    				$changes[ $id ] = $value;
    			}
    		}
    		return $changes;
    	}
    
    
    Модератор Юрий

    (@yube)

    А если вместо $order->get_meta_data(); сделать $order->get_data();, нужное поле будет в массиве?

    Да
    Сокращенно такие значения выводит :

    
    Array
    (
        [shipping] => Array
            (
                [first_name] => Алекс
                [last_name] => Петров
                [company] => 
                [address_1] => 
                [address_2] => 
                [city] => 
                [state] => 
                [postcode] => 
                [country] => 
            )
    
        [payment_method] => cod
        [payment_method_title] => Оплата при доставке
        [transaction_id] => 
        [customer_ip_address] => 
        [customer_user_agent] => Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/76.0.3809.100 Safari/537.36
        [created_via] => checkout
        [customer_note] => 
        [date_completed] => 
        [date_paid] => 
        [cart_hash] => 245b3628e54f60a9e5b097d393982f59
        [number] => 1084
        [meta_data] => Array
            (
                [0] => WC_Meta_Data Object
                    (
                        [current_data:protected] => Array
                            (
                                [id] => 11512
                                [key] => _billing_middle_name
                                [value] => Сергеевич
                            )
    
                        [data:protected] => Array
                            (
                                [id] => 11512
                                [key] => _billing_middle_name
                                [value] => Сергеевич
                            )
    
                    )
    
                [1] => WC_Meta_Data Object
                    (
                        [current_data:protected] => Array
                            (
                                [id] => 11513
                                [key] => is_vat_exempt
                                [value] => no
                            )
    
                        [data:protected] => Array
                            (
                                [id] => 11513
                                [key] => is_vat_exempt
                                [value] => no
                            )
    
                    )
    
                [2] => WC_Meta_Data Object
                    (
                        [current_data:protected] => Array
                            (
                                [id] => 11514
                                [key] => billing_middle_name
                                [value] => Сергеевич
                            )
    
                        [data:protected] => Array
                            (
                                [id] => 11514
                                [key] => billing_middle_name
                                [value] => Сергеевич
                            )
    
                    )
    
            )
    Модератор Sergey Biryukov

    (@sergeybiryukov)

    Live and Learn

    Как из этого массива получить значение Сергеевич ?

    Попробуйте так:

    
    foreach ( $line_items as $item ) {
    	echo $item->value;
    }
    

    Sergey Biryukov
    Большое спасибо! Все получилось, всего вам доброго!)

    Правда, я сделал вот так, может немного по колхозному и можно как то проще, но получилось то, что нужно)

    
    add_action( 'woocommerce_thankyou', 'my_custom_tracking' );
    function my_custom_tracking( $order_id ) {
    $order = wc_get_order( $order_id );
    $line_items = $order->get_meta_data();
    $line_items2 = $line_items['0'];
    echo $line_items2->value;
    
    
Просмотр 6 ответов — с 1 по 6 (всего 6)