我正在使用教会社区构建应用程序接口(official docs,搜索"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:
我想我已经很接近了。
我从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'
)
)
)
),
但它不是。我漏掉了什么?
发布于 2016-09-11 21:33:39
从CCB返回的响应的SimpleXML表示恰好有一种非常令人沮丧的方式来反序列化从API中产生的实体(组、事件、个人等)的ID。(而且它只发生在ID上)。
尽管Group ID看起来像XML响应字符串中的一个属性,但它实际上是一个略有不同的属性。在对象响应中,请注意[@attributes]
节点中的@
符号。PHP不允许直接访问它。
请参阅"At sign" @ in SimpleXML object?
作为一种解决方法,我实际上在这里获得了组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;
}
}
所以一般来说,我们do可以访问该组id,我们现在只需要将它保存为post meta。我将更新插件以利用这些ID,但同时您可以直接使用$group_id
变量并将post元保存在此函数中。
https://stackoverflow.com/questions/39431037
复制相似问题