我正在为一个唱片标签开发一个网站,基本上它对各种信息使用了相当多的自定义帖子类型。我的问题是,我觉得相同的信息被重复,而不是共享。
我有一个艺术家自定义的帖子类型,但是在主页上有一个旋转木马,里面也有艺术家,但要显示的信息不同。因此,我有一个“主页旋转木马”自定义帖子类型,我必须输入艺术家姓名和信息,还有一个图像,还有一个“艺术家”自定义帖子类型,再次输入一些相同的信息。
客户可能不喜欢一直在多个自定义帖子类型中输入相同的信息,是否可以使一个帖子类型从另一个帖子类型继承?
所以我可以告诉我的“主页旋转木马”帖子类型从艺术家帖子类型继承,这样艺术家信息就可以共享,而不必再次输入?
目前,我已经创建了一个名为艺术家的自定义分类法,并输入了所有可能的艺术家名称,然后在“主页旋转木马”的帖子类型中,我选择右侧的艺术家作为类别。这在某种程度上效果很好,但是您仍然需要输入标题,或者将一些“自动保存”的废话保存为标题,这将使编辑和排序变得困难。是否有办法将标题设置为已选定的类别“艺术家”?
如果你不太明白,请告诉我,我会尽量详细说明一下。我基本上想分享一个艺术家的集中列表,以及我可以在其他帖子类型中继承的信息。
* Update *
对我原来的问题再详细一点。
以下是我定义的帖子类型及其所包含的信息。我想做的是在我的“艺术家”帖子类型和其他以某种方式与艺术家相关的帖子类型之间建立共享关系。
Post type: 艺术家
Fields: 标题、所见即所得编辑器、特色图片、Facebook URL、Twitter用户名、网站URL。
Post type: 主页\\u旋转木马
Fields: 标题、了解更多链接、购买CD链接、购买MP3链接旋转木马项目对应于上面艺术家帖子类型中定义的艺术家。因此,我想要的是能够将此帖子类型与艺术家的帖子类型相关联。
Post type: 视频
Fields: 标题、视频嵌入代码(455px)、视频嵌入代码(466px)、视频嵌入代码(608px)、视频描述。视频项目对应于在艺术家帖子类型中定义的艺术家。我希望能够将视频分配给艺术家。
正如你所看到的,我想基本上建立一个多对一的关系,还是一对多的关系?我想是其中之一。我开始使用这个插件:http://wordpress.org/extend/plugins/posts-to-posts/ - 但我还不太明白如何正确使用它,我想这是我想要的东西。因此,如果有人以前使用过此功能,我们将非常感谢您的帮助。
虽然我知道自定义分类法和术语,但我认为我想要的远远超出了我所寻求的要求,因为我正在处理多条信息,只想以某种方式将两种帖子类型联系在一起。
最合适的回答,由SO网友:Dwayne Charrington 整理而成
可以说,我已经部分解决了自己的问题。多年来,我一直在尝试让帖子类型关系和插件关系帖子类型发挥作用,正如我对Christopher答案的评论中提到的那样。虽然这还远远不够完美,但我已经找到了获取此插件的方法:http://wordpress.org/extend/plugins/relation-post-types/ - 工作(尽管不那么漂亮)。
以下代码将获取主页旋转木马项目,然后获取关联的艺术家名称。这也可以修改以获得相关的post meta。我想使用Scribu的posts 2 posts插件,但不知道如何使用它。
$carousels = get_posts(array(\'post_type\' => \'homepage_carousel\'));
$counter = count($carousels);
$increment = 0;
foreach($carousels as $carousel):
$image = wp_get_attachment_image_src( get_post_thumbnail_id( $carousel->ID ), \'large\' );
$related_ids = rpt_get_object_relation($carousel->ID, array(\'artists\'));
foreach ($related_ids as $related_id) {
$related_post[] = get_post($related_id);
}
<li style="background: transparent url(<?php echo $image[0]; ?>) no-repeat;">
<div class="carousel_content">
<p class="large_heading"><?php echo $related_post[$increment]->post_title; ?></p>
<p class="carousel_meta">
<?php if (get_post_meta($carousel->ID, \'learn_more_link\', true)): ?>
<?php $link = true; ?>
<a href="<?php echo get_post_meta($carousel->ID, \'learn_more_link\', true); ?>">Learn More</a>
<?php endif; ?>
<?php if (get_post_meta($carousel->ID, \'buy_cd_link\', true)): ?>
<?php $link2 = true; ?>
<?php if ($link): ?> | <?php endif; ?>
<a href="<?php echo get_post_meta($carousel->ID, \'buy_cd_link\', true); ?>">Buy CD</a>
<?php endif; ?>
<?php if (get_post_meta($carousel->ID, \'buy_mp3_link\', true)): ?>
<?php if ($link2 || $link): ?> | <?php endif; ?><a href="<?php echo get_post_meta($carousel->ID, \'buy_mp3_link\', true); ?>">Buy MP3</a>
<?php endif; ?>
</p>
</div>
正如你所看到的,这是一个非常粗糙的问题,并不是一个确定的解决方案。它对我很有用,但我仍然对上面的代码的工作方式感到不满意。要获得相关的post-meta,需要更多的代码。
由于没有答案,这是否应该成为一个维基而不是一个问题?由于Wordpress的不断发展和新插件的发布,这里列出的解决方案并不总是最新的。