<?php
$args = array(
'post_type' => 'product',
'stock' => 1,
'showposts' => 6,
'orderby' => 'date',
'order' => 'DESC' ,
'meta_query' => array(
array(
'key' => '_featured',
'value' => 0,
'compare' => '>',
'type' => 'numeric'
)
)
);
$loop = new WP_Query( $args );
while ( $loop->have_posts() ) : $loop->the_post(); global $product; ?>
<li>
<?php
if ( has_post_thumbnail( $loop->post->ID ) )
echo get_the_post_thumbnail( $loop->post->ID, 'shop_catalog' );
else
echo '<img src="' . woocommerce_placeholder_img_src() . '" alt="Placeholder" width="65px" height="115px" />';
?>
<h3><?php the_title(); ?></h3>
<?php
echo $product->get_price_html();
woocommerce_template_loop_add_to_cart( $loop->post, $product );
?>
</li>
<?php
endwhile;
wp_reset_query();
?>
#1 楼
更改您的参数,使其像这样:$meta_query = WC()->query->get_meta_query();
$meta_query[] = array(
'key' => '_featured',
'value' => 'yes'
);
$args = array(
'post_type' => 'product',
'stock' => 1,
'showposts' => 6,
'orderby' => 'date',
'order' => 'DESC',
'meta_query' => $meta_query
);
如果您去wp-content / plugins / woocommerce / includes / class-wc-shortcodes.php(@ 595)您可以找到如何完成WC短代码。
评论
他们要注意的关键是“ _featured”未存储为数值。它存储为字符串“是”或“否”。 OP问题中的其他所有内容都应该对我有用。
– i_a
16年7月3日在17:02
从WooCommerce 3.0开始,此解决方案不再起作用。请在下面查看我更新的答案。
– dpruth
18年6月12日在19:02
#2 楼
这已在WooCommerce 3.0中更改。它不仅是meta_query,而且现在包括tax_query。参数现在是: $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',
'ignore_sticky_posts' => 1,
'posts_per_page' => $atts['per_page'],
'orderby' => $atts['orderby'],
'order' => $atts['order'],
'meta_query' => $meta_query,
'tax_query' => $tax_query,
);
请参阅woocommerce / includes / class-wc-shortcodes.php
评论
正是我想要的!
–joshkrz
18年5月10日在22:09
同样对于Woocommerce 3.0,他们建议使用wc_placeholder_img_src而不是woocommerce_placeholder_img_src。
–机器人尼克
18年5月25日在0:46
#3 楼
WooCommerce 3中的特色产品循环<ul class="products">
<?php
$args = array(
'post_type' => 'product',
'posts_per_page' => 12,
'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();
?>
#4 楼
根据WooCommerce Wiki:构建定制的WP_Queries或数据库查询(以检索产品)很可能会破坏WooCommerce的未来版本中的代码,因为数据将移向定制表以提高性能。
WooCommerce提倡使用
wc_get_products()
或WC_Product_Query()
代替WP_Query()
或get_posts()
。我写了一篇帖子,上面写的代码用来在这里实现您想要的: https://cfxdesign.com/create-a-custom-woocommerce-product-loop-the-right-way/
评论
抱歉,没有看到任何书面代码,很难理解您的文章。您能提供一些编码吗?
–嗨
19年5月5日在14:59
@HOY嵌入插件已损坏;现在已修复,您可以看到代码!
–cfx
19年6月5日在20:07
谢谢,在寻找解决方案时,我提出了以下解决方案。我不确定它与您的产品有何不同,因为我无法彻底检查您的产品,但是它很短,可以帮助我进行自定义产品循环。 kathyisawesome.com/woocommerce-modifying-product-query
–嗨
19-6-5 '20:28
#5 楼
我知道这已经很老了,但是我刚刚在这里分享了一个替代解决方案,我认为它也可以帮助那些达到此主题的人。您可以使用wc_get_featured_product_ids()代替
meta_query
或tax_query
太好了:$args = array(
'post_type' => 'product',
'posts_per_page' => 6,
'orderby' => 'date',
'order' => 'DESC',
'post__in' => wc_get_featured_product_ids(),
);
$query = new WP_Query( $args );
希望对您有所帮助!
#6 楼
基于:https://github.com/woocommerce/woocommerce/wiki/wc_get_products-and-WC_Product_Query我会尝试:
外部循环:
$args = array (
'limit' => 6,
'orderby' => 'title',
'order' => 'ASC',
'category' => $club_cat,
'stock_status' => 'instock',
'featured' => true,
);
$products = wc_get_products( $args );
循环中:
$query = new WC_Product_Query( array(
'limit' => 6,
'orderby' => 'title',
'order' => 'ASC',
'category' => $club_cat,
'stock_status' => 'instock',
'featured' => true,
'return' => 'ids',
) );
$products = $query->get_products();
#7 楼
人们应该开始使用wc_get_products,因为woocommerce表示这是检索产品的标准方法。 wc_get_products具有一个仅需设置为true的参数。因此代码就在下面。 <?php
// Display featured products by category. on this case its "shirts" which is the slug of the category.
$query_args = array(
'featured' => true,
'category' => array( 'shirts' ),
);
$products = wc_get_products( $query_args );
global $post;
$columns = wc_get_loop_prop( 'columns' );
?>
<div class="woocommerce columns-<?php echo esc_attr( $columns ); ?>">
<?php
woocommerce_product_loop_start();
foreach ($products as $product) {
$post = get_post($product->get_id());
setup_postdata($post);
wc_get_template_part('content', 'product');
}
wp_reset_postdata();
woocommerce_product_loop_end();
?>
</div>
在此处查看完整文章:https://jameshwartlopez.com/plugin/get-featured-products-of-a-category/
#8 楼
如果您查看wp_postmeta
表中的数据库,您会看到meta_key
将是_featured
,而meta_value
将是yes
或no
,因此要写0
或1
而不是值yes
或no
<?php
$q = new WP_Query([
'post_type' => 'product',
'stock' => 1,
'showposts' => 3,
'orderby' => 'date',
'order' => 'DESC',
'meta_query' => [
['key' => '_featured', 'value' => 'yes' ]
]
]);
if ( $q->have_posts() ) :
while ( $q->have_posts() ) : $q->the_post();
// display product info
endwhile; wp_reset_query();
endif;
?>
#9 楼
<ul class="products">
<?php
$args = array(
'post_type' => 'product',
'posts_per_page' => 12,
'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();
echo '<p>'.get_the_title().'</p>';
endwhile;
} else {
echo __( 'No products found' );
}
wp_reset_postdata();
?>
</ul><!--/.products-->
评论
请编辑您的答案,并添加解释:为什么这可以解决问题?
– fuxia♦
19年4月3日在14:40
评论
添加var_dump(get_meta_values('_featured','product');的结果;其中,get_meta_values函数由该答案中说明的自定义函数支持