web-dev-qa-db-ger.com

Woocommerce benutzerdefinierte Schleife, um alle Produkte anzuzeigen

Ich arbeite zurzeit an einer E-Commerce-Website und bin auf ein Problem gestoßen. Mein Kunde möchte eine E-Boutique mit allen angezeigten Produktkategorien, gefolgt von drei beworbenen Produkten und einem Button "Alle anzeigen".

Diese Schaltfläche "Alle anzeigen" soll alle Produkte anzeigen, die das Geschäft mit der standardmäßigen Sortierung und Paging-Funktion von Woocommerce enthält.

Zuallererst weiß ich nicht, ob ich es richtig mache. Was ich bisher habe, ist die Seite, auf der die Produktkategorien angezeigt werden. Wenn ich auf dieser Seite auf die Schaltfläche "Alle anzeigen" klicke, lade ich die Seite mit einem GETname__-Argument /?all=1 neu und lasse das Produkt anzeigen.

<a class="product-category-view-all" href="?all=1"><?php _e('View all'); ?></a>

Ich habe die Idee aus diesem Beitrag kopiert , und hier ist mein Code:

<div id="content" class="hfeed">
<h1><?php _e('The E-boutique'); ?></h1>

<?php
if (isset($_GET['all']))
{
    $args = array(
        'post_type' => 'product',
        'orderby' => $orderby,
    );
    $wp_query = new WP_Query($args);
    ?>

    <?php do_action('woocommerce_before_shop_loop'); // woocommerce sorting ?>

    <div class="clear"></div>
    <ul class="products-list">
        <?php woocommerce_product_subcategories(); ?>

        <?php while ($wp_query->have_posts()) : $wp_query->the_post(); ?>

            <?php woocommerce_get_template_part('content', 'product'); ?>

            <?php
        endwhile; // end of the loop. 
        wp_reset_query(); 
        ?>
    </ul>
    <div class="clear"></div>

    <?php do_action('woocommerce_after_shop_loop'); // woocommerce pagination   ?>

    <?php
}
else
{
    // Code to display the product categories with thumbnails.
}
?>

Die Produkte werden gut angezeigt und die Auswahl für die Sortierung ist sichtbar. Wenn ich die Sortierung ändern möchte, wird die Seite neu geladen, aber die Reihenfolge wird nicht geändert, und der Seitenwechsel wird auf 3 Produkte pro Seite festgelegt, aber nicht beachtet. (Die Paging-Schaltflächen werden nicht angezeigt.).

Ich möchte hinzufügen, dass es meine erste Website mit WordPress und WooCommerce ist.

2
HamzStramGram

Ich habe mein Problem nicht vollständig gelöst. Mein Kunde hat es sich anders überlegt und wollte das Sortieren nicht mehr.

Aber was das Paging betrifft, habe ich es geschafft, indem ich ein neues Argument in meine Abfrage eingefügt habe. Hier ist der Code, mit dem es für mich funktioniert hat:

<?php
    $paged = (get_query_var('paged')) ? get_query_var('paged') : 1;

    $args = array(
        'post_type' => 'product',
        'paged' => $paged,
    );
    $wp_query = new WP_Query($args);

    if (isset($_GET['all']))
    {
        ?>

        <?php do_action('woocommerce_archive_description'); ?>

        <?php if (have_posts()) : ?>

            <?php
            // I don't want the sorting anymore
            //do_action('woocommerce_before_shop_loop');
            ?>

            <ul class = "products-list">
                <?php while (have_posts()) : the_post(); ?>

                    <?php woocommerce_get_template_part('content', 'product'); ?>

                <?php endwhile; // end of the loop.   ?>
            </ul>

            <?php
            /*  woocommerce pagination  */
            do_action('woocommerce_after_shop_loop');
            ?>

        <?php elseif (!woocommerce_product_subcategories(array('before' => woocommerce_product_loop_start(false), 'after' => woocommerce_product_loop_end(false)))) : ?>

            <?php woocommerce_get_template('loop/no-products-found.php'); ?>

        <?php endif; ?>
        <?php
    }
    else
    {
        // Code to display the product categories with thumbnails.
    }
?>

Die Variable $paged hilft mir dabei, die aktuelle Seite in der URL über GET weiterzuleiten.

Nochmals, ich weiß nicht, ob es der beste Weg ist, es zu tun. Aber es hat den Job für mich erledigt.

Ich hoffe es kann jemandem helfen.

4
HamzStramGram

In Ihrem $ args-Array sollten Sie 'posts_per_page' => -1 hinzufügen können, um alle Produkte anzuzeigen. Das Ergebnis würde so aussehen:

$args = array(
    'post_type' => 'product',
    'paged' => $paged,
    'posts_per_page' => -1
);
1
Rynoceris