Я пытаюсь отправить элементы корзины 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;