问题
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