如何添加额外的字段映射代码从第三方API


How To Add Additional Field Mappings To Code Pulling from Third Party API

我正在使用Church Community Builder API(官方文档,搜索"group profile"查看相关代码),并使用CCB Core WordPress Plugin从API同步组数据到自定义帖子类型(字段,分类法)。

CCB Core自动映射了很多这些数据,但它没有映射CCB用来区分一个组和另一个组的组ID值,我想同步它。

相关代码保存在函数get_groups_custom_fields_map()和get_groups_taxonomy_map()中。

我尝试在get_groups_taxonomy_map()中添加如下内容:

'group_id' => array (
   'api_mapping' => 'group',
   'data_type' => 'integer',
),

但这不起作用。有什么建议写代码拉在这个领域?

更新9/10/16 7:25 PM:

我想我已经非常接近了。

我从组配置文件下的API文档中获取XML,并通过simplexml运行它并生成以下输出。

然后,我将输出与get_groups_custom_fields_map和get_groups_custom_taxonomy_map的组织方式进行了比较,这使我相信下面应该可以工作:
        'group' => array (
            'api_mapping' => 'group',
            'data_type' => 'object',
            'child_object' => array(
                'api_mapping' => '@attributes',
                'data_type' => 'object',
                'child_object' => array(
                    'group_id' => array(
                        'api_mapping' => 'id',
                        'data_type' => 'integer'
                    )
                )
            )
        ),

但它没有。我错过了什么?

从CCB返回的响应的SimpleXML表示恰好有一种非常令人沮丧的方式来反序列化来自API的实体(组、事件、个人等)的id。(这只发生在id上)。

尽管Group ID 看起来像XML响应字符串中的属性,但它实际上是一个属性,两者略有不同。在您的对象响应中,请注意[@attributes]节点中的@符号。PHP不允许直接访问。

参见"@在SimpleXML对象?

作为一种变通方法,我实际上像这样在这里获得组ID:https://github.com/jaredcobb/ccb-core/blob/1a6e88b47ad7d5293e88bac277e72cbc4e33a602/admin/class-ccb-core-sync.php L589-L595

上面引用的代码片段:

$group_id = 0;
foreach( $group->attributes() as $key => $value ) {
    if ( $key == 'id' ) {
        $group_id = (int) $value;
        break;
    }
}
所以一般来说,我们访问组id,我们现在只需要将其保存为post meta。我将更新插件以利用这些id,但同时您可以直接使用$group_id变量并将post元保存在此函数中。