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:
-
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. -
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!!