android - 如何从 woocommerce Rest api 获取特定的 json 字段

标签 android wordpress woocommerce-rest-api

我已经使用 woocommerce Rest api 从我的 WordPress 网站获取了 json 数据,响应如下:

[{"id":4077,"name":"Work Benches","slug":"work-benches","parent":4076,"description":"","display":"default","image":null,"menu_order":0,"count":10,"_links":{"self":[{"href":"https:\/\/www.fynds.co.uk\/wp-json\/wc\/v3\/products\/categories\/4077"}],"collection":[{"href":"https:\/\/www.fynds.co.uk\/wp-json\/wc\/v3\/products\/categories"}],"up":[{"href":"https:\/\/www.fynds.co.uk\/wp-json\/wc\/v3\/products\/categories\/4076"}]}},{"id":4802,"name":"Work Lights","slug":"work-lights","parent":4073,"description":"","display":"default","image":null,"menu_order":0,"count":23,"_links":{"self":[{"href":"https:\/\/www.fynds.co.uk\/wp-json\/wc\/v3\/products\/categories\/4802"}],"collection":[{"href":"https:\/\/www.fynds.co.uk\/wp-json\/wc\/v3\/products\/categories"}],"up":[{"href":"https:\/\/www.fynds.co.uk\/wp-json\/wc\/v3\/products\/categories\/4073"}]}},{"id":4029,"name":"Work Safety Protective Equipment","slug":"work-safety-protective-equipment","parent":0,"description":"","display":"default","image":null,"menu_order":0,"count":53,"_links":{"self":[{"href":"https:\/\/www.fynds.co.uk\/wp-json\/wc\/v3\/products\/categories\/4029"}],"collection":[{"href":"https:\/\/www.fynds.co.uk\/wp-json\/wc\/v3\/products\/categories"}]}},{"id":5248,"name":"Yoga & Pilates Blocks","slug":"yoga-pilates-blocks","parent":4296,"description":"","display":"default","image":null,"menu_order":0,"count":1,"_links":{"self":[{"href":"https:\/\/www.fynds.co.uk\/wp-json\/wc\/v3\/products\/categories\/5248"}],"collection":[{"href":"https:\/\/www.fynds.co.uk\/wp-json\/wc\/v3\/products\/categories"}],"up":[{"href":"https:\/\/www.fynds.co.uk\/wp-json\/wc\/v3\/products\/categories\/4296"}]}},{"id":4556,"name":"Yoga & Pilates Mats","slug":"yoga-pilates-mats","parent":4296,"description":"","display":"default","image":null,"menu_order":0,"count":22,"_links":{"self":[{"href":"https:\/\/www.fynds.co.uk\/wp-json\/wc\/v3\/products\/categories\/4556"}],"collection":[{"href":"https:\/\/www.fynds.co.uk\/wp-json\/wc\/v3\/products\/categories"}],"up":[{"href":"https:\/\/www.fynds.co.uk\/wp-json\/wc\/v3\/products\/categories\/4296"}]}}]

但是我只需要特定的属性,例如(id,name,slug)。

我搜索了很多问题,但没有明确的答案, 减少传入的json数据的目的是让应用程序运行得更快 更新 我已经尝试过没有 woocommerce Rest api

https://*myweb*/wp-json/wp/v2/posts?filter[posts_per_page]=10&fields=id,title

成功了 但不能像这样使用 woocommerce Rest api:

https://www.***/wp-json/wc/v3/products?consumer_key=***&consumer_secret=****&per_page=10&field=id,name

最佳答案

其实有办法,但是需要在woocommerce的functions.php中写一个hook;)

假设以下 URL http://localhost/wp-json/wc/v3/products?fields=sku,name

诀窍是fields参数,它有一个逗号分隔的字段列表,您要检索这些字段。

所以你在 woocommerce 中 Hook 了这种行为......类似的东西:

add_filter( 'woocommerce_rest_prepare_product_object', 'my_woocommerce_rest_prepare_product_object', 10, 3 );
function my_woocommerce_rest_prepare_product_object( $response, $object, $request ) { 

    $data = $response->get_data();
    $newdata = [];
    foreach ( explode ( ",", $request['fields'] ) as $field ) {
        $newdata[$field] = $data[$field];
    }
    $response->set_data( $newdata );

    return $response;
}

还有...

 {
    "sku": "544392",
    "name": "ACIDET 3 EN 1 GALON",
    "_links": {
        "self": [
            {
                "href": "http://localhost/wp-json/wc/v3/products/35809"
            }
        ],
        "collection": [
            {
                "href": "http://localhost/wp-json/wc/v3/products"
            }
        ]
    }
},
{
    "sku": "544391",
    "name": "DESTAPADOR CANIERIA LEJIA GEL SELLO ROJOGL",
    "_links": {
        "self": [
            {
                "href": "http://localhost/wp-json/wc/v3/products/35808"
            }
        ],
        "collection": [
            {
                "href": "http://localhost/wp-json/wc/v3/products"
            }
        ]
    }
},
{
    "sku": "544389",
    "name": "ACIDET 3 EN 1 950ML",
    "_links": {
        "self": [
            {
                "href": "http://localhost/wp-json/wc/v3/products/35807"
            }
        ],
        "collection": [
            {
                "href": "http://localhost/wp-json/wc/v3/products"
            }
        ]
    }
},

...

希望这有帮助!顺便说一句,我设计了这个解决方案,深入阅读源代码。

:)

关于android - 如何从 woocommerce Rest api 获取特定的 json 字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56678243/

相关文章:

android更新项目——路径 "command not found"

java - 如何动态引用 XML id 来播放声音

javascript - 在 Wordpress 的一些管理页面上自定义 css 和 JS

javascript - 无法在自定义 WordPress 主题中运行 JS 文件

php - 如何在新订单 WooCommerce 电子邮件通知中将 "Product"更改为 "Service"

wordpress - WooCommerce Rest API 按 slug 获取产品

java - 通过 okhttp 客户端处理 woocommerce api 的签名基字符串时出现意外的 url

java - Google 开发者控制台...没有升级到产品操作?

android - 预填充数据库 - Android 应用程序

php - 在 woocommerce 中以编程方式添加产品