php - 尝试列出产品类别及其产品的价格范围

标签 php wordpress woocommerce hook-woocommerce

我正在尝试创建一个页面,在其中显示类别列表以及这些类别中产品的价格范围。

例如

头饰 – £30-£150

鞋子 – 35-300英镑

其中“Headwear”是产品类别名称,“£30”是该类别中产品的最低价格,“£150”是最高价格。

到目前为止,我已经使用以下代码列出了类别,但不确定如何检查每个类别中的产品并获取价格等。

$order = 'asc';
$hide_empty = false ;
$cat_args = array(
    'orderby'    => $orderby,
    'order'      => $order,
    'hide_empty' => $hide_empty,
);
 
$product_categories = get_terms( 'product_cat', $cat_args );
 
if( !empty($product_categories) ){
    echo '
 
<ul>';
    foreach ($product_categories as $key => $category) {
        echo '
 
<li>';
        echo '<a href="'.get_term_link($category).'" >';
        echo $category->name;
        echo '</a>';
        echo '</li>';
    }
    echo '</ul>
 
 
';
}

我在 Woocommerce 方面相当缺乏经验,因此我们将不胜感激任何帮助

最佳答案

您可以使用以下代码片段按产品类别 slug 获取产品列表(来源: https://www.businessbloomer.com/woocommerce-get-return-all-product-ids/ ):

   $all_ids = get_posts( array(
      'post_type' => 'product',
      'numberposts' => -1,
      'post_status' => 'publish',
      'fields' => 'ids',
      'tax_query' => array(
         array(
            'taxonomy' => 'product_cat',
            'field' => 'slug',
            'terms' => 'your_product_cat',
            'operator' => 'IN',
         )
      ),
   ));

因此,对于每个类别,您可以循环浏览产品并找到最便宜和最昂贵的:

$min = PHP_FLOAT_MAX;
$max = 0.00;
foreach ( $all_ids as $id ) {
   $product = wc_get_product( $id );
   $min = $product->get_price() < $min ? $product->get_price() : $min;
   $max = $product->get_price() > $max ? $product->get_price() : $max;
}

现在就与您的代码一起:

$order = 'asc';
$hide_empty = false;
$cat_args = array(
    'orderby' => $orderby,
    'order' => $order,
    'hide_empty' => $hide_empty,
);   
$product_categories = get_terms( 'product_cat', $cat_args );
if ( ! empty( $product_categories ) ) {
    echo '<ul>';
    foreach ( $product_categories as $key => $category ) {
        $all_ids = get_posts( array(
            'post_type' => 'product',
            'numberposts' => -1,
            'post_status' => 'publish',
            'fields' => 'ids',
            'tax_query' => array(
               array(
                  'taxonomy' => 'product_cat',
                  'field' => 'slug',
                  'terms' => $category->slug,
                  'operator' => 'IN',
               )
            ),
        ));
        $min = PHP_FLOAT_MAX;
        $max = 0.00;
        foreach ( $all_ids as $id ) {
        $product = wc_get_product( $id );
           $min = wc_format_decimal( $product->get_price() ) < $min ? wc_format_decimal( $product->get_price() ) : $min;
           $max = wc_format_decimal( $product->get_price() ) > $max ? wc_format_decimal( $product->get_price() ) : $max;
        }
        echo '<li><a href="' . get_term_link( $category ) . '">';
        echo $category->name . ' - ' . wc_price( $min ) . '-' . wc_price( $max );
        echo '</a></li>';
    }
    echo '</ul>';
}

关于php - 尝试列出产品类别及其产品的价格范围,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69325473/

相关文章:

css - 隐藏 Woocommerce 管理员编辑订单页面中的一些按钮

PHP/MYSQL 统计订单

php - 当没有值重复时重复键输入

php - Laravel 8 在 protected 应用程序/模型中更改用户表名称不起作用

php - 将 PHP 添加到 Wordpress 子主题中的 style.css

php - 删除价格后缀 Woocommerce 商店页面

php - 如何在网站上设置预定的 API 调用?

php - 在生产中获取 "Class not found in"但不在本地或开发服务器上

javascript - 到达特定行时如何在网站上更改 Logo

html - 更改 WooCommerce 购物车页面中的运输方式费率值字体粗细