Sorting and displaying products based on your preference - the old WooCommerce product selling technique
Displaying your desired products or old products that are on the last pages of the store in the first option of the store page can make these products sell faster
You should put this code at the end of your function file and save it
view Other methods of increase Online store income
// Replace "default sorting" option with a custom one
add_filter( 'woocommerce_catalog_orderby', 'rezvan_woocommerce_catalog_orderby_custom' );
function rezvan_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', 'rezvan_woocommerce_catalog_orderby_custom_default' );
function rezvan_woocommerce_catalog_orderby_custom_default() {
return 'featured';
}
// Set sorting for new option
add_filter( 'woocommerce_get_catalog_ordering_args', 'rezvan_woocommerce_catalog_orderby_custom_args' );
function rezvan_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', 'rezvan_woocommerce_catalog_orderby_custom_featured_first', 10, 2 );
function rezvan_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;
}