如何添加其他字段映射以从第三方API中提取代码

时间:2016-09-10 22:09:32

标签: php wordpress api

我正在使用Church Community Builder API(official docs,搜索“群组资料”以查看相关代码),并使用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:

我认为我很邪恶。

我从Group Profile下的API文档中获取了XML,并通过simplexml和generated this output运行它。

然后我将输出与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'
                    )
                )
            )
        ),

但事实并非如此。我错过了什么?

1 个答案:

答案 0 :(得分:0)

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

即使组ID 看起来像 XML响应字符串中的属性,它实际上是属性,略有不同。在对象响应中,请注意@节点中的[@attributes]符号。 PHP不允许直接访问它。

请参阅"At sign" @ in SimpleXML object?

作为一种解决方法,我实际上就像这样获得了Group 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 meta。