管理3层信息(CTP-帖子-然后是元数据?)

时间:2014-12-10 作者:Andy Mercer

我正在构建一个我想使用WP作为后端的应用程序。我必须管理三层数据:

会议类型个人会议(每种会议类型中有许多)参加每次会议的人员

我最初的目标是为每个会议类型(仅4-6)创建一个自定义帖子类型,然后为每个会议创建用户帖子。但我不确定如何处理与会者,因为我需要能够看到给定单个会议中的所有与会者,以及给定会议类型中的所有与会者。

我正在考虑的一件事是为每个帖子使用元数据来存储与会者列表。两层数组,顶层为与会者,子数组为每个与会者的所有信息。然后,当加载页面进行编辑时,我可以运行一些东西将其转换为表格?但我不确定如何查看每种会议类型(CTP)中的所有与会者。

有什么想法吗?要明确的是,我不是在要求代码,而是要更一般的建议。可能是插件,或示例/教程?我试着在谷歌上搜索,但没有找到多少,也试着在#wordpress中询问,但没有得到任何帮助。

编辑:

随着时间的推移,个人会议的数量将不断增加,可能会达到数百次。这就是我不打算在每次会议上使用CTP的主要原因。

谢谢

3 个回复
SO网友:Matthew Campbell

这是一个有趣的想法,你有,我做了一些类似的事情,但公司和员工作为一种CRM,我正在建设。

我所做的就是沿着插件路线走下去,并利用WP\\U List\\U Table类,因为它为我很好地组织了事情。

我所做的是创建一组公司,在您的情况下,我会说是单独的会议,然后在每个公司内,我可以添加具有各种数据的人员,因此在您的情况下,这些人将是与会者。

然后,我将“父”会议类型作为额外的元数据,甚至将其保存在自定义分类下,以保留使用标准循环和类别选项获取各种会议类型的核心功能。

通过使用WP\\u List\\u Table,它可以将事情很好地组织起来,并添加了按列排序的功能,可以根据需要使用任何元数据。

WP\\u List\\u Table文档严重缺乏,通过谷歌搜索获得的资源都是错误的,正是通过整合每篇研究文章中的各种信息,我才使一切正常。

我非常乐意向您发送插件,以便您可以查看它的实际情况,它可能会为您提供一个方法的想法。此外,你将有一个良好的基础开始。

让我知道。:)

SO网友:karpstrucking

Meetings=>自定义Post类型Meeting类型=>自定义TaxonomyAttendees=>Post Meta(如所述的数组)

要获取某个会议类型的所有与会者,请循环该类型中的所有会议,并为每个会议检索与会者。如果需要,您可以将每个会议的与会者推送到一个新的数组中进行排序,而不是让每个数组写出详细信息。

SO网友:gmazzap

我想你可以用

CPT“会议”如果每篇帖子都是会议,您可以毫无问题地处理数百或数千篇帖子,这是一种自定义分类法“会议类型”,这样您就可以设置会议帖子的类型。就像标准帖子的类别一样

第一个解决方案: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 这个函数非常活跃。

结束

相关推荐

Add CPT values to Database

我不确定这是不是件容易的事。我有一个插件,具有定制帖子类型所需的所有功能:过滤器、导航。。。我需要为这个CPT创建很多帖子(使用分类法)(需要做很多工作才能正确创建它)。所以我只想添加一次这个自定义帖子,而不是每次我想利用我在其他网站的插件。。。实现这一目标的最佳方式是什么?我是不是每次都要进行某种形式的进出口贸易?我应该利用wp\\u insert\\u post并对帖子的内容进行硬编码吗?为我的英语道歉,我不知道我是否已经解释过了。。。谢谢