2017-07-20 14 views
1

古いウォーコマースバージョンのeshopで3000個の変数を持つ製品を使用しているときに、どのようにしてループを繰り返そうとしているときに、どうすればそれが可能になるのか質問したいと思います。WooCommerceプロダクトコレクションの問題

次のコードは、私が製品フィードを生成するために使用しています。

$args = array('post_type' => 'product'); 
$loop = new WP_Query($args); 
while ($loop->have_posts()) : $loop->the_post(); 

また、変数製品は、私が理解するようにバリエーションをサポートするため、変数と呼ばれます。つまり、3000の変数製品は3000の「通常の」製品ではなく、代わりに正しい数の300が表示されます。

答えて

1

製品(シンプルまたは可変)と製品バリエーション(可変製品に残っている)が混在している可能性があります... WP_Queryに製品(シンプルおよび可変)を表示する必要があります。

'post_type' => 'product'とすると、同時に簡単で多様な製品が得られます。

不足している引数は、-1に設定するposts_per_pageです。

だからあなたのコードは次のようになります。

$args = array('post_type' => 'product', 'posts_per_page' => -1); 
$loop = new WP_Query($args); 
while ($loop->have_posts()) : 
    $loop->the_post(); 
    // set all product IDs in an array 
    $all_product_ids[] = $loop->post->ID; 
endwhile; 

// Testing: Output the number of products in that query 
echo '<p>Products count: ' . count($all_product_ids) . '</p>'; 

次に、あなたはすべてのあなたのプロダクトを取得します。


あなたはWPDBクエリを使用しようとすることができかもしれませ:あなたの答えのための

## --- THE SQL QUERY --- ## 

global $wpdb; 

$table_name = $wpdb->prefix . "posts"; 

$product_ids_array = $wpdb->get_col(" 
    SELECT `ID` 
    FROM `$table_name` 
    WHERE `post_status` LIKE 'publish' 
    AND `post_type` LIKE 'product' 
"); 

## --- TESTING OUTPUT --- ## 

// Testing raw output of product IDs 
print_r($product_ids_arr); 

// Number of products 
$products_count = count($product_ids_arr); 
echo '<p>Products count: '. $products_count. '</p>'; 

## --- THE LOOP --- ## 

foreach ($product_ids_array as $product_id): 

    // Get an instance of WP_Product object 
    $product = new WC_Product($product_id); 

    // Use the WP_Product methods to get and output the necessary data 

endforeach; 
+0

ロイックのおかげで、私はチェックして、あなたに戻って取得します! – kn13

+0

あなたが私に提案したように修正を試みましたが、出力は同じです。 バックエンドには3000種類の変数製品がありますが、単純なものは81種類あります。だから、私は何が間違っているのか理解しようとしている。 – kn13

+0

ありがとうございます。@loictheaztecを追加しました! – kn13

関連する問題