Почему цикл продукта не работает вне файла archive-product.php?

Я экспериментирую с созданием собственного сайта электронной коммерции и хочу отображать некоторые продукты на другой странице.

Когда я копирую этот цикл со страницы архива продукта на свою целевую страницу, он ничего не выводит.

<?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 () возвращает true (1), но wc_get_prop ('total') возвращает 0, что соответствует значениям по умолчанию wc_setup_loop (), который вызывается в wc_get_loop_prop () перед тем, как вернуть true или false. Я не могу найти вызываемую wc_setup_loop () до того, как мы запустим цикл продуктов archive-product.php, так почему же там что-то работает, а не на моей целевой странице; за исключением окружающего HTML и нескольких действий, код похож.

Причина, по которой я просто хочу скопировать и вставить этот код, - это эксперименты, меня просто сводит с ума, что он не будет работать на новой странице.

Если это поможет, моя страница такая же

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

ПРИМЕЧАНИЕ: я новичок в php


person Sangoma    schedule 21.04.2020    source источник
comment
Для пользовательских циклов лучше использовать get_posts (), если вам нужно разбить на страницы, WP_Query это вариант. Они быстрее и не связываются с другими запросами в WP. Изучение этих методов лучше, чем код шаблона woocommerce, потому что он создан для конкретных страниц.   -  person Gendrith    schedule 22.04.2020
comment
@Gendrith Понятно, спасибо за советы, я обязательно прочитаю эти вещи   -  person Sangoma    schedule 22.04.2020


Ответы (1)


глобальные сообщения для архива настроены на тип сообщения о продуктах, и когда вы создаете отдельную страницу или шаблон страницы, нет способа узнать, что вы хотите отобразить здесь, именно по этой причине мы используем WP_Query, вы можете прочитать это статья

person wazid shah    schedule 22.04.2020
comment
Отлично! Благодарю за ссылку; Я немного сошел с ума, пытаясь во всем разобраться; вы случайно не знаете, где расположены глобальные посты? (просто любопытно посмотреть, как это все работает) - person Sangoma; 22.04.2020