web-dev-qa-db-ja.com

すべての商品を表示するWoocommerceカスタムループ

私は現在eコマースのWebサイトに取り組んでいますが、問題が発生しました。私のクライアントは、3つの宣伝された商品とボタン「すべて表示」が後に続くすべての商品カテゴリが表示されたページeブティックを望んでいます。

この[すべて表示]ボタンをクリックすると、店舗に含まれているすべての商品がデフォルトのウーコマースソートおよびページングとともに表示されます。

まず第一に、私はそれを正しいやり方でやっているのはわかりません。これまでのところ、商品カテゴリを表示しているページです。このページで[すべて表示]ボタンをクリックすると、GET引数/?all=1を付けてページがリロードされ、商品が表示されます。

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

この記事からアイデアをコピーしました そしてこれが私のコードです:

<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.
}
?>

商品はよく表示され、ソートの選択項目が表示されます。並べ替えを変更したい場合、ページはリロードされますが、順序は変更されず、ページングは​​ページあたり3商品に設定されますが、それは尊重されません。 (ページングボタンは表示されません)。

私はそれがWordPressとWooCommerceを使った私の最初のウェブサイトであることを付け加えたいと思います。

2
HamzStramGram

私は自分の問題を完全には解決しなかった。私のクライアントは考えを変えたので、ソートはもう必要ありませんでした。

しかし、ページングに関しては、クエリに新しい引数を追加することでそれを機能させることができました。

<?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.
    }
?>

$paged変数は、GETによって現在のページがURLで渡されるのを手助けします。

繰り返しますが、それが最善の方法であるかどうかはわかりません。しかし、それは私のために仕事をしました。

誰かに役立つことを願っています。

4
HamzStramGram

$ args配列に、すべての商品を表示するために'posts_per_page' => -1を追加できるはずです。結果は次のようになります。

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