首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >有没有办法通过WooCommerce API获得顶级销售产品?

有没有办法通过WooCommerce API获得顶级销售产品?
EN

Stack Overflow用户
提问于 2018-03-24 05:42:04
回答 4查看 2.4K关注 0票数 0

我试图通过Woocommerce获得顶级销售产品的列表,我使用的是WooCommerce API的版本1。我尝试了下面的endpont,但是它不起作用:

我的请求:

销售量

但它的响应:

代码语言:javascript
代码运行次数:0
运行
复制
{
    "code": "rest_invalid_param",
    "message": "Invalid parameter(s): orderby",
    "data": {
        "status": 400,
        "params": {
            "orderby": "orderby is not one of date, id, include, title, slug."
        }
    }
}

orderby不是一个日期,id,包含,标题,段塞。所以,我可以按日期,ID,包括,标题和段塞订购。我怎样才能用total_sales点菜。做得到吗?或者你能提出其他的建议吗?

EN

回答 4

Stack Overflow用户

发布于 2018-03-24 06:44:51

您需要在主题(或插件文件)中通过functions.php添加REST过滤器,以确保允许使用meta_keymeta_value

代码语言:javascript
代码运行次数:0
运行
复制
add_filter('rest_endpoints', function ($routes) {
    // I'm modifying multiple types here, you won't need the loop if you're just doing WooCommerce products
    foreach (['product', 'another_type'] as $type) {
        if (!($route =& $routes['/wp/v2/' . $type])) {
            continue;
        }

        // Allow ordering by my meta value
        $route[0]['args']['orderby']['enum'][] = 'meta_value_num';

        // Allow only the meta keys that I want
        $route[0]['args']['meta_key'] = array(
            'description'       => 'The meta key to query.',
            'type'              => 'string',
            'enum'              => ['my_meta_key', 'another_key'],
            'validate_callback' => 'rest_validate_request_arg',
        );
    }

return $routes;
});

您可以在枚举值中添加任何您想要添加的元键。这样做(而不是添加过滤器来为所有meta_key添加端点)可以防止保存为元数据的敏感信息公开可读性。

然后,为您的URL尝试以下内容:

https://DOMAINNAME.com/wp-json/wc/v1/products?consumer_key=CONSUMER_KEY&consumer_secret=CONSUMER_SECRET&category=CATEGORY_ID&order=asc&filter[meta_key]=total_sales&orderby=meta_value_num

票数 1
EN

Stack Overflow用户

发布于 2021-02-01 19:13:40

对于那些还不知道这个问题的人来说

如所示。您现在可以通过API (根据我的理解,这是最畅销的产品列表)获取最受欢迎的产品;

GET /wp-json/wc/v3/products?orderby=popularity&order=desc

这样你就能得到最受欢迎的产品,按销售数量降序。这一点目前没有记录在案。 (截至2021年2月2日)。

可能的排序参数的总列表是:dateidincludetitleslugmodifiedmenu_orderpricepopularityrating

票数 0
EN

Stack Overflow用户

发布于 2019-12-31 00:39:42

我知道这个问题很老,但是我写这个函数是因为我和这个问题有相同的问题。

产品的total_sales元数据从来都不正确。别用它。

该函数只对处理已完成的订单按产品ID计算销售总额,因此不计算任何已取消、退款、待决的订单。

它是基于这样的答案:获得产品的所有订单

代码语言:javascript
代码运行次数:0
运行
复制
function get_total_sales_product_id( $product_id, $order_status = array( 'wc-completed', 'wc-processing' ) ){
global $wpdb;

$order_ids = $wpdb->get_col("
    SELECT order_items.order_id
    FROM {$wpdb->prefix}woocommerce_order_items as order_items
    LEFT JOIN {$wpdb->prefix}woocommerce_order_itemmeta as order_item_meta ON order_items.order_item_id = order_item_meta.order_item_id
    LEFT JOIN {$wpdb->posts} AS posts ON order_items.order_id = posts.ID
    WHERE posts.post_type = 'shop_order'
    AND posts.post_status IN ( '" . implode( "','", $order_status ) . "' )
    AND order_items.order_item_type = 'line_item'
    AND order_item_meta.meta_key = '_product_id'
    AND order_item_meta.meta_value = '$product_id'
");

$unique_order_ids = array_unique($order_ids);

$total_sales = 0;
foreach ($unique_order_ids as $order_id) {
    $order = wc_get_order($order_id);
    foreach ($order->get_items() as $item_key => $item ) {  
        if ($item->get_product()->get_id() == $product_id) {
            $total_sales = $total_sales +  $item->get_quantity();
        }
    }
}

return $total_sales;

}

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49461661

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档