我面临着一个棘手的问题,似乎无法在网络上丰富的社区知识中找到解决方案。我有两个自定义帖子类型“Person”和“Activities”。我使用posts 2 posts(插件)将人们与他们的各种活动联系起来,反之亦然。
我有适用于活动的分类法。它们描述了实践和兴趣领域。例如,使用它们,我希望能够获得一份参与标有“起重机”的活动的人员列表。其中,“起重机”是我的标签式自定义分类法中感兴趣的领域的一部分。
我怀疑最实用的方法是将分类法应用于这两种帖子类型,并使它们自动从链接的活动同步到个人。有没有办法做到这一点?
你好,埃夫伦
编辑:我的p2p\\u register\\u connection\\u类型如下
function ghunige_connection_types() {
p2p_register_connection_type( array(
\'name\' => \'profile_to_activity\',
\'from\' => \'ghunige_profile\',
\'to\' => \'ghunige_activity\',
\'reciprocal\' => true,
\'title\' => array( \'from\' => __(\'Participates in\', \'ghunige_dir_domain\'), \'to\' => __(\'Participants\', \'ghunige_dir_domain\') )
) );
}
SO网友:gmazzap
我认为有两种方法可以解决你的问题。第一种是依赖P2P功能,如each_connected
(参见this 并在运行“活动”的分类查询后检索连接的“人员”。
也许这个解决方案可以更简单、更快、更直接。
第二个解决方案是您在问题中所说的:将分类法应用于这两种帖子类型。
要同步分类术语,可以挂接到“added\\u term\\u relationship”操作中
add_action( \'added_term_relationship\', \'sync_my_tax\', 20, 2);
function sync_my_tax ( $object_id, $tt_id ) {
$post = get_post($object_id);
if ( $post->post_type == \'activities\' ) {
global $wpdb;
$taxonomy = $wpdb->get_var("SELECT taxonomy FROM $wpdb->term_taxonomy WHERE term_taxonomy_id = " . $tt_id);
if ( $taxonomy != \'your_taxonomy\' ) return; // put here your tax name
$related = p2p_type( \'person_to_activities\' )->get_related( $post );
if ( ! empty($related) ) { foreach ( $related as $person ) {
$wpdb->insert( $wpdb->term_relationships, array( \'object_id\' => $person->ID, \'term_taxonomy_id\' => $tt_id ) );
} }
}
}
我不能保证
p2p_type
调用此代码是正确的,因为您没有发布
p2p_register_connection_type()
呼叫
还要注意,所有代码都是untested, 所以,在您完全测试之前,不要在生产现场使用它。