我想问一下,当我在一个旧的woocommerce版本eshop中拥有3000个可变产品时,怎么可能呢?当我试图循环它们时,我只得到300回报。
我使用以下代码生成产品Feed。
$args = array( 'post_type' => 'product');
$loop = new WP_Query( $args );
while ( $loop->have_posts() ) : $loop->the_post();
此外,变量产品被称为变量,因为它们支持我所理解的变化。这意味着3000个变量产品不是3000"正常"产品,而我看到的300是正确的数量?
答案 0 :(得分:1)
可能是您正在混淆产品(简单或可变)和产品差异(保留给可变产品)......您需要在WP_Query
中展示产品(简单和可变),而不是产品变化。
使用 'post_type' => 'product'
,您可以同时获得简单且可变的产品。
缺少的参数 posts_per_page
设置为 -1
。
所以你的代码将是:
$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;