Woocommerce - Display Featured Products at top of Category Page

前端 未结 2 1629
一向
一向 2020-12-21 21:59

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

相关标签:
2条回答
  • 2020-12-21 22:35

    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."']" );
        }
    
    });
    
    0 讨论(0)
  • 2020-12-21 22:47

    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

    0 讨论(0)
提交回复
热议问题