我正在使用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'
)
)
)
),
但事实并非如此。我错过了什么?
答案 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。