Fehler beim Anzeigen von zwei Woo-Produktschleifen auf einer Seite

Lesezeit: 3 Minuten

photo
harvey

Ich versuche, die Archivseiten meines WooCommerce-Produktshops so anzupassen, dass zuerst alle Produkte angezeigt werden, die als Favorit gekennzeichnet sind, und dann alle anderen Produkte in der ausgewählten Kategorie.

Ich habe bereits die folgende Schleife ausprobiert, die ich in meine Datei archive-product.php eingefügt habe, aber ich habe 2 Probleme:

  1. Wenn ich auf der bin /product-category/toys/ Archivseite zeigt sie Produkte aus allen Kategorien. Es sollen nur Produkte aus einer bestimmten Kategorie (zB Spielzeug) angezeigt werden.

  2. Auf jeder paginierten Seite werden zuerst die vorgestellten Produkte und dann die regulären Produkte angezeigt. In Wirklichkeit sollen nur die ersten Seite(n) die vorgestellten Produkte anzeigen, und sobald alle vorgestellten Produkte angezeigt werden, sollten die regulären Produkte angezeigt werden. Es scheint, als ob jede Seite zwei separate Schleifen anzeigt, im Gegensatz zu einer Schleife.

AUCH, ist dies die bevorzugte Methode, oder sollte ich verwenden? pre_get_posts ?

<?php woocommerce_product_loop_start(); ?>
        <?php
        //CUSTOM LOOP
        // Display featured Products first.
$query = new WP_Query( array(
    'post_type' => 'product',
    'post_status' => 'publish',
    'posts_per_page' => -1 ,
    'tax_query' => array( array(
        'taxonomy' => 'product_visibility',
        'field'    => 'term_id',
        'terms'    => 'featured',
        'operator' => 'IN',
    ) )
) );

$featured_product_names = array();
$featured_product_id = array();

if ( $query->have_posts() ): while ( $query->have_posts() ): $query->the_post();

        $product = wc_get_product( $query->post->ID );
        wc_get_template_part( 'content', 'product' );
endwhile; wp_reset_query();endif;
// fetch other product which is not featured
$my_query = new WP_Query(array(
    'post__not_in' => $featured_product_id,
    'post_type' => 'product'
));

if ( $my_query->have_posts() ): while ( $my_query->have_posts() ): $my_query->the_post();
$product = wc_get_product( $query->post->ID );
wc_get_template_part( 'content', 'product' );
endwhile; wp_reset_query();endif;
        ?>
        <?php woocommerce_product_loop_end(); ?>

Ich glaube, ich bin auf dem richtigen Weg, kann das Problem aber nicht eingrenzen.

Jede Hilfe ist willkommen!!

du hast definiert $featured_product_id als Array, aber keine Postids hinzugefügt, um andere Schleifen zu überspringen. Überprüfen Sie den folgenden Code und es wird funktionieren.

<?php woocommerce_product_loop_start(); ?>
        <?php
        //CUSTOM LOOP
        // Display featured Products first.
$query = new WP_Query( array(
    'post_type' => 'product',
    'post_status' => 'publish',
    'posts_per_page' => -1 ,
    'tax_query' => array( array(
        'taxonomy' => 'product_visibility',
        'field'    => 'term_id',
        'terms'    => 'featured',
        'operator' => 'IN',
    ) )
) );

$featured_product_names = array();
$featured_product_id = array();

if ( $query->have_posts() ): while ( $query->have_posts() ): $query->the_post();
        $featured_product_id[] = get_the_ID();
        $product = wc_get_product( $query->post->ID );
        wc_get_template_part( 'content', 'product' );
endwhile; wp_reset_query();endif;
// fetch other product which is not featured
$my_query = new WP_Query(array(
    'post__not_in' => $featured_product_id,
    'post_type' => 'product'
));

if ( $my_query->have_posts() ): while ( $my_query->have_posts() ): $my_query->the_post();
$product = wc_get_product( $query->post->ID );
wc_get_template_part( 'content', 'product' );
endwhile; wp_reset_query();endif;
        ?>
        <?php woocommerce_product_loop_end(); ?>

  • Danke für deinen Beitrag, aber ich stehe immer noch vor den gleichen Problemen. 1. Wenn ich auf der Archivseite /product-category/toys/ bin, werden Produkte aus allen Kategorien angezeigt. Es sollen nur Produkte aus einer bestimmten Kategorie (zB Spielzeug) angezeigt werden. 2. Auf jeder paginierten Seite werden zuerst die vorgestellten Produkte und dann die regulären Produkte angezeigt. In Wirklichkeit sollen nur die ersten Seite(n) die vorgestellten Produkte anzeigen, und sobald alle vorgestellten Produkte angezeigt werden, sollten die regulären Produkte angezeigt werden. Es scheint, als ob jede Seite zwei separate Schleifen anzeigt, im Gegensatz zu einer Schleife.

    – harvey

    24. Okt. 19 um 13:44 Uhr

.

419830cookie-checkFehler beim Anzeigen von zwei Woo-Produktschleifen auf einer Seite

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy