Woocommerce - Display Featured Products at top of Category Page

烂漫一生 提交于 2020-07-14 10:59:31

问题


I want to have a section at the top of each product category page that shows three featured products at random from that category. Beneath this would be the regular archive loop.

What's the best way to achieve this, without using a plugin?


回答1:


Below code can help you:

    add_filter('posts_orderby', 'show_featured_products_orderby',10,2);
function show_featured_products_orderby($order_by, $query){
  global  $wpdb ;
  if( ($query->get('post_type')=='product') && (!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' );
    $feture_product_id = wc_get_featured_product_ids();
    if ( is_array( $feture_product_id ) && !empty($feture_product_id) ) {
      if ( empty($order_by) ) {
        $order_by = "FIELD(" . $wpdb->posts . ".ID,'" . implode( "','", $feture_product_id ) . "') DESC ";
      } else {
        $order_by = "FIELD(" . $wpdb->posts . ".ID,'" . implode( "','", $feture_product_id ) . "') DESC, " . $order_by;
      }
    }  
  }
  return $order_by;
}

Add this code to active themes function.php file




回答2:


I made a note on displaying featured products by category and created a simple plugin with a shortcode. See full notes here https://jameshwartlopez.com/plugin/get-featured-products-of-a-category/.

Basically you just need to download and install the plugin I created https://github.com/jameshwartlopez/jvl-featured-product-by-category

Then in your functions.php file, you either hook to woocommerce_before_shop_loop or woocommerce_archive_description. Test which hook looks okay for your site. Below is an example.

<?php

add_action('woocommerce_before_shop_loop', function() {

    if(is_product_category()){
        $current_term = get_queried_object();
        $cat_slug = $current_term->slug
        echo do_shortcode( "[featured_products_by_category cat='".$cat_slug."']" );
    }

});


来源:https://stackoverflow.com/questions/50278914/woocommerce-display-featured-products-at-top-of-category-page

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!