2012-09-24 16 views
17

私はwoocommerce用のカスタムテーマを作成しており、ミニ製品のディスプレイを作成する必要があります。私は、woocommerce apiのドキュメントを見つけるのに問題があります。私は反復処理に必要なプロダクトIDのカンマ区切りリストを持っていて、それぞれのカスタムミニ製品の表示を順番に表示します。WooCommerce idで商品を返します

$key_values = get_post_custom_values('rel_products_ids'); 
//get comma delimited list from product 

$rel_product_ids = explode(",", trim($key_values, ",")); 
// create array of just the product ids 

foreach ($rel_product_ids as $pid) { 
    //sequentially get each id and do something with it 

    $loop = new WP_Query(array('post__in' => $pid)); 
    // also tried ... 
    //$loop = new WP_Query(array('ID' => $pid)); 

    while ($loop->have_posts()) : $loop->the_post(); $_product = &new WC_Product($loop->post->ID); 
     //do stuff here I have stripped the html in favor of getting to the meat of the issue 
     woocommerce_show_product_sale_flash($post, $_product); 
     if (has_post_thumbnail($loop->post->ID)) echo get_the_post_thumbnail($loop->post->ID, 'shop_single'); 
     get_permalink($loop->post->ID); 
     the_title(); 
     $_product->get_price_html(); 
    endwhile; 
} 

助けてください。

ティム

+0

Woocommerceのドキュメントは、通常、本当の説明 –

答えて

46

もう一つの簡単な方法はWC_Product_Factoryクラスを使用して、関数get_product(ID)を呼び出すことです

http://docs.woothemes.com/wc-apidocs/source-class-WC_Product_Factory.html#16-63

サンプル:あなたは、すべて使用することができます

// assuming the list of product IDs is are stored in an array called IDs; 
$_pf = new WC_Product_Factory(); 
foreach ($IDs as $id) { 

    $_product = $_pf->get_product($id); 

    // from here $_product will be a fully functional WC Product object, 
    // you can use all functions as listed in their api 
} 

APIに記載されている関数呼び出し: http://docs.woothemes.com/wc-apidocs/class-WC_Product.html

+0

ああ、彼らは私が必要としていた製品の工場を持っています。魅力のように働く、ありがとう。 –

+0

@ Josh Mokは、woocommerceにデータベースからではなくAPIから製品を入手する方法はありますか? – ShaMoh

+0

Wooは、ショップのベンダー(クライアントではない)向けに完全にフラット化されたAPIを備えています。 https://docs.woocommerce.com/document/woocommerce-rest-api/ –

3

さてさて、ありがとう、私は絞ることに値します。 RTMは間違いなくWooCommerceのためのものではありません。 JOLTコーラ(すべての雹JOLTコーラ)のために解決策が見つかりました。

TASK: カスタムポストタイプに 'related_product_ids'という名前のフィールドが追加されました。だから、その投稿が表示されると、ミニ製品の表示が表示されます。

問題: 複数のIDがWP_Queryから返される問題が発生しました。

SOLUTION:

$related_id_list   = get_post_custom_values('related_product_ids'); 
    // Get comma delimited list from current post 
$related_product_ids  = explode(",", trim($related_id_list[0],',')); 
    // Return an array of the IDs ensure no empty array elements from extra commas 
$related_product_post_ids = array('post_type' => 'product', 
            'post__in' => $related_product_ids, 
            'meta_query'=> array( 
             array('key' => '_visibility', 
               'value' => array('catalog', 'visible'),'compare' => 'IN' 
             ) 
          ) 
);  
    // Query to get all product posts matching given IDs provided it is a published post 
$loop = new WP_Query($related_posts); 
    // Execute query 
while ($loop->have_posts()) : $loop->the_post(); $_product = get_product($loop->post->ID); 
    // Do stuff here to display your products 
endwhile; 

は、この上でいくつかの時間を費やしていることが誰のためにありがとうございます。

ティム

+2

とちょうどリスト機能とパラメータは、変更する必要があり、かなりまばらなことができます '新しいWP_Query ($ related_posts); ''新しいWP_Query($ related_product_post_ids);で '。乾杯! –

+0

'get_product'は廃止され、' wc_get_product'に置き換えてください。 –

1
global $woocommerce; 
var_dump($woocommerce->customer->get_country()); 
foreach (WC()->cart->get_cart() as $cart_item_key => $cart_item) { 
    $product = new WC_product($cart_item['product_id']); 
    var_dump($product); 
} 
+2

コードが何をし、それがどのように質問に答えるかを説明すれば、助けになると確信しています – ChrisW

29

このメソッドを使用:

$_product = wc_get_product(id); 

公式API-ドキュメント:wc_get_product

+0

これはこれを行う実際の方法です。毎回WCが使用しているインスタンスが存在するため、毎回WC_Product_Factoryを作成する必要はありません。 –

+0

このメソッドを使用すると、どうすればget_permalinkできますか? – huykon225

+0

@ huykon225 WooCommerceを呼び出す必要はありません: '$ link = get_permalink($ id);' – indextwo

関連する問題