Запрос WP: Исключить скрытые продукты из списка продуктов WooCommerce


Я надеюсь, что это не слишком специфично для WooCommerce.

У меня есть отличный шорткод, который отображает список всех моих продуктов с артикулами. Тем не менее, он также включает продукты, которые я опубликовал, но установил для видимости каталога значение "скрыто".

Я не могу найти аргумент/параметр, чтобы исключить скрытые продукты (или включить только те, которые помечены как Каталог/Поиск).

Я знаю, что это должно быть просто; я просто не нашел этого. Спасибо за любую помощь.

Вот код:

<?php
$params = array('posts_per_page' => -1, 'post_type' => 'product', 'orderby' => 'menu-order', 'order' => 'asc');
$wc_query = new WP_Query($params);
?>
<table class="product-list tablesorter"><thead><tr><th>SKU</th><th>Product Name</th></tr></thead><tbody>
     <?php if ($wc_query->have_posts()) : ?>
     <?php while ($wc_query->have_posts()) :
                $wc_query->the_post(); ?>
 <tr>
<td><?php global $product; echo $product->get_sku(); ?></td>
<td><a href="<?php the_permalink(); ?>" title="<?php the_title(); ?>"><?php the_title(); ?></a></td>
</tr>
     <?php endwhile; ?>
     <?php wp_reset_postdata(); ?>
     <?php else:  ?>
     <tr><td>
          <?php _e( 'No Products' ); ?>
    </td> </tr>
     <?php endif; ?>
</tbody>
</table>
Author: Peter Ingersoll, 2016-06-30

2 answers

Важно: Следующее работает только для версий WooCommerce менее 3.0. Более актуальный ответ см. в другом ответе калле.

WooCommerce сохраните эти данные как metadata, поэтому вам нужно будет выполнить Мета-запрос против имени _visibility. Что-то вроде:

'meta_query' => array(
    array(
        'key'       => '_visibility',
        'value'     => 'hidden',
        'compare'   => '!=',
    )
)

Это приведет к удалению всех сообщений, которые не имеют мету _visibility, равную hidden.

 3
Author: Howdy_McGee, 2018-02-02 15:26:49

Начиная с Woocommerce 3. Видимость изменена на таксономию вместо мета. Поэтому вам нужно изменить мета_запрос на tax_query. Чтобы показывать только видимые продукты,

'tax_query' => array(
    array(
        'taxonomy' => 'product_visibility',
        'field'    => 'name',
        'terms'    => 'exclude-from-catalog',
        'operator' => 'NOT IN',
    ),
),

И примеры рекомендуемых продуктов

'tax_query' => array(
    array(
        'taxonomy' => 'product_visibility',
        'field'    => 'name',
        'terms'    => 'featured',
    ),
),

Возможные термины: "исключить из поиска", "исключить из каталога", "рекомендуемый", "из запаса".

 19
Author: kalle, 2018-02-02 15:25:50