繁体   English   中英

在页面上显示 Woocommerce 中低于特定价格的所有产品

[英]Display on a page all products below a specific price in Woocommerce

我有一家拥有 1000 多种产品的 Woocommerce 商店。 我希望所有价格低于999的产品都应显示在单独的页面上,以便我可以在菜单中标记该页面。

可能吗?

更新:(添加'type' => 'DECIMAL',meta_query数组)

这可以使用要在页面上使用的Woocommerce 短代码[products]来完成,并带有以下附加代码(这将增加通过现有参数定义要比较的价格的可能性)

add_filter( 'woocommerce_shortcode_products_query', 'products_based_on_price', 10, 3 );
function products_based_on_price( $query_args, $atts, $loop_name ) {
    if( ! ( isset($atts['class']) && ! empty($atts['class']) ) )
        return $query_args;

    if (strpos($atts['class'], 'below-') !== false) {
        $compare   = '<';
        $slug    = 'below-';
    } elseif (strpos($atts['class'], 'above-') !== false) {
        $compare   = '>'; //changed from "<" to ">"
        $slug    = 'above-';
    }

    if( isset($compare) ) {
        $query_args['meta_query'][] = array(
            'key'     => '_price',
            'value'   => (float) str_replace($slug, '', $atts['class']),
            'type'    => 'DECIMAL',
            'compare' => $compare,
        );
    }
    return $query_args;
}

代码位于您的活动子主题(或活动主题)的 function.php 文件中。 测试和工作。


##用法:

这里我们使用未使用的class参数来传递价格和比较运算符。

1) 展示低于特定数量的产品(您的情况)

您将粘贴以下短代码示例,其class参数值below-999 (对于价格低于 999 的产品)

[products limit="16" paginate="true" columns="4" class="below-999"]

wordpress 页面文本内容编辑器:

在此处输入图像描述

你会得到:

在此处输入图像描述

2) 展示特定数量以上的产品

您将粘贴以下短代码示例,其中class参数值above-50 (对于价格高于50的产品)

[products limit="16" paginate="true" columns="4" class="above-50"]

可用的简码参数和设置: Woocommerce 简码文档

  • 创建一个新的页面模板
  • 创建新页面,分配新页面模板
  • 在页面模板代码顶部(或使用过滤器),使用 WP_query 查询您的产品

看:

$query = new \WP_Query(
    [
      'posts_per_page' => -1,
      'post_type' => 'product',
      'meta_key' => '_price',
      'meta_value' => 999,
      'meta_compare' => '<',
      'meta_type' => 'NUMERIC'
    ]);
  • 然后,您可以使用 while 循环,或在$query->posts上使用 foreach 来显示您的帖子

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM