WordPress PHP Добавить объект в массив - PullRequest
0 голосов
/ 27 сентября 2019

Я разрабатываю плагин, который отправляет данные заказа WooCommerce в REST API с использованием заголовка Basic Authentication.

Что касается строк заказа WooCommerce, документация API говорит мне добавить каждую строку заказа в видеОбъект для массива 'lines'.Я изо всех сил пытаюсь установить это.

См. Следующий код для получения дополнительной информации:

$items = array();

foreach ( $order->get_items() as $item_id => $item_data ) {

  $product = $item_data->get_product();
  $product_name = $product->get_name();

  $item_quantity = $item_data->get_quantity();
  $item_total = $item_data->get_total();

  $items[] = array(
     'unit' => $product_name,
     'quantity' => $item_quantity,
     'price' => $item_total
  );

}

$response = wp_remote_post( $url, array(
  'method' => 'POST',
  'timeout' => 20,
  'headers' => array(
     'username' => '***',
     'password' => '***',
     'company' => '***'
   ),
   'body' => array(
     'employee' => 1,
     'debtor' => 1,
     'deliveryMethod' => 1,
     'deliveryAddress' => array(
       'address' => $order->get_billing_address_1(),
       'postcode' => $order->get_billing_postcode(),
       'city' => $order->get_billing_city(),
       'country' => 'NL'
     ),
     'lines' => array(
       'unit' => $items['unit'],
       'quantity' => $items['quantity'],
       'price' => $items['price']
     )
   )
) );

Журнал отладки WordPress говорит мне, что он не может найти индекс 'unit',«количество» и «цена».

Ответы [ 2 ]

0 голосов
/ 27 сентября 2019

Ваш массив выглядит нормально, за исключением нескольких вещей, отличных от документов.Сначала используйте «line_items» вместо «lines».

Теперь у каждого заказа может быть один или несколько продуктов, поэтому вам необходимо связать «line_items» с продуктами.И вы пытаетесь получить атрибуты, которые связаны с этим продуктом.Вы получили ошибку, потому что вы не связали количество и цену с product_id согласно документам.

'line_items' => [
    [
        'product_id' => 123,
        'quantity' => 2,
        'price' => 100
    ]
]

Единица - это нечто другое.Единицу можно получить из мета.Я полагаю, вы ссылаетесь на единицу измерения.Для получения мета вы можете использовать его как

'line_items' => [
    [
        'product_id' => 123,
        'quantity' => 2,
        'price' => 100,
        'meta' => [
            "key" => "dimension_unit",
            "label" => "Dimension Unit",
            "value" => "in"
        ]
    ]
]

Здесь я использовал каждый пример данных.Вы можете назначить данные о своем желании по своему усмотрению.

Надеюсь, это поможет вам и вашему API теперь работать правильно!

0 голосов
/ 27 сентября 2019

Таким образом, ваша переменная массива будет выглядеть примерно так (исходя из вашего примера кода):

// print_r($items)
Array(
    [0] => ['unit' => '', 'quantity' => '', 'price' = ''],
    [1] => ['unit' => '', 'quantity' => '', 'price' = ''],
    [2] => ['unit' => '', 'quantity' => '', 'price' = ''],
    // etc...
)

В пустых строках будут только ваши данные.

Вы добавляетемассив в массив, так что если вы хотите проанализировать массив $items, вы можете использовать foreach:

foreach($items as $item) {
    print_r($item);
}

Этот вывод должен быть похож на:

Array
(
    [unit] => '',
    [quantity] => '',
    [price] => ''
)

Ноон будет зацикливаться на каждом массиве в $items, поэтому в моем случае, используя приведенный выше код, он будет print_r() три раза.

Еще один способ его визуализации:

print $items[0]['unit'];
print $items[1]['unit'];
print $items[2]['unit'];

Каждыймассив индексируется (если вы не определили ключ), поэтому [0] будет первым массивом в массиве $items, тогда вы ссылаетесь на ключ ['unit'].

Вот ссылка на что-то, что можетпоможет вам понять больше: https://www.geeksforgeeks.org/multidimensional-arrays-in-php/

Надеюсь, это поможет!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...