允许按 WooCommerce 存档页面上的特色对产品进行排序

Allow to sort products by featured on WooCommerce archive pages

我正在尝试让用户能够按特色对商店页面上的产品进行排序。为此,我使用以下代码:

add_filter( 'woocommerce_get_catalog_ordering_args', 'victor_get_catalog_ordering_args' );
function victor_get_catalog_ordering_args( $args ) {

 $orderby_value = isset( $_GET['orderby'] ) ? woocommerce_clean( $_GET['orderby'] ) :  apply_filters( 'woocommerce_default_catalog_orderby', get_option( 'woocommerce_default_catalog_orderby' ) );

if ( 'featured' == $orderby_value ) {
    $args['orderby']  = '_featured';
    $args['order']    = 'DESC';
    $args['meta_key'] = '_featured';
}

   return $args;
}

   add_filter( 'woocommerce_default_catalog_orderby_options', 'victor_catalog_orderby' );
   add_filter( 'woocommerce_catalog_orderby', 'victor_catalog_orderby' );
   
function victor_catalog_orderby( $sortby ) {

   $sortby['featured'] = 'Featured';
   return $sortby;
}

但是没用。我正在尝试使用以下功能按特色对产品进行排序:/?orderby=featured 但除了没有找到符合请求的产品的消息外,没有显示任何内容。但我知道在管理面板中我有超过 10 种产品标记为特色。请帮助解决这个问题 issue.I 需要确保理解我做错了什么。

自 Woocommerce 3 以来,您的代码有点过时和弃用,其中特色产品现在设置为术语名称 featuredproduct_visibility 分类法,因此需要以不同的方式处理如下:

add_filter( 'woocommerce_catalog_orderby', 'hugo_boss_catalog_orderby' );
function hugo_boss_catalog_orderby( $orderby ) {
    $orderby['featured'] = __('Featured', 'woocommerce');

    return $orderby;
}

add_action( 'woocommerce_product_query', 'obama_trump_product_query' );
function obama_trump_product_query( $q ) {
    if ( ! is_admin() && isset($_GET['orderby']) && 'featured' === esc_attr($_GET['orderby']) ) {
        $tax_query = $q->get('tax_query');
        $tax_query[] = array(
            'taxonomy' => 'product_visibility',
            'field'    => 'name',
            'terms'    => 'featured',
        );
        $q->set( 'tax_query', $tax_query );
        $q->set( 'order', 'DESC' ); // Or "ASC"
    }
}

代码进入活动子主题(或活动主题)的 functions.php 文件。已测试并有效。

相关: