返回

WooCommerce 中如何按特色产品排序?一劳永逸解决排序难题

php

在 WooCommerce 中按特色产品排序

问题

在 WooCommerce 搜索结果中,将特色产品展示在其他产品之前是一项具有挑战性的任务。最初的尝试要么只显示特色产品,要么将特色产品与非特色产品混合在一起。

解决方案

为了解决这个问题,需要一种方法来按“特色”属性对产品进行排序,然后再按其他属性进行排序。以下代码实现了这一目标:

add_filter( 'woocommerce_catalog_orderby', 'sort_by_featured', 10, 1 );
function sort_by_featured( $orderby ) {
    global $wpdb;

    $orderby['featured'] = "{$wpdb->posts}.post_excerpt DESC, {$wpdb->posts}.post_date DESC";

    return $orderby;
}

add_action( 'woocommerce_product_query', 'custom_product_sorting' );
function custom_product_sorting( $q ) {
    if ( ! is_admin() && isset( $_GET['orderby'] ) && 'featured' === esc_attr( $_GET['orderby'] ) ) {
        $q->set( 'meta_query', array(
            array(
                'key'     => '_featured',
                'value'   => 'yes',
                'compare' => 'EXISTS',
            )
        ) );
    }
}

用法

用户只需在搜索产品时选择“按特色排序”选项,即可按此排序方式查看结果。

优点

  • 该方法显示了特色产品,然后是按其他属性(如日期)排序的其他产品。
  • 它不会将特色产品“混入”非特色产品中。
  • 它不会对其他排序选项(如价格或名称)产生影响。

常见问题解答

1. post_excerpt 是什么?
post_excerpt 通常用于显示产品摘要。您可以根据需要修改排序以使用不同的属性。

2. 如何启用“特色产品”功能?
转到 WooCommerce > 设置 > 产品,然后启用“特色产品”选项。

3. 如何自定义排序选项?
您可以修改代码中的 post_excerpt DESC 和 post_date DESC 属性以按所需属性进行排序。

4. 排序是否会影响其他排序选项?
否,该排序只会影响按“特色”排序。其他排序选项(如价格或名称)将保持不变。

5. 我可以在其他地方使用此方法吗?
此方法可以应用于需要按特定属性对产品进行排序的任何情况,例如按销量或库存数量排序。