我面临着一个棘手的问题,似乎无法在网络上丰富的社区知识中找到解决方案。我有两个自定义帖子类型“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, 所以,在您完全测试之前,不要在生产现场使用它。