【问题标题】:Allow to sort products by featured on WooCommerce archive pages允许按 WooCommerce 存档页面上的特色对产品进行排序
【发布时间】:2020-12-02 22:37:03
【问题描述】:

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

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 种产品被标记为特色产品。请帮助解决这个问题。我需要确保了解我做错了什么。

【问题讨论】:

    标签: php wordpress woocommerce product taxonomy-terms


    【解决方案1】:

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

    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 文件中。经过测试并且可以工作。

    相关:

    【讨论】:

      猜你喜欢
      • 2018-09-27
      • 1970-01-01
      • 1970-01-01
      • 2013-01-30
      • 2015-12-09
      • 2021-07-05
      • 2020-10-16
      • 2019-12-20
      • 1970-01-01
      相关资源
      最近更新 更多