如何在 WP 自定义循环中显示随机特色产品(woocommerce)?

How to show random featured products (woocommerce) in a WP custom loop?

我正在尝试在 Wordpress 中为 Woocommerce 产品设置一个自定义循环。我想在循环中展示一个随机的特色产品。但出于某种原因,它没有正确理解我的论点,而是从所有可用产品中随机选择一个产品。

这是我目前正在使用的代码。它确实显示了一个随机产品,但它忽略了代码的特色部分。

$args = array(
    'posts_per_page'   => 1,
    'orderby'          => 'rand',
    'post_type'        => 'product',
    'meta_query'  => array(
        'key'     => '_featured',
        'value'   => 'yes'
    )
);

$loop = new WP_Query( $args );
while ( $loop->have_posts() ) : $loop->the_post(); global $product; ?>

<li>
    <a href="<?php echo the_permalink(); ?>">
        <h3><?php the_title(); ?></h3>
    </a>
</li>

<?php endwhile;
wp_reset_query(); ?>

有人可以引导我走向正确的方向吗?

提前致谢!

我认为您的键值数组在预期的数组层次结构中太靠上了,试试这个:

$args = array(
    'posts_per_page'   => 1,
    'orderby'          => 'rand',
    'post_type'        => 'product',
    'meta_query'  => array(
        array(
            'key'     => '_featured',
            'value'   => 'yes',
        )
    )
);

我刚遇到这个,

它不直接针对您的问题,但可能是它的基础。

似乎特色项目不再存储为元:

    $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',
    );

$query_args = array(
    'post_type'           => 'product',
    'post_status'         => 'publish',
    'ignore_sticky_posts' => 1,
    'posts_per_page'      => 1,
    'meta_query'          => $meta_query,
    'tax_query'           => $tax_query,
);`

我遇到了同样的问题。试试这个 !适合我

<?php
         $featured_query = new WP_Query( array(
             'tax_query' => array(
                     array(
                     'taxonomy' => 'product_visibility',
                     'field'    => 'name',
                     'terms'    => 'featured',
                     'operator' => 'IN'
                 ),
          ),
     ) );
?>

WooCommerce 3 中的特色产品循环

<ul class="products">
<?php
    $args = array(
        'post_type'      => 'product',
        'posts_per_page' => 12,
        'orderby'        => 'rand',
        'tax_query' => array(
                array(
                    'taxonomy' => 'product_visibility',
                    'field'    => 'name',
                    'terms'    => 'featured',
                ),
            ),
        );
    $loop = new WP_Query( $args );
    if ( $loop->have_posts() ) {
        while ( $loop->have_posts() ) : $loop->the_post();
            wc_get_template_part( 'content', 'product' );
        endwhile;
    } else {
        echo __( 'No products found' );
    }
    wp_reset_postdata();
?>