通过WooCommerce按类别显示所有产品


13

使用WooCommerce,我希望将商店中的所有类别显示为标题,其所有产品在下面以无序列表的形式列出。这可能吗?我看过几件事,可以显示类别列表或特定类别的产品列表,但是没有任何内容可以像我描述的那样循环显示所有内容。

这是我目前用来列出所有类别的内容:

<?php
$args = array(
    'number'     => $number,
    'orderby'    => $orderby,
    'order'      => $order,
    'hide_empty' => $hide_empty,
    'include'    => $ids
);
$product_categories = get_terms( 'product_cat', $args );
$count = count($product_categories);
if ( $count > 0 ){
    foreach ( $product_categories as $product_category ) {
        echo '<h4><a href="' . get_term_link( $product_category ) . '">' . $product_category->name . '</h4>';
    }
}
?> 

您只需要一个循环。在您的内部foreach(),运行一个新程序WP_Query()以获取该术语中的所有产品。然后遍历这些产品。
helgatheviking

我想我知道如何做到这一点,但是我找不到关于使用PHP按类别列出产品的任何信息(我所能找到的只是短代码废话)。如果您可以告诉我该代码是什么样的,那么我应该可以弄清楚其余的代码。
JacobTheDev 2014年

2
您不需要简码,按类别列出产品只是一个Tax Query
helgatheviking

我知道我不需要简码,我只是说那是我能找到的,这无济于事。您提供的链接看起来很有希望,我明天会试一试并报告,谢谢。
JacobTheDev 2014年

1
好。如果您仍然遇到问题,请尝试使用新的编码方法来编辑问题,我会看一下。
helgatheviking 2014年

Answers:


25

弄清楚了!下面的代码自动列出所有类别以及每个类别的帖子!

$args = array(
    'number'     => $number,
    'orderby'    => 'title',
    'order'      => 'ASC',
    'hide_empty' => $hide_empty,
    'include'    => $ids
);
$product_categories = get_terms( 'product_cat', $args );
$count = count($product_categories);
if ( $count > 0 ){
    foreach ( $product_categories as $product_category ) {
        echo '<h4><a href="' . get_term_link( $product_category ) . '">' . $product_category->name . '</a></h4>';
        $args = array(
            'posts_per_page' => -1,
            'tax_query' => array(
                'relation' => 'AND',
                array(
                    'taxonomy' => 'product_cat',
                    'field' => 'slug',
                    // 'terms' => 'white-wines'
                    'terms' => $product_category->slug
                )
            ),
            'post_type' => 'product',
            'orderby' => 'title,'
        );
        $products = new WP_Query( $args );
        echo "<ul>";
        while ( $products->have_posts() ) {
            $products->the_post();
            ?>
                <li>
                    <a href="<?php the_permalink(); ?>">
                        <?php the_title(); ?>
                    </a>
                </li>
            <?php
        }
        echo "</ul>";
    }
}

真好 如果您真的想发疯,则可能需要研究Transients API ...,这将帮助您避免在每次页面加载时运行如此多的查询。
helgatheviking 2014年

如何获得每个类别的图像缩略图?
艾丽莎·雷耶斯

@AlyssaReyes类别本质上没有缩略图。您是否为此为此类别设置了自定义字段?您能否将其发布在新问题中,并提供更多详细信息,并将链接发送给我,以便我更好地理解?
JacobTheDev '16

1
谢谢您,您为我节省了一些时间,并设定了正确的方向。我可以改善此答案的唯一方法是使用WooCommerce的内置查询类:WC_Product_Query,而不是WP_Query,然后使用foreach循环而不是while循环。出于以下原因,请查看Github查询文档:github.com/woocommerce/woocommerce/wiki/…,但要旨是:>“自定义WP_Queries查询可能会破坏WooCommerce未来版本中的代码作为数据转向自定义表格以提高性能。”
UncaughtTypeError
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.