我想在网站的标题中获得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。
答案 0 :(得分: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;
}
答案 1 :(得分:2)
首先,由于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设置>状态>工具。在“条款计数” 部分中,点击“重新计算条款”。