wc_get_products 未返回所有产品 - 如何触发获取所有产品?

问题描述 投票:0回答:1

我有以下代码:

$args = array(
    'limit' => -1,  // Attempt to fetch all products
    'return' => 'ids' // Fetch only IDs to optimize performance; remove this to get full product objects
);

$product_ids = wc_get_products($args);
echo "<pre>";
print_r($product_ids);
echo "</pre>";

这给出了以下输出:

Array
(
    [0] => 496
    [1] => 106
    [2] => 103
    [3] => 58
)

但是,我在 WooCommerce 中有 9 个产品。

以下代码

function dispProduct($id)
{
    $productArray = array(
        'product_id'       => wc_get_product($id)->get_id(),
        'name'             => wc_get_product($id)->get_name(),
        'sku'              => wc_get_product($id)->get_sku(),
        'price'            => wc_get_product($id)->get_price(),
        'stock_status'     => wc_get_product($id)->get_stock_status(),
        'total_sales'      => wc_get_product($id)->get_total_sales(),
        'regular_price'    => wc_get_product($id)->get_regular_price(),
        'sale_price'       => wc_get_product($id)->get_sale_price(),
        // Add more attributes as needed
    );
    return $productArray;
}


echo "<pre>";
print_r(dispProduct(620));
echo "</pre>";

退货

Array
(
    [product_id] => 620
    [name] => Wordfence Premium
    [sku] => 
    [price] => 1116
    [stock_status] => instock
    [total_sales] => 0
    [regular_price] => 1116
    [sale_price] => 
)

也就是说,可以找到产品620。

如果我转到 WooCommerce 中的产品,单击产品 620 下的“快速编辑”,然后单击“更新”按钮 - 不更改任何内容,然后返回第一个代码

Array
(
    [0] => 620
    [1] => 496
    [2] => 106
    [3] => 103
    [4] => 58
)

但是除了价格、名称、sku 等明显差异之外,我看不出 620 和 496 之间有任何显着差异(在使用快速编辑更新产品之前或之后)。

我怎样才能从 WooCommerce 获得所有产品?

php wordpress woocommerce
1个回答
0
投票

如果您在尝试使用 wc_get_products() 获取所有产品时只获得 4 个产品,而不是预期的 10 个产品,这可能是由于 WooCommerce 中的默认产品可见性设置所致。

默认情况下,WooCommerce 仅在查询结果中包含已发布的产品。

为了确保所有产品,无论其发布状态如何,都包含在查询结果中,您可以使用 status 参数并将其设置为“any”。以下是修改 $args 数组的方法:

    $args = array(
    'limit'  => -1,     // Attempt to fetch all products
    'return' => 'ids',  // Fetch only IDs to optimize performance
    'status' => 'any',  // Include products with any status ()
);

$product_ids = wc_get_products($args);
echo "<pre>";
print_r($product_ids);
echo "</pre>";
© www.soinside.com 2019 - 2024. All rights reserved.