gpt4 book ai didi

php - 按类别(术语)过滤 Woocommerce $order 项目

转载 作者:行者123 更新时间:2023-12-04 08:14:02 25 4
gpt4 key购买 nike

几天来我一直在为这个问题绕圈子,它开始让我有点生气。我知道我有所有的部分,但我似乎无法将它们组合在一起。
我有一个 Woocommerce 订单的打印模板,它以正常方式列出产品,它们存储在数组中的顺序又是它们放在篮子中的顺序等。但是,我们希望它们按类别(术语)分组.因此,这意味着首先列出 term_id 17 下的所有项目,然后列出所有 term_id 18 等。
理想情况下,这将是一个自动过程,其中代码读取所有使用中的条款,然后一次遍历它们并输出篮子中该条款的任何产品。但我离那个阶段还很远。
到目前为止,我使用这段代码取得了部分成功:

foreach ($order->get_items() as $item) {

$product_id = $item['product_id'];

$meta = $item['item_meta'];
$meta = array_filter($meta, function ($key) {
return !in_array($key, Order::getHiddenKeys());
}, ARRAY_FILTER_USE_KEY);

$terms = get_the_terms ( $product_id, 'product_cat' );

foreach ( $terms as $term ) {
$cat_id = $term->term_id;

if($cat_id === 18) {
var_dump($item['name']);
}
}
这将成功转储在 term_id 18 中分类的订单项目。但是,如果我像这样修改 IF 语句:
if($cat_id === 18) {
var_dump($item['name']);
} elseif($cat_id === 17) {
var_dump($item['name']);
}
我原以为它会输出 term_id 18 个项目,然后是 term_id 17 个 他们。不幸的是,它只是按默认顺序显示数组,即 17,然后是 18,尽管代码是以这种方式布局的。
我认为它可能以这种方式输出,因为它没有修改原始数组,只是在不同的点屏蔽了它的一部分。所以,我一直在试验 array_filter 函数,但我似乎无法得到正确的逻辑。我很不好意思发布这个尝试,因为我知道这很糟糕,但这是我尝试使用 array_filter 的程度:
function test ($var) {
foreach ( $terms as $term ) {
$cat_id = $term->term_id;

if($cat_id === 18) {
print_r($item['name']);
}
}
return $var;
}

foreach ($order->get_items() as $item) {

$product_id = $item['product_id'];

$meta = $item['item_meta'];
$meta = array_filter($meta, function ($key) {
return !in_array($key, Order::getHiddenKeys());
}, ARRAY_FILTER_USE_KEY);

$terms = get_the_terms ( $product_id, 'product_cat' );

print_r(array_filter($terms, "test"));
我知道这是大错特错,但我就是无法理解它。我对基本的 PHP 和 Wordpress PHP 使用正常,但 Woocommerce 要复杂得多!我真的很感激这方面的任何帮助。
回顾一下,我希望产品按类别顺序打印/回显/等(如果有人觉得 super 慷慨,则自动执行,哈哈)。我真的不介意这是如何实现的,只要它显然是安全可靠的。
对长篇文章深表歉意,并提前致谢。

最佳答案

在我看来,您正在循环订单,但您并没有循环您想要订购它们的类别。
我没有运行过这段代码,但该模式应该按照我的想法去做。

// Group items into Categories - If you have a custom order you wish, pre-populate this array, or you can sort after
$categories = [];
foreach ($order->get_items() as $item) {
$product_id = $item['product_id'];
$terms = get_the_terms($product_id, 'product_cat');
$cat_id = $terms[0]->term_id;
$categories[$cat_id][] = $item;
}

// Loop Categories
foreach($categories as $category => $items){
echo sprintf("<h1>%s</h1>", $category);
//Loop Items in Category
foreach ($items as $item) {
print_r($item['name']);
}
}

关于php - 按类别(术语)过滤 Woocommerce $order 项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65800587/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com