Получайте ВСЕ имена позиций корзины woocommerce

Я пытаюсь отправить элементы корзины woocommerce стороннему инструменту. Мне нужно имя элемента.

$items = $woocommerce->cart->get_cart(); foreach($items as $item => $values) { $_product = $values['data']->post; echo $_product->post_title; } 

Я могу получить имена позиций корзины. Но я не могу сделать это так по следующей причине. Мне нужно сохранить имя корзины в массиве, который будет отправлен на сторонний инструмент, о котором я упоминал ранее.

 $sales_payload = array( 'organization_id' => $organization_id, 'contact_id' => $contact_id, 'status' => 'Open', 'subject' => I WANT THIS TO BE ALL THE PRODUCT HNAMES, 'start_date' => date("Ymd"), // set start date on today 'expected_closing_date' => date("Ymd",strtotime(date("Ymd")."+ 14 days")), // set expected closing date 2 weeks from now 'chance_to_score' => '10%', 'expected_revenue' => 0, //set the expected revenue 'note' => $_POST['order_comments'], 'progress' => array( 'id'=>'salesprogress:200a53bf6d2bbbfe' //fill a valid salesprogress id to set proper sales progress ), "custom_fields" => [["actief_in_duitsland"=>$value]], ); In my array there is an array key named "subject". I want all the cart item names stored here. 

Так, например, если я заказал два элемента, один из которых назвал test 1, а другой – тестом 2, я бы хотел, чтобы эти элементы были сохранены в главном массиве объектов.

Я не могу использовать цикл foreach внутри массива, и я не могу его отбросить (я думаю)

Су, в основном, мой вопрос: есть ли способ сделать это:

 $items = $woocommerce->cart->get_cart(); foreach($items as $item => $values) { $_product = $values['data']->post; echo $_product->post_title; } 

Внутри массива используется значение массива, поэтому значение возвращает все имена элементов корзины.

Мои попытки:

 global $woocommerce; $items = $woocommerce->cart->get_cart(); foreach($items as $item => $values) { $_product = $values['data']->post; } 

то я называю это так в массиве

 'subject' =>$_product->post_title 

Это работало, но только для одного продукта, поэтому, если у меня есть 2 продукта, он возвращает мне только один.

 $sales_payload = array( 'organization_id' => $organization_id, 'contact_id' => $contact_id, 'status' => 'Open', 'subject' => getproductList(), //<<<<<Method called here 'start_date' => date("Ymd"), // set start date on today 'expected_closing_date' => date("Ymd",strtotime(date("Ymd")."+ 14 days")), // set expected closing date 2 weeks from now 'chance_to_score' => '10%', 'expected_revenue' => 0, //set the expected revenue 'note' => $_POST['order_comments'], 'progress' => array( 'id'=>'salesprogress:200a53bf6d2bbbfe' //fill a valid salesprogress id to set proper sales progress ), "custom_fields" => [["actief_in_duitsland"=>$value]], ); 

Теперь создайте метод, который возвращает список продукта корзины.

 function getproductList() { global $woocommerce; $items = $woocommerce->cart->get_cart(); $product_names=array(); foreach($items as $item => $values) { $_product = $values['data']->post; $product_names[]=$_product->post_title; } /* // if you want string then use $allproductname=implode("",$product_names); return $allproductname; */ return $product_names; } 

Таким образом, вам нужен массив имен элементов корзины, которые вы отправите стороннему инструменту. Таким образом, код будет очень компактным:

 // initializing the array: $items_names = array(); // iterating through each items of cart foreach(WC()->cart->get_cart() as $cart_item) $items_names[] = $cart_item['data']->post->post_title; 

Теперь вы получите массив в переменной $items_names которую вы можете использовать в своем API

Этот код проверен и работает.

Чтобы отобразить строку разделенных комой значений из массива, вы можете использовать функцию implode() следующим образом:

  $string_cart_item_names = implode( ', ', $items_names ); 

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

Поскольку метод @Vasim является правильным, я хочу только указать, что вам нужно двойное скобки после $product_name чтобы добавить все элементы в массив, иначе будет добавлен только последний элемент.

  $product_name[]= $_product->post_title; 

Если вам нужна строка вместо массива

  $product_name .= $_product->post_title;