web-dev-qa-db-fra.com

Afficher les produits en vedette dans les pages de catégories de produits

Je voudrais de l'aide avec le problème suivant avec woocommerce.

J'utilise wordpress 3.5.2, woocommerce 2.0.13 et le thème du sommerce.

J'ai une page de catégorie de produit dans laquelle j'affiche 5 sous-catégories. Sous les 5 images de la sous-catégorie, je voudrais avoir des produits en vedette ou des produits aléatoires de ces catégories. Savez-vous comment je pourrais faire ça?

1
Ilias Antonopoulos

Je viens de vérifier et WooCommerce exécute la description de la catégorie de produits à travers les filtres the_content, ce qui signifie qu'elle devrait exécuter des codes courts.

WooCommerce a beaucoup de codes courts, voir leur documentation

Y compris les produits en vedette:

[featured_products per_page="12" columns="4"]

L'inconvénient, c'est que les produits présentés ne sont peut-être pas tous de cette catégorie. Vous n'avez pas mentionné si c'était un problème ou non.

Si c'est le cas, vous pouvez dupliquer le code à partir du [featured_products] (qui exécute une boucle secondaire avec WP_Query), ajustez-le un peu et ajoutez la sortie au crochet woocommerce_before_shop_loop.

function wpa_107952_featured (){

    if( !is_product_category() )
        return;


    $args = array(
        'post_type' => 'product',
        'product_cat' => get_query_var('product_cat'),
        'post_status' => 'publish',
        'ignore_sticky_posts'   => 1,
        'posts_per_page' => 8,
        'meta_query' => array(
            array(
                'key' => '_visibility',
                'value' => array('catalog', 'visible'),
                'compare' => 'IN'
            ),
            array(
                'key' => '_featured',
                'value' => 'yes'
            )
        )
    );

    ob_start();

    $products = new WP_Query( $args );

    $woocommerce_loop['columns'] = 4;

    if ( $products->have_posts() ) : ?>

        <?php woocommerce_product_loop_start(); ?>

            <?php while ( $products->have_posts() ) : $products->the_post(); ?>

                <?php woocommerce_get_template_part( 'content', 'product' ); ?>

            <?php endwhile; // end of the loop. ?>

        <?php woocommerce_product_loop_end(); ?>

    <?php endif;

    wp_reset_postdata();

    echo '<div class="woocommerce">' . ob_get_clean() . '</div>';
}

add_action( 'woocommerce_before_shop_loop', 'wpa_107952_featured' );
2
helgatheviking