为什么产品循环在 archive-product.php 文件之外不起作用?

Why doesn't the product loop work outside of the archive-product.php file?

我正在尝试创建一个自定义电子商务网站,我想在另一个页面上显示一些产品。

当我将此循环从存档产品页面复制到我的目标页面时,它没有输出任何内容

<?php
if (woocommerce_product_loop()) {

    woocommerce_product_loop_start();

    if (wc_get_loop_prop('total')) {
        while (have_posts()) {
            the_post();

            /**
             * Hook: woocommerce_shop_loop.
             */
            do_action('woocommerce_shop_loop');

            wc_get_template_part('content', 'product');
        }
    }

    woocommerce_product_loop_end();

    /**
     * Hook: woocommerce_after_shop_loop.
     *
     * @hooked woocommerce_pagination - 10
     */
    do_action('woocommerce_after_shop_loop');
} else {
    /**
     * Hook: woocommerce_no_products_found.
     *
     * @hooked wc_no_products_found - 10
     */
    do_action('woocommerce_no_products_found');
}
?>

到目前为止我所知道的是 woocommerce_product_loop() returns true (1) 但是 wc_get_prop('total') returns a 0 which符合wc_setup_loop() which is called in wc_get_loop_prop() before的默认值返回true或false。在我们开始 archive-product.php 产品循环之前,我找不到被调用的 wc_setup_loop() 那么为什么事情在那里工作而不是在我的目标页面上;除了周围的 HTML 和一些动作外,代码是相似的。

我只是想复制并粘贴这段代码的原因是为了实验,这让我抓狂,因为它不能在新页面上运行。

如果有帮助,我的页面就是这样

<?php get_header();?>
<div>
  <!-- paste code here -->
</div>
<?php get_footer();?>

注意:我是 php 新手

存档的全局 posts 设置为产品 post 类型,当您创建单独的页面或页面模板时,无法知道您想在此处显示什么正是我们使用 WP_Query 的原因,您可以阅读此 article