Woocommerce vor und nach der Ladenschleife funktioniert nicht

Ich habe einen Shortcode erstellt, um alle Woocommerce-Produkte auf einer neuen Seite mit allen Woocommerce Filtern und Paginierungen anzuzeigen, aber es scheint nur Produkte zu zeigen

ob_start(); $products = new WP_Query( apply_filters( 'woocommerce_shortcode_products_query', $args, $atts ) ); if ( $products->have_posts() ) : ?>   have_posts() ) : $products->the_post(); ?>       <?php return '
' . ob_get_clean() . '
';

Laut woocommerce archive-products.php template woocommerce_before_shop_loop sollte Anzahl und Filter woocommerce_before_shop_loop

Und woocommerce_after_shop_loop zeige Paginierung, aber hier woocommerce_after_shop_loop Alternative, sie zu zeigen?

Full shortcode für den visuellen Komponisten: https://pastebin.com/crv4jwsz

Solutions Collecting From Web of "Woocommerce vor und nach der Ladenschleife funktioniert nicht"

Im core von WooCommerce wird die Paginierung über die function woocommerce_pagination() an woocommerce_after_shop_loop , und die Sortier- und Ergebniszahlen werden von den functionen woocommerce_result_count() und woocommerce_catalog_ordering() . Wenn Sie sich die Quelle für diese functionen ansehen, können Sie sehen, dass sie entsprechend der Hauptdatei $wp_query , die keine Produkte enthält, weil Sie Posts mit Ihrer eigenen WP_Query abfragen.

Dies könnte einer der seltenen query_posts() denen query_posts() das Richtige ist. Wenn Sie query_posts() anstelle einer sekundären WP_Query verwenden, sollten diese Vorlagenfunktionen Ihre benutzerdefinierte Abfrage widerspiegeln.

 ob_start(); query_posts( apply_filters( 'woocommerce_shortcode_products_query', $args, $atts ) ); if ( have_posts() ) : ?> < ?php do_action( 'woocommerce_before_shop_loop' ); //this would show post count and filter ?> < ?php woocommerce_product_loop_start(); ?> < ?php while ( have_posts() ) : the_post(); ?> < ?php wc_get_template_part( 'content', 'product' ); ?> < ?php endwhile; // end of the loop. ?> < ?php woocommerce_product_loop_end(); ?> < ?php do_action( 'woocommerce_after_shop_loop' ); //this would show pagination ?> < ?php endif;?> < ?php wp_reset_postdata(); wp_reset_query(); return '
' . ob_get_clean() . '';

Beachten Sie die wp_reset_query() , das ist hier sehr wichtig.

Ich bin mir nicht sicher, ob die Paginierung korrekt funktioniert, Sie müssen jedoch möglicherweise Ihre eigene Instanz von paginate_links() Beispiele für die Verwendung von paginate_links() mit einer benutzerdefinierten Abfrage finden Sie in der Dokumentation im Codex.