可以共享WordPress自定义帖子类型吗?

时间:2011-01-06 作者:Dwayne Charrington

我正在为一个唱片标签开发一个网站,基本上它对各种信息使用了相当多的自定义帖子类型。我的问题是,我觉得相同的信息被重复,而不是共享。

我有一个艺术家自定义的帖子类型,但是在主页上有一个旋转木马,里面也有艺术家,但要显示的信息不同。因此,我有一个“主页旋转木马”自定义帖子类型,我必须输入艺术家姓名和信息,还有一个图像,还有一个“艺术家”自定义帖子类型,再次输入一些相同的信息。

客户可能不喜欢一直在多个自定义帖子类型中输入相同的信息,是否可以使一个帖子类型从另一个帖子类型继承?

所以我可以告诉我的“主页旋转木马”帖子类型从艺术家帖子类型继承,这样艺术家信息就可以共享,而不必再次输入?

目前,我已经创建了一个名为艺术家的自定义分类法,并输入了所有可能的艺术家名称,然后在“主页旋转木马”的帖子类型中,我选择右侧的艺术家作为类别。这在某种程度上效果很好,但是您仍然需要输入标题,或者将一些“自动保存”的废话保存为标题,这将使编辑和排序变得困难。是否有办法将标题设置为已选定的类别“艺术家”?

如果你不太明白,请告诉我,我会尽量详细说明一下。我基本上想分享一个艺术家的集中列表,以及我可以在其他帖子类型中继承的信息。

* 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/ - 但我还不太明白如何正确使用它,我想这是我想要的东西。因此,如果有人以前使用过此功能,我们将非常感谢您的帮助。

虽然我知道自定义分类法和术语,但我认为我想要的远远超出了我所寻求的要求,因为我正在处理多条信息,只想以某种方式将两种帖子类型联系在一起。

3 个回复
最合适的回答,由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的不断发展和新插件的发布,这里列出的解决方案并不总是最新的。

SO网友:MikeSchinkel

你好@Dewayne:

你真的不能“共享”帖子类型;每个帖子都有一种类型。

但我更担心的是\'homepage_carousel\' 您选择的架构不正确,因此会导致您陷入各种难题,比如想要共享帖子类型。你能更详细地描述一下\'homepage_carousel\' 保持?

乍一看,这听起来像是一个需要为您的post_type=\'artist\' 称为“特色位置”(可能),然后使用标签“主页旋转木马?”

如果您可以更新您的问题,让我知道为什么这样做行不通,那么我可以为您提供更多帮助。如果可以的话那就太好了!

SO网友:Christopher

自定义帖子类型和分类法对我来说也很混乱,但我认为Mike建议在这里使用分类法,这已经得到了你的答案。

旋转木马不是要添加到数据库中的一种内容,而是要显示的数据库中的内容。然后,您的答案将是一个查询,该查询将查找具有自定义字段(了解更多信息、购买cd、购买mp3)和“特色位置”分类法的艺术家(自定义帖子类型和分类法)相册(自定义帖子类型)。

我很想听听其他人对此的想法,因为自定义帖子类型和分类法仍然是我最困惑的事情之一。特别是,我不知道如何解决艺术家既是自定义帖子类型又是分类法的问题,我认为这是必要的,以便允许您想要的额外元数据以及与其他数据的相互关系。

就视频而言,您可能想看看3.1中出现的post格式,这样就不需要为每个大小单独嵌入代码,只需要不同的显示属性。

我希望这对你有帮助,或者至少能促进对话。

干杯

结束

相关推荐

Saving Taxonomy Terms

我有一个有趣的问题,希望有人能尽快回答。我已经创建了自己的metabox,它基于“我的metabox代码”(下面的列表)正确地显示了我创建的“event\\u types”分类中所有术语的下拉列表。我遇到的问题是,当从下拉列表中选择不同的术语并更新帖子时,能够保存/更新与帖子相关的术语。在对各种代码位进行修补之后,我发现通过手动将term\\u ID number[用逗号分隔]输入数组区域,我得到了我想要的结果。例如,如果在保存帖子时,函数将调用此代码wp_set_post_terms( $post_id