我试图展示WooCommerce的每一个关键点和价值get_formatted_meta_data
订购元详细信息。这是我生成数组的代码:
$order = new WC_Order( $order_id );
foreach ( $order->get_items() as $item_id => $item ) {
$item_data = $item->get_data();
$item_meta_data = $item->get_meta_data();
$formatted_meta_data = $item->get_formatted_meta_data( \' \', true );
$array = json_decode(json_encode($formatted_meta_data), true);
$arrayx = array_values($array);
foreach($arrayx as $value) {
$result[]=array($value["display_key"], wp_strip_all_tags($value["display_value"]));
foreach ($result as $key => $value) {
$var_label = $key;
$var_value = $value;
}
}
}
这是我使用上述函数打印的数组:
Array
(
[0] => Array
(
[0] => Color
[1] => Black
)
[1] => Array
(
[0] => Size
[1] => M
)
[2] => Array
(
[0] => Gift
[1] => Tes 2
)
)
现在,我想获取数组中的每个值,并想如下所示显示它们(显示在新行中):
Color: Black
Size: M
Gift: Tes 2
etc
etc
etc (dynamically inserted by WooCommerce if any or added by other plugins)
这是我已经尝试过的:
$order = new WC_Order( $order_id );
foreach ( $order->get_items() as $item_id => $item ) {
$product_id = $item->get_product_id();
$quantity = $item->get_quantity();
$product_name = $item->get_name();
$item_data = $item->get_data();
$item_meta_data = $item->get_meta_data();
$formatted_meta_data = $item->get_formatted_meta_data( \' \', true );
$array = json_decode(json_encode($formatted_meta_data), true);
$arrayx = array_values($array);
$count=0;
foreach($arrayx as $value) {
$result[]=array($value["display_key"], wp_strip_all_tags($value["display_value"]));
foreach ($result as $key => $value) {
$var_label = $key;
$var_value = $value;
$metadata[\'count\'] = "\\r\\n".$var_label[0].": ".$var_value[0]."";
$count++;
}
}
$formatted_product_name = wp_strip_all_tags(" *".$product_name."*");
$product_plus_meta = "*".$formatted_product_name."* ".$metadata[\'count\']."";
$quantity = $item->get_quantity();
$output_content.= urlencode("".$quantity."x - ".$product_plus_meta."\\r\\n");
}
}
$output_content.="".$price."";
使用上面的代码,我只能从数组中提取一个值和键(只有数组中最新的一个),这是
Gift => Tes 2
.输出如下:
1x - **Sample Product**
Gift: Tes 2
Price: $12.00
而不是这样:
1x - **Sample Product**
Color: Black
Size: M
Gift: Tes 2
Price: $12.00
如何获得每个已存在数组键和值的完整列表,并像上面的示例那样在新行中显示所有这些键和值?
提前非常感谢您。任何帮助都将不胜感激。
SO网友:Djilan MOUHOUS
如果你可以打印你的数组,为什么你不能?你只需在这个数组上做一个循环,然后将每一行添加到你的output\\u内容中。看起来像这样
<?php
$myArray = Array
(
0 => Array
(
0 => "Color",
1 => "Black",
),
1 => Array
(
0 => "Size",
1 => "M",
),
2 => Array
(
0 => "Gift",
1 => "Tes 2"
),
);
$output_content = "";
foreach($myArray as $key){
$output_content .= $key[0]." : ".$key[1]."\\r";
}
echo $output_content;
?>
该代码打印:
Color : Black
Size : M
Gift : Tes 2
SO网友:Walter P.
通过使用@Djilan\'在回答这个问题时,我成功地获取了相应的数据,并调整了数据的显示方式,从而避免了在下一项中出现复合数组。
我错过了这部分(回答是@Djilan), 这确实是正确的方式:
$product_meta = "";
foreach($myArray as $key){
$product_meta .= $key[0]." : ".$key[1]."\\r";
}
echo $product_meta ;
只需调整代码,这是最终代码:
...
...
$order = new WC_Order( $order_id );
foreach ( $order->get_items() as $item_id => $item ) {
$product_id = $item->get_product_id(); //Get the product ID
$quantity = $item->get_quantity(); //Get the product QTY
$product_name = $item->get_name(); //Get the product NAME
$quantity = $item->get_quantity();
$output_content .= urlencode("".$quantity."x - *".$product_name."*\\r\\n");
// get order item data
$item_data = $item->get_data();
// get order item meta data
$item_meta_data = $item->get_meta_data();
// get only All item meta data
$formatted_meta_data = $item->get_formatted_meta_data( \'_\', true );
$array = json_decode(json_encode($formatted_meta_data), true);
$arrayx = array_values($array);
$arrayxxx = array_merge($array);
$result = array();
foreach( (array) $arrayxxx as $value) {
$product_meta = "";
$result[]=array($value["display_key"], wp_strip_all_tags($value["display_value"]));
foreach ($result as $key) {
$result = array();
$product_meta .= " - ".$key[0].": ".$key[1]."\\r\\n";
$output_content.= urlencode("".$product_meta."");
}
}
}
$output_content.="".$format_subtotal_price."";
echo $output_content;
最终输出如下:
1x - Sample Product #1 - Black, M
- Color: Black
- Size: M
1x - Sample Product #2
- Color: Blue
- Size: XL
- Gift: Tes 3
$1,173.00