自定义帖子类型中的父子关系

已发表: 2020-08-18

谁不想拥有一个有组织的 WordPress 网站? 这正是自定义帖子类型很重要的原因。 CTP 允许我们分离数据并在必要时轻松访问和更新。 然而,使我们能够组织这些内容并赋予它层次结构的是自定义帖子类型中的父子关系。 但是,在我们谈论亲子关系之前,让我们从头开始。

期待已久的CPT

如果您不知道为什么更新 WordPress 很重要,这里有一个明显的例子。 经过多年的等待,当 WordPress 3.0 到来时,我们终于能够创建自定义帖子类型。 这确实是您想尽快了解的机会。 有了它,WordPress 网站从一个简单的博客平台转变为一个强大的控制管理系统。 只需几行代码,我们就可以拥有自己的类型。

在我们了解自定义帖子类型中的父子关系之前,让我们首先了解一下自定义帖子类型是什么。

什么是 CPT?

自定义帖子类型的 CPT 可视为内容。 “帖子”一词可能会让您感到困惑,因为它无论如何都不是博客帖子。 CPT 可以是您想要的任何内容,并且没有严格的规则来定义它们。 显然,有默认和自定义帖子类型。 默认帖子类型是博客帖子、页面和附件、修订和导航菜单。

另一方面,自定义帖子类型允许对创建、存储和编辑信息进行更多的创造性控制。

您不应该将自定义帖子类型与博客帖子混合使用。 如果您想为博客文章创建结构和层次结构,您可以使用 WordPress 中的类别和子类别。

用于自定义帖子类型

虽然有 WordPress 默认的帖子类型,但有些人需要的不止这些。 以下是自定义帖子类型有用的一些示例:

  • 活动列表网站,包含活动类型和地点
  • 房地产清单
  • 具有产品选项的电子商务网站
  • 票务系统
  • 设计画廊或展示柜

请记住,这些想法只是其中的一些建议。 还有更多可以使用自定义帖子类型的想法,所以请尽情发挥您的想象力。

亲子关系及职位

当您转到“设置”并启用“分层”选项时,您可以让您的帖子表现得更像页面,并且您将能够获得父/子关系。 例如,假设您有一个名为“drink”的帖子类型和一个名为“liquor”的父页面,以及一个名为“vodka”的子页面。 当您查看“vodka”帖子时,URL 看起来像这样:yoursite.com/drink/liquor/vodka/

基本上,这只会影响您的帖子类型中的帖子,而不影响彼此相关的其他帖子类型。 例如,“饮料”的帖子类型不会是“食物”的帖子类型的孩子。

限制选项

说到帖子关系,WordPress 提供的很少。 实际上,自定义类型帖子中的父/子关系是 WordPress 唯一支持的关系。 但是,将自定义帖子类型设为父级并将另一个自定义帖子类型设为子级似乎具有挑战性。

WordPress。
WordPress 在自定义帖子类型中只允许父子关系

这是一个项目的示例,您可以在其中查看不同的帖子类型并将子帖子分配给父帖子。

  • 名为“邻居”的自定义帖子类型
  • 对于这个社区内的地方,我们将有一个名为“地方”的自定义帖子类型
  • 请记住,这些自定义帖子类型是非分层的
  • 目标是将每个地方分配给一个社区,由父级发布

分配父帖子

希望到现在为止,您对帖子类型有所了解并知道它们是如何工作的。 但是,为了分配父帖子,您需要进行一些编码。 如果您不熟悉 WordPress 中的简码,请尝试了解基础知识。 基础知识应该足够了,因为您只需将以下代码添加到插件的管理文件中即可分配父帖子。

笔记本电脑上的代码,在自定义帖子类型中建立父子关系所必需的
编码时间

为了便于解释,这里我们将使用平面柱型 Neighborhood 和 Place。 现在,是时候编写代码了:

 /* Hook meta box to just the 'place' post type. */ add_action( 'add_meta_boxes_place', 'my_add_meta_boxes' ); /* Creates the meta box. */ function my_add_meta_boxes( $post ) { add_meta_box( 'my-place-parent', __( 'Neighborhood', 'example-textdomain' ), 'my_place_parent_meta_box', $post->post_type, 'side', 'core' ); } /* Displays the meta box. */ function my_place_parent_meta_box( $post ) { $parents = get_posts( array( 'post_type' => 'neighborhood', 'orderby' => 'title', 'order' => 'ASC', 'numberposts' => -1 ) ); if ( !empty( $parents ) ) { echo '<select name="parent_id" class="widefat">'; // !Important! Don't change the 'parent_id' name attribute. foreach ( $parents as $parent ) { printf( '<option value="%s"%s>%s</option>', esc_attr( $parent->ID ), selected( $parent->ID, $post->post_parent, false ), esc_html( $parent->post_title ) ); } echo '</select>'; } }

不要忘记将帖子类型名称更改为您自己的帖子类型。 为了更好地理解代码并在您的网站上使用它,这里是 GitHub 上的另一个示例,您可能会发现它很有用。

发布关系

虽然自定义帖子类型中的父子关系很有用,但它们也非常有限。 如果您想获得更复杂的解决方案,您将不得不寻找其他地方。 它们是一些插件,可以帮助您实现类似的帖子关系效果。

有孩子和平板电脑的母亲。
为了给你更好的画面

为什么我们需要发布关系?

如果我们想在网站上的帖子之间建立联系,我们基本上是在使用帖子关系。 它们之所以如此出色,是因为它们允许我们创建高级网站。 一旦我们将自定义帖子类型的帖子相互连接起来,我们就可以避免数据重复,并且我们确保所有人都不需要多次编辑一条信息。 此外,由于时间就是金钱,我们需要任何可以帮助我们避免平凡任务的方法。

在自定义帖子类型中使用父子关系的好处

在自定义帖子类型中使用父子关系的明显好处之一是您可以保持网站排序。 搜索引擎和用户都喜欢结构有条理的网站。 但是,请记住,为了真正体验到其中的好处,您需要制定一个好的计划并坚持下去。