Nano Hash - криптовалюты, майнинг, программирование

Ограничение рекомендуемых продуктов Woocommerce в WP_Query

Я хочу получить 3 избранных товара в шапке сайта. Но мой запрос продолжает возвращать неограниченное количество результатов.

Я искал в Интернете решение и наткнулся на ответы, в которых все говорят одно и то же с точки зрения запроса. Что я могу делать неправильно?

$meta_query  = WC()->query->get_meta_query();
$tax_query   = WC()->query->get_tax_query();
$tax_query[] = array(
    'taxonomy' => 'product_visibility',
    'field'    => 'name',
    'terms'    => 'featured',
    'operator' => 'IN',
);

$args = array(
    'post_type'           => 'product',
    'post_status'         => 'publish',
    'posts_per_page'      => 2,
    'meta_query'          => $meta_query,
    'tax_query'           => $tax_query,
);

$featured_query = new WP_Query( $args );

if ($featured_query->have_posts()) {

    while ($featured_query->have_posts()) : 

        $featured_query->the_post();

        $product = get_product( $featured_query->post->ID );

        echo $product->title; echo "test";
        // Product info here

    endwhile;

}

wp_reset_query();

Следующий запрос возвратил 20 результатов. Код был помещен в header.php. Использование woocommerce 3.x.


Ответы:


1

Во-первых, ваш код немного устарел, начиная с Woocommerce 3, так как get_product() нужно заменить на wc_get_product(), а $product->title; на $product->get_title();
После того, как вы закончите, ваш код заработает, и вы получите 3 рекомендуемых продукта:

$meta_query  = WC()->query->get_meta_query();
$tax_query   = WC()->query->get_tax_query();
$tax_query[] = array(
    'taxonomy' => 'product_visibility',
    'field'    => 'name',
    'terms'    => 'featured',
    'operator' => 'IN',
);

$featured = new WP_Query( array(
    'post_type'           => 'product',
    'post_status'         => 'publish',
    'posts_per_page'      => 3, // <==  <==  <==  3 products
    'meta_query'          => $meta_query,
    'tax_query'           => $tax_query,
) );

// Get the products count in the query
echo '<p>Featured products count: ' .$featured->post_count . '</p>';

if ($featured->have_posts()) : while ($featured->have_posts()) : 
    $featured->the_post();

    $product = wc_get_product( $featured->post->ID );

    echo $product->get_title() . '<br>';
    // Product info here

endwhile; endif;

wp_reset_postdata();

Это должно работать для вас, так как я успешно протестировал этот код в файле header.php…

Как и до Woocommerce 3, «рекомендуемые продукты» обрабатывались метаданными публикации (метазапросом), вам может потребоваться обновить количество условий продукта, перейдя в настройки Woocommerce > статус > инструменты. В разделе "Счетчики сроков" нажмите "Пересчет сроков".

31.07.2018

2

Вы должны использовать wp_reset_postdata() вместо wp_reset_query(), поскольку WP_query не перезаписывает основной запрос.

Если это не решит вашу проблему, убедитесь, что все другие пользовательские циклы используют соответствующий сброс и/или попробуйте переименовать переменную $featured_query, если вы используете ее в другом месте — возможно, она наследует сообщения из предыдущего цикла.

Вы также можете попробовать добавить аргументы 'nopaging' => true и 'ignore_sticky_posts' => true

Я ненавижу предлагать это, но если вы не можете понять, почему он возвращает 20 сообщений вместо 2, вы можете просто break ваш цикл while со счетчиком:

if ($featured_query->have_posts()) {
    $counter = 0;
    while ($featured_query->have_posts()) : $featured_query->the_post();

        /* Do post stuff here */

        $counter++;

        if( $counter == 2 ) break;
    endwhile;
}
31.07.2018
Новые материалы

Кластеризация: более глубокий взгляд
Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

Как написать эффективное резюме
Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

Частный метод Python: улучшение инкапсуляции и безопасности
Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

Как я автоматизирую тестирование с помощью Jest
Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..