如何在不使用其他插件的情况下按特色或标签对 WooCommerce 产品进行排序?

问题描述 投票:0回答:1

我正在使用简码列出这样的产品类别

[product_category category="products" orderby="title" order="asc"]

并且想知道如何才能使特色产品位于列表的顶部?它与 orderby 参数 有关,但我不知道。

请不要推荐第 3 方插件。
更多信息请参阅 WooCommerce 官方docs

php wordpress woocommerce sql-order-by wordpress-featured-image
1个回答
0
投票

产品有一个自定义字段

_featured
,设置为
yes
代表特色产品,
no
代表非特色产品。所以你可以 使用
woocommerce_shortcode_products_query
过滤器覆盖 WooCOmmerce 短代码。

add_filter('woocommerce_shortcode_products_query', 'wh_woocommerce_shortcode_products_orderby');

function wh_woocommerce_shortcode_products_orderby($args)
{

    $standard_array = ['menu_order', 'title', 'date', 'rand', 'id'];
//  print_r($args['orderby']);
    if (isset($args['orderby']) && !in_array($args['orderby'], $standard_array))
    {
        $args['meta_key'] = '_featured';
        $args['orderby'] = 'meta_value_num';
    }
//  print_r($args);
    return $args;
}

代码位于活动子主题(或主题)的 function.php 文件中。或者也可以在任何插件 php 文件中。

使用
列出产品形式从特色到非特色(即,形式

yes
no

[product_category category="products" orderby="_featured" order="DESC"]

请注意::上面的代码似乎可以工作,但是如果你打印

$args['orderby']
,它不会显示
_featured
键,所以我硬编码,它在
$args
中。这不是标准方法

希望这有帮助!

© www.soinside.com 2019 - 2024. All rights reserved.