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:

<?php 
                $args = array(
                    //'posts_per_page' => '2',
                    'paged' => get_query_var('paged')
                );
                $homepage_query = new WP_Query($args);
            ?>
            <?php //query_posts('posts_per_page=4&paged='.get_query_var('paged')); ?>
            <?php if ( have_posts() ) : ?>  
                <?php while ( $homepage_query->have_posts() ) : $homepage_query->the_post(); ?>
                    <?php if($style == 'blog_style') { ?>
                    <div id="blog-style" class="post-box">
                        <?php get_template_part('content', 'blog'); ?>
                    </div>
                    <?php } else { ?>
                    <div class="post-box grid_4 <?php aero_post_box_class(); ?>">
                        <?php get_template_part('content', ''); ?>
                    </div>
                    <?php } ?>
                <?php endwhile; ?>

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:

<?php

// Setup your custom query
$args = array( 'post_type' => 'product', ... );
$loop = new WP_Query( $args );

while ( $loop->have_posts() ) : $loop->the_post(); ?>

    <a href="https://stackoverflow.com/questions/13267124/<?php echo get_permalink( $loop->post->ID ) ?>">
        <?php the_title(); ?>
    </a>

<?php endwhile; wp_reset_query(); // Remember to reset ?>

  • Ja, es macht jetzt eine Schleife, großartig!

    – jOpacic

    8. November 2012 um 7:43 Uhr

  • 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

Benutzeravatar von cfx
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.

Ich habe hier einen ausführlicheren Blog-Beitrag über benutzerdefinierte WooCommerce-Schleifen geschrieben: https://cfxdesign.com/create-a-custom-woocommerce-product-loop-the-right-way/

  • 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

Benutzeravatar des Coders
Codierer

Sie können die Kategorie auch mit diesem Code abrufen

       $terms = get_terms('product_cat');

       foreach ($terms as $term) {
         $term_link =  get_term_link( $term, 'product_cat' );
         echo '<li><a href="' . $term_link . '">' . $term->name . '</a></li>';
       }

Wenn Sie dann nur die übergeordnete Kategorie möchten

wp_list_categories('taxonomy=product_cat&orderby=order&title_li=&depth=1'); 

1402150cookie-checkErstellen einer benutzerdefinierten WooCommerce-Schleife

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

Privacy policy