آموزش وردپرس

مرتب سازی محصولات ووکامرس بر اساس محصول برجسته

در ووکامرس شما می توانید تیک برجسته سازی یا featured product را برای یک محصول انتخاب کنید. در این حالت محصول شما یک ستاره در بخش مدیریت محصلات خواهد داشت.
شما می توانید محصولات برجسته یا featured product را در بخش های مختلف سایت خود با المنتور فراخوانی کنید و نمایش دهید. یا اینکه توسط ابزارم ها محصولات برجسته ووکامرس را نمایش دهید.
اما در حالت عادی نمی توانید در صفحات آرشیو محصولات مثل بخش Shop یا بخش نمایش محصولات در هر دسته بندی، محصولات برجسته یا featured product را در ابتدای فهرست محصولات نمایش دهید.

چطور محصولات برجسته را در ابتدای فهرست محصولات در هر دسته بندی ووکامرس نمایش دهیم؟


ابتدا محصولات برجسته یا featured product خود را تعیین کنید.
برای این کار کافی است محصولات برجسته موردنظرتان را با انتخاب گزینه ستاره در صفحه ویرایش همه محصولات یا با تیک انتخاب محصول به عنوان برجسته در صفحه ویرایش محصول، تعیین کنید.
حالا کد زیر را در فایل Functions.php قالب خودتان قرار دهید:

// Replace "default sorting" option with a custom one
 
add_filter( 'woocommerce_catalog_orderby', 'parkwp_woocommerce_catalog_orderby_custom' );
 
function parkwp_woocommerce_catalog_orderby_custom( $sortby ) {
    $sortby['featured'] = __( 'Default sorting', 'woocommerce' );
   unset( $sortby['menu_order'] );
    return $sortby;
}
 
// Make the custom one the default one
 
add_filter( 'woocommerce_default_catalog_orderby', 'parkwp_woocommerce_catalog_orderby_custom_default' );
 
function parkwp_woocommerce_catalog_orderby_custom_default() {
   return 'featured';
}
 
// Set sorting for new option
 
add_filter( 'woocommerce_get_catalog_ordering_args', 'parkwp_woocommerce_catalog_orderby_custom_args' );
 
function parkwp_woocommerce_catalog_orderby_custom_args( $args ) {
   $orderby_value = isset( $_GET['orderby'] ) ? wc_clean( $_GET['orderby'] ) : apply_filters( 'woocommerce_default_catalog_orderby', get_option( 'woocommerce_default_catalog_orderby' ) );
   if ( 'featured' == $orderby_value ) {
      $args['orderby'] = 'menu_order title';
      $args['order'] = '';
      $args['meta_key'] = '';
   }
   return $args;
}
 
// Adjust order to allow for featured posts
 
add_filter( 'posts_orderby', 'parkwp_woocommerce_catalog_orderby_custom_featured_first', 10, 2 );
 
function parkwp_woocommerce_catalog_orderby_custom_featured_first( $order_by, $query ) {
   global $wpdb;
   if ( ! is_admin() ) {
      $orderby_value = ( isset( $_GET['orderby'] ) ? wc_clean( (string) $_GET['orderby'] ) : apply_filters( 'woocommerce_default_catalog_orderby', get_option( 'woocommerce_default_catalog_orderby' ) ) );
      $orderby_value_array = explode( '-', $orderby_value );
      $orderby = esc_attr( $orderby_value_array[0] );
      $order = ( ! empty( $orderby_value_array[1] ) ? $orderby_value_array[1] : 'ASC' );
      $featured_product_ids = wc_get_featured_product_ids();
      if ( $orderby == "featured" && is_array( $featured_product_ids ) && ! empty( $featured_product_ids ) ) {
         if ( empty( $order_by ) ) {
            $order_by = "FIELD(" . $wpdb->posts . ".ID,'" . implode( "','", $featured_product_ids ) . "') DESC ";
         } else {
            $order_by = "FIELD(" . $wpdb->posts . ".ID,'" . implode( "','", $featured_product_ids ) . "') DESC, " . $order_by;
         }
      }  
   }
   return $order_by;
}

این کد محصولاتی که در صفحه دسته بندی محصولات و به طور کلی آرشیو محصولات نمایش داده می شوند را ابتدا بر اساس برجسته بودن محصولات مرتب می کند و در ابتدا، محصولات برجسته را نمایش میدهید، سپس سایر محصولات را بر اساس ترتیب منو یا همان menu_order و عنوان مرتب می کند.

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *