私のhome-page.phpテンプレートに私のwoocommerceストアからの6つの特集商品を表示したいです。いくつかの調査の結果、私はこれを行う正しい方法がカスタムループを介していることに気付きました(私はスタイリングなどのためにクラスを追加したいのでショートコードを使いたくない)。おすすめ商品は「_featured」です。以下のコードをまとめて、私の店で特色のある商品として選択した商品を表示しましたが、うまくいきません。
<?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();
?>
引数を次のように変更してください。
$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ショートコードの処理方法がわかります。
これは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を参照してください。
おすすめ商品Loop in 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();
?>
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/
に基づく: 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();
私はこれがかなり古いことを知っています、しかし私はちょうど代替の解決策を共有しました ここ そして私はそれがこのトピックに達する人々を助けることができると思います。
meta_query
またはtax_query
を使う代わりに、 wc_get_featured_product_ids() を使うこともできます。
$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 );
私はそれが役立つことを願っています!
<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-->
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;
?>