在 WordPress 页面上,我想显示所有产品类别,然后显示该类别中产品的总价值,然后显示一行总计。例如:
类别 | # 个产品 | 总价值 |
---|---|---|
邮票 | 100 | 2099,- |
硬币 | 400 | 2399,- |
卡片 | 50 | 399,- |
总计 | 550 | 4897,- |
所以基本上,我需要为每个类别创建一个循环,然后将这些产品的每个常规价格相加。最后,我需要将所有这些价格相加以获得总数。
伪代码/(不起作用):
$categories = get_categories();
foreach($categories as $category) {
echo <a href="' . get_category_link($category->term_id) . '">' . $category->name . '</a>>';
}
$totals_per_category = array();
foreach($categories as $key => $category) {
foreach($category as $id => $value) {
$totals_per_category[$id] += $value;
}
}
Echo $value;
感谢您提供有关如何完成这项工作的任何建议。
要获取所有类别,您可以使用
get_terms
函数,如下所示:
$categories = get_terms(
array(
'taxonomy' => 'product_cat',
'orderby' => 'name',
'hide_empty' => false,
)
);
请根据您的需要随意修改参数。一旦你有了一个术语数组,你就可以用它来获取每个类别的术语 ID,并使用后者来运行 SQL 查询,这将允许你获取该类别中所有产品的总价值。
可以这样做:
$totals_per_category = array();
foreach ($categories as $key => $category) {
$term_id = $category->term_id;
global $wpdb;
$total = $wpdb->get_var(
"
SELECT sum(meta_value)
FROM $wpdb->postmeta
INNER JOIN {$wpdb->term_relationships} ON ( {$wpdb->term_relationships}.object_id = {$wpdb->postmeta}.post_id )
WHERE ( {$wpdb->term_relationships}.term_taxonomy_id IN ($term_id) )
AND {$wpdb->postmeta}.meta_key = '_regular_price'"
);
$totals_per_category[$term_id] = $total;
}
现在,由于我们有了每个类别的总产品价值,因此我们可以使用
array_sum
获得所有类别的总价值。
echo array_sum($totals_per_category); // This will output the total of all categories
现在您可以使用上面的逻辑来检索总计并根据需要围绕它构建标记(表、div ...等)。