web-dev-qa-db-ja.com

WooCommerceでWP_Queryを使用するときにWC_Productオブジェクトを取得する方法


_WP_Query_を使用して製品を一覧表示しようとしています。次のようなクエリを使用しました。

_$slider_products_q = new WP_Query([
     'posts_per_page'    => 8,
      'post__in'          => $slides_product_ids,
      'post_type'         => 'product',
      'orderby'           => 'date',
      'order'             => 'DESC'
]);
_

完全に機能しますが、_get_html_price_などのループ内でWooCommerceメソッドにアクセスする場合は、少し注意が必要です。

私はなんとかこの方法を使用してそれを処理しましたが、パフォーマンスは良くなく、クエリのロードには約0.7秒かかります。

これは私が各アイテムをループする方法です:

_if ($slider_products_q->have_posts()):
   while($slider_products_q->have_posts()):
       $slider_products_q->the_post();         
       $product_id = get_the_ID();
       global $product;
       ...
_

次に、$product->get_price_html();メソッドを呼び出すことができます。

また、Woocommerceメソッドを使用して製品のクエリを実行しようとしましたが、それらは多くのカスタム属性をロードするため、クエリにはさらに時間がかかります。

これを改善する方法について何か提案はありますか?

ちなみに、私は_get_price_html_などのWoocommerceメソッドの使用のみに関心があります。
属性やカスタム用語はまったく必要ありません。

1
MMT

_global $product;_はカスタム_WP_Query_では機能せず、代わりにwc_get_product()を使用します。

_if ($slider_products_q->have_posts()):
   while($slider_products_q->have_posts()):
       $slider_products_q->the_post();         
       $product_id = get_the_ID();
       $product = wc_get_product($product_id);

       $price_html = $product->get_price_html()
       // ...
_

これで、_WC_Product_変数で任意の_$product_メソッドを使用できます。

または、 _WC_Product_query_ を使用することもできます。

2
LoicTheAztec