【问题标题】:Get only specific data on a product query in WooCommerce在 WooCommerce 中仅获取有关产品查询的特定数据
【发布时间】:2020-01-23 14:12:43
【问题描述】:

我正在尝试将 WooCommerce 中的所有产品放在一个数组中,稍后我将使用它与外部数据库同步。

在下面的代码中,我使用wc_get_products() 函数为每个产品返回大量数据(我大部分不需要)

$args = array(
'status' => 'publish',
'limit' => -1,
);
$wooExistingProducts = wc_get_products($args);

我能做些什么来只获取产品 ID、产品名称和产品价格?

对于每个产品,我都希望有类似的东西:

[
{
id: 315892135,
name: Food for Hamster
price: 5$
}
{
id: 129414,
name: ....
price:...
}
....
]

我尝试改用WP_Query,但没有提供更好的解决方案。

【问题讨论】:

    标签: php sql wordpress woocommerce product


    【解决方案1】:

    实际上,wc_get_products() 的唯一可用过滤器是 'return' => 'ids',以便在使用 WC_Product_Query 时仅获取产品 IDS。

    解决方案是使用 直接 SQL 查询和 WordPress WPDB 类,因为它是轻量级最有效的 在产品查询中根据需要获取数据的方式。

    在以下查询中,我们必须排除可变产品,因为它们有多个价格(每个变体一个)

    global $wpdb;
    
    $products_query = $wpdb->get_results( "
        SELECT  p.ID AS id,
                p.post_title AS name,
                Max(CASE WHEN pm.meta_key = '_price' AND  p.ID = pm.post_id THEN pm.meta_value END) AS price
        FROM    {$wpdb->prefix}posts p
                INNER JOIN {$wpdb->prefix}postmeta pm
                    ON p.ID = pm.post_id
        WHERE   p.post_type = 'product'
                AND p.post_status = 'publish'
                AND p.post_parent != 0
        GROUP BY p.ID
        ORDER BY p.ID ASC;
    " );
    
    // Testing raw output
    echo '<pre>'; print_r( $products_query ); echo '</pre>'; 
    

    包括产品变化 (选项)

    如果您想包含可变产品的产品变体,您应该替换此行:

    WHERE   p.post_type = 'product'
    

    作者:

    WHERE   p.post_type IN ('product','product_varation')
    

    我不建议您在您的情况下使用wc_get_products()get_posts() (WP_Query)

    • 您还将获得可变产品(根据其变化具有多种价格)
    • 因为它更重(即使您只查询'ids' 字段,也只能获取产品ID),因为您必须为每个产品设置数据,进行多个数据库查询。

    【讨论】:

    • 非常感谢 Loic,非常感谢您的额外解释!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-10-11
    • 2018-12-24
    • 2021-01-24
    • 1970-01-01
    • 2018-07-18
    • 2023-03-04
    • 1970-01-01
    相关资源
    最近更新 更多