Ik heb een woocommerce webshop gemaakt waarmee verschillende soorten ontbijten worden verkocht.
Alle ontbijten zijn opgevoerd als variabel product en bevatten variaties zodat de klant kan kiezen voor hoeveel personen het ontbijt bedoelt is. De keuze om dit op deze manier te doen heeft te maken met de meta data die voor iedere variatie verschillend is.
De indeling in woocommerce ziet er als volgt uit:
Ontbijt x (variabel product)
Bij orders met meer dan 1 product wordt de meta data van het eerste product ook toegevoegd aan het tweede product. Ik kan helaas de fout niet direct vinden.
De gebruikte hook staat in de lijst van deprecated action hooks), maar lijkt wel nog te werken.
In onderstaande screenshot zie je de meta data die in de backend zichtbaar is zodra producten zijn toegevoegd aan een order.

Wanneer ik de functie die ik aanroep uitvoer vanuit een custom php pagina en de output van $article_key en $article_value print, zie ik dat de order items 1 voor 1 worden opgehaald zoals het hoort en dat de meta data gewoon overeenkomt met wat ik verwacht te zien. Om de één of andere reden lijkt of woocommerce hier niet goed mee om te gaan of doe ik iets verkeerd in mijn code.
Ik heb al gezocht op diverse fora. Waar men probeert om hetzelfde te bereiken, meta data toevoegen aan een order item, doet men dit op dezelfde manier met de volgende functie:
Zou er iets mis gaan in mijn for loops?
Alle ontbijten zijn opgevoerd als variabel product en bevatten variaties zodat de klant kan kiezen voor hoeveel personen het ontbijt bedoelt is. De keuze om dit op deze manier te doen heeft te maken met de meta data die voor iedere variatie verschillend is.
De indeling in woocommerce ziet er als volgt uit:
Ontbijt x (variabel product)
- 1 persoon (variatie met meta data)
- 2 personen
- 3 personen
- ...
Bij orders met meer dan 1 product wordt de meta data van het eerste product ook toegevoegd aan het tweede product. Ik kan helaas de fout niet direct vinden.
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
| function oc_line_item_metadata( $item_id, $item, $order_id ) { // Here you have the item, his id, and the order's id // You can get the order, for example $order = new WC_Order( $order_id ); $items = $order->get_items(); foreach ($items as $item) { $variation_id = $item['variation_id']; $product_variation = new WC_Product_Variation( $variation_id ); $meta_data = $product_variation->get_meta_data(); for ($i=0; $i < count($meta_data); $i++) { $article = ($meta_data[$i]->get_data()); $article_id = $article['id']; $article_key = $article['key']; $article_value = $article['value']; wc_add_order_item_meta( $item_id, $article_key, $article_value ); } } } add_action( 'woocommerce_new_order_item', 'oc_line_item_metadata', 1, 3 ); |
De gebruikte hook staat in de lijst van deprecated action hooks), maar lijkt wel nog te werken.
In onderstaande screenshot zie je de meta data die in de backend zichtbaar is zodra producten zijn toegevoegd aan een order.

Wanneer ik de functie die ik aanroep uitvoer vanuit een custom php pagina en de output van $article_key en $article_value print, zie ik dat de order items 1 voor 1 worden opgehaald zoals het hoort en dat de meta data gewoon overeenkomt met wat ik verwacht te zien. Om de één of andere reden lijkt of woocommerce hier niet goed mee om te gaan of doe ik iets verkeerd in mijn code.
Ik heb al gezocht op diverse fora. Waar men probeert om hetzelfde te bereiken, meta data toevoegen aan een order item, doet men dit op dezelfde manier met de volgende functie:
PHP:
1
| wc_add_order_item_meta( $item_id, $article_key, $article_value ); |
Zou er iets mis gaan in mijn for loops?
[ Voor 1% gewijzigd door ddkiller0900 op 28-12-2017 21:38 . Reden: Screenshot op juiste plaats gezet ]