Erstellen einer benutzerdefinierten WooCommerce-Schleife
Lesezeit: 4 Minuten
Ich verwende ein bereits entworfenes Thema für WordPress, und jetzt möchte ich anstelle von regulären Blog-Posts WooCommerce-Produkte anzeigen (was meiner Meinung nach benutzerdefinierte Post-Typen sind).
Dies ist die aktuelle Abfrage mit Anzeigeschleife:
Gibt es eine Möglichkeit, Optionen hinzuzufügen $args Die Schleife zeigt also WooCommerce-Produkte an? Ich verwende auch Paginierung mit dieser Schleife, die für dieses Projekt erforderlich ist, daher ist es wichtig, diese Schleife zu verwenden.
Sie sollten in der Lage sein, über die Schleife auf Produkte zuzugreifen, indem Sie die post_type Arg zu product:
Wenn Sie den Preis usw. erhalten möchten, können Sie Folgendes tun: $product = get_product($loop->post); und dann verwenden Sie es einfach so WC_Product wird genutzt: echo $product->get_price_html(); usw.
– Ziant
11. Dezember 2013 um 16:33 Uhr
get_product() ist jetzt veraltet, Use $product = new WC_Product($loop->post->ID);
– Maidul
21. Juli 2020 um 11:57 Uhr
Sollte WP_Query nicht für eine WC-Schleife verwenden, sollte WC_product_Query verwendet werden
– Entw
22. Mai um 16:44 Uhr
cfx
Dies ist der richtige Weg, um die WooCommerce-Produktschleife neu zu erstellen und anzupassen:
if(!function_exists('wc_get_products')) {
return;
}
$paged = (get_query_var('paged')) ? absint(get_query_var('paged')) : 1; // if your custom loop is on a static front page then check for the query var 'page' instead of 'paged', see https://developer.wordpress.org/reference/classes/wp_query/#pagination-parameters
$ordering = WC()->query->get_catalog_ordering_args();
$ordering['orderby'] = array_shift(explode(' ', $ordering['orderby']));
$ordering['orderby'] = stristr($ordering['orderby'], 'price') ? 'meta_value_num' : $ordering['orderby'];
$products_per_page = apply_filters('loop_shop_per_page', wc_get_default_products_per_row() * wc_get_default_product_rows_per_page());
$products_ids = wc_get_products(array(
'status' => 'publish',
'limit' => $products_per_page,
'page' => $paged,
'paginate' => true,
'return' => 'ids',
'orderby' => $ordering['orderby'],
'order' => $ordering['order'],
));
wc_set_loop_prop('current_page', $paged);
wc_set_loop_prop('is_paginated', wc_string_to_bool(true));
wc_set_loop_prop('page_template', get_page_template_slug());
wc_set_loop_prop('per_page', $products_per_page);
wc_set_loop_prop('total', $products_ids->total);
wc_set_loop_prop('total_pages', $products_ids->max_num_pages);
if($products_ids) {
do_action('woocommerce_before_shop_loop');
woocommerce_product_loop_start();
foreach($products_ids->products as $featured_product) {
$post_object = get_post($featured_product);
setup_postdata($GLOBALS['post'] =& $post_object);
wc_get_template_part('content', 'product');
}
wp_reset_postdata();
woocommerce_product_loop_end();
do_action('woocommerce_after_shop_loop');
} else {
do_action('woocommerce_no_products_found');
}
Mit dem obigen Code würden Sie die anpassen wc_get_products() Argumente, um die IDs der gewünschten Produkte zu erhalten (wenn Sie bestimmte Kriterien haben). Sobald dieser Code vorhanden ist, stehen Ihnen alle Funktionen einer nativen WooCommerce-Schleife zur Verfügung – Paginierung, Bestellung usw. Diese Methode ist überlegen WP_Query und get_posts() weil diese beiden Methoden brechen können.
was ist, wenn die Schleife für ist infinite scrolling und nicht für pagination? Es werden doppelte Produkte angezeigt.
– Polar
3. Juni 2020 um 7:59 Uhr
Wenn Sie verstehen, was hier vor sich geht, sollte es kein Problem sein, dies an unendliches Scrollen anzupassen. Allerdings nur wegen dir kann etwas tun, bedeutet nicht, dass Sie es tun sollten!
– cfx
3. Juni 2020 um 13:16 Uhr
Wenn wc_get_products() wird mit gerufen 'return' => 'ids' die Schleife sollte beginnen als foreach($products_ids as $featured_product) { Anstatt von foreach($products_ids->products as $featured_product) {.
– sbnc.eu
21. April um 13:18 Uhr
Codierer
Sie können die Kategorie auch mit diesem Code abrufen