我想你可以用
CPT“会议”如果每篇帖子都是会议,您可以毫无问题地处理数百或数千篇帖子,这是一种自定义分类法“会议类型”,这样您就可以设置会议帖子的类型。就像标准帖子的类别一样一个CPT“与会者”,其中每个帖子都是一个与会者。作为一个帖子,你可以处理数百个甚至数千个帖子当然,问题是如何将“与会者”与“会议”联系起来,因为WordPress无法将一种帖子类型与另一种帖子类型联系起来。
第一个解决方案:Posts 2 Posts插件对于这个问题,一个流行的解决方案是使用Posts 2 Posts plugin.这是一个广为人知的插件,被无数人使用,甚至它的主要作者Scribu也表示,他不再支持它,有时它会得到一些提交GitHub.
如果您不想使用该插件,还有其他一些解决方案,我将在这里提出一个。
备选解决方案:私有分类法默认情况下,WordPress只处理一种多对多关系,即在帖子和分类法之间建立的关系:您可以使用它来构建系统。
我建议创建一个隐藏的分类法,称为“meeting\\u Attenders”。
您应该将该分类法注册到\'public\'
参数设置为false,类似于:
register_taxonomy(
\'meeting_attendees\',
array(\'meetings\', \'attendees\'), // both CPTs will support the taxonomy
array(\'public\'=>false)
);
通过这种方式,可以注册分类法,但它对WordPress管理UI是隐藏的。
之后,您应该为每个会议帖子创建一个术语。可以使用\'save_post\'
hook. 类似于:
add_action (\'save_post\', function($post_ID, $post, $is_update) {
if ($post->post_type !== \'meetings\' || $is_update) {
return;
}
wp_create_term(\'meeting-\'.$post_ID, \'meeting_attendees\');
}, 10, 3);
然后,您需要构建一个元数据库,允许您从会议帖子创建屏幕中选择与会者帖子。
保存/更新会议时,您必须为每个选定的与会者指定为会议创建的相同术语。
通过这种方式,您可以使用一个简单的get_the_terms
致电,以便能够检索会议与会者,查找附加了该术语的与会者帖子。类似于:
// assuming $meeting_id is the ID of Meetings post you want to get the Attendees for
$meeting_attendees = get_the_terms(\'meeting_attendees\', $meeting_id);
if ( ! empty($meeting_attendees) && ! is_wp_error($meeting_attendees) ) {
$meeting_attendees_term = reset($meeting_attendees);
$attendees = get_posts(array(
\'post_type\' => \'attendees\'
\'tax_query\' => array(
array(
\'taxonomy\' => \'meeting_attendees\',
\'terms\' => array($meeting_attendees_term->term_id)
)
)
));
}
同样,您可以检索所有与会者参加的所有会议:
// assuming $attendee_id is the ID of Attendee post you want to get attended meetings
$meeting_attendees = get_the_terms(\'meeting_attendees\', $attendee_id);
if ( ! empty($meeting_attendees) && ! is_wp_error($meeting_attendees) ) {
$meetings = get_posts(array(
\'post_type\' => \'meetings\'
\'tax_query\' => array(
array(
\'taxonomy\' => \'meeting_attendees\',
\'terms\' => wp_list_pluck($meeting_attendees, \'term_id\')
)
)
));
}
如您所见,使用核心方法可以以非常简单的方式获取会议的与会者和与会者的会议。
唯一需要做的就是创建元数据库,让您可以将与会者分配到会议,但这应该很容易,如果您需要帮助,您可以在本网站和整个web上找到许多示例。。。(例如,Codex上的示例add_meta_box
这个函数非常活跃。