一文说透WordPress的自定义文章类型

总之,自定义文章类型(CPT)就是你的内容和内容存储方式。不管哪种类型的内容,基本在WordPress中都是可以实现的。只要遇到了一些信息你觉得可能用默认的文章或者页面的形式不好展现,那么可能你就需要用到自定义文章类型了。

从2004年的1.0版本算起,WordPress在14年间已经迭代开发到了5.x版。如果说这中间哪个版本是一个质的提升的话,那应该算是2010年发布的代号为Thelonious 的 3.0版。这个版本发布了很多重要的功能,比如多站点、主题API等等,其中一个就是 Custom Post Type(自定义文章类型)。

虽然WordPress 2.9 版也引入了register_post_type()函数,但并不是很好用,在CMS市场上竞争力并不是很强。3.0版的register_post_type()函数变的更好用了,同时这也使得WordPress从一个单纯的博客管理系统( blogging system)变成一个真正意义上的可以管理各种内容的内容管理系统(CMS)。

什么是文章类型(Post Type)?

Post Type,字面意思就是“文章类型”或者叫“帖子类型”,其实更准确的说法应该叫“内容类型”,是WordPress用来区分不同类型不同用途的内容的一个术语。

Post Type 应该算是一个业务术语,而不能算作一个技术术语。因为从本质上讲,它们都是WordPress业务数据库里同一个数据表wp_posts 中的数据,数据结构都是一样的,不同的Post Type之间的区别就是在post_type这个字段。见下图:

Internally, all the post types are stored in the same place, in the wp_posts database table, but are differentiated by a column called post_type.

在3.0版本之前 ,WordPress自带的默认Post Type只有两种最基本的类型:post和page,后来又扩展了如下几种默认类型:

  • Post (Post Type: ‘post’) 文章
  • Page (Post Type: ‘page’) 页面
  • Attachment (Post Type: ‘attachment’) 附件
  • Revision (Post Type: ‘revision’) 自动保存的文章版本
  • Navigation Menu (Post Type: ‘nav_menu_item’) 导航菜单
  • Custom CSS (Post Type: ‘custom_css’) 自定义CSS
  • Changesets (Post Type: ‘customize_changeset’) 自定义的设置
  • User Data Request (Post Type: ‘user_request’ ) 用户请求

Post Type这个名字非常不友好,很容易让人误解和迷惑。Post这个单词一般都会被理解成文章,但那些并不是文章(post)的内容(见上面的列表),也被归入文章类型(Post Type),所以叫做内容类型(content type)或许更准确。

虽然都是属于Post Type,但不全都是Post。这中间的差别,举个例子就能理解了:面包、面条、面粉、面料、面试都是字头,但又不全都是。。。

什么是自定义文章类型(Custom Post Type)?

你可以把所有内容更都用默认的文章页面这两种类型来编辑和管理,反正都是数据而已,但这样带来的问题就是混乱,不好管理。这就好比不管什么菜都用一种做法,一锅乱炖,反正装盘都能吃。

不同的菜当然有不同的管理方式和料理方式,甚至不同的餐具。同样的道理,不同的内容也需要区别对待。所以除了默认的Post Type之外,还有一个重要的类型就是Custom Post Type–自定义文章类型,就是用来满足内容生产者的不同需求。

那么自定义文章类型到底可以做什么用呢?能干什么这主要取决于你自己的需求和内容定位,没有什么规定,只要你愿意,什么样的内容都可以定义成一种type,理论上说,你可以用Custom Post Type来干存任何你想要存的数据。随便举几个例子:

  • 公司信息、项目数据,比如用WordPress做一个类似36kr的创业项目信息库
  • 电影、书籍数据,比如用WordPress做的电影信息展示网站
  • 产品信息,用WordPress做的电商平台
  • 说明文档
  • 论坛数据
  • 食谱
  • 设计稿
  • 歌词
  • 活动
  • av
  • 僵尸
  • 等等等

总之,自定义文章类型(CPT)就是你的内容内容存储方式。不管哪种类型的内容,基本在WordPress中都是可以实现的。

只要遇到了一些信息你觉得可能用默认的文章或者页面的形式不好展现,那么可能你就需要用到自定义文章类型了。

还有一种情形下也可以考虑使用自定义文章类型,当你使用了很多的页面(page),并给页面做了父子层级的时候,如果层级超过了十个,那么多半这些页面都属于一种类型了,比如说一个公司能提供多种多样的services(服务),都用页面形式的话也是可以的,但这种场景下,考虑用新建一个自定义文章类型叫做services(服务)可能会更方便。

或者当你频繁的使用文章的某一个分类,或者并且为了想要对某些内容的URL做一些自定义等等情况下,都可以考虑一下使用自定义文章类型了。

如果你对此不熟悉,那多半可能是因为你没有这方面的需求,没有用到而已,现有默认的文章和页面两种默认的Post Type已经能满足你的需求了。如果你的网站内容比较特殊,那么就很有必要好好了解一下自定义文章类型了,很好很强大。

自定义文章类型(Custom Post Type)不是什么?

WordPress里面可以自定义的部分非常多,非常灵活,这也正是WordPress的强大之处。这也带来一个问题就是关于自定义的术语也比较多,初学者会比较容易混淆。下面也稍微解释一下它们之间的区别。

自定义文章类型(Custom Post Type)不是普通意义上的文章(post),上面已经说过了。

自定义文章类型(Custom Post Type)也不是自定义字段(custom fields)的替代品。实际上自定义字段是作为内容的一部分或补充相关功能,比如一个内容类型为电影的自定义字段可以有很多:导演、演员、风格、海报等等等。这方面的插件就是之前结果过的Meta BoxAdvanced Custom Fields 、Code Embed

自定义文章类型(Custom Post Type)也不是自定义分类(Custom taxonomies)。比如你有了一个自定义类型是电影,这时候用文章的分类可能就不适用了,需要添加自定义分类法,比如奇幻、恐怖、爱情、动作等等。

为什么要使用自定义文章类型?好处和优势

使用自定义文章类型有几个好处:

  • 更好的显示形式。内容决定形式,形式影响内容。某些场景形式重于内容,某些场景内容重于形式,主要还是取决什么样的内容。在WordPress中可以针对自定义文章类型使用专门的页面展示显示形式,自由设置不同于默认文章的显示样式,以便突出显示这类内容,聚焦优质内容。
  • 更好的过滤结果。在需要按条件显示WordPress文章时WP_Query默认的搜索是Post, 这时默认会把自定义文章类型排除出去,除非你特意指明了需要的类型,这样可以对过滤结果有更好的控制。
  • 更好的编辑内容。在内容管理后台中,不同的内容类型也需要不同的组织、编辑流程。
  • 更好的用户体验。如果你是一个开发者,服务的用户群体是特定行业的从业者,他们不一定懂代码,也不一定能搞清楚文章、页面等等之间的区别,那么最简单的方法就是为他们量身打造一套自定义文章类型和发布流程,让工具去适应用户,而不是让用户去适应内容。
  • 更好的安全性。
  • 更高的效率。
  • 更友好的URL展示

总之,自定义文章类型(custom post types )可以让你自定义管理你的内容,使创建、编辑、管理更容易更高效,并且能以更好更方便的形式展现出来。

创建自定义文章类型的方法

当你决定了开始使用自定义文章类型之后,首先面对的问题就是,应该怎么弄?方法很多。

一般来说有两种方法可以创建自定义文章类型:1. 手写代码 2. 通过插件的方式来创建。

WordPress自身并没有在后台提供一种可视化的界面来创建自定义文章类型,但是有很多插件也可以实现可视化创建。

首先可以搜索看下是你的内容类型否已经有插件可以满足需求了,比如电商插件WooCommerce这类高级插件都会创建自己的post type。WooCommerce的自定义类型就是Products,也有相应的编辑后台和分类,统统都帮你做好了,直接使用就可以了。

如果内容类型比较特殊,没有完全符合的插件,那么可以考虑使用自定义文章类型可视化创建插件。比如Pods – Custom Content Types and FieldsCustom Post Type Maker、还有官方推荐的Custom Post Type UI ,后面会写一些这几个插件的详细使用用法。

用插件的方式当然是非常方便的,但同时也会有一些缺点:会引入很多不不要的代码和数据,因为是通用行的解决方案,所有它们需要兼顾的方面比较多,有些是并不需要的需求,再一点,虽然这些插件的基础功能大都是免费的,但是高级功能还是需要付费的。

所以,最后还有一种终极方案就是自己手写代码来实现完全定制化了,下一篇文章再写。

参考文献:

本文由来源 丘壑博客,由 小而美应用 整理编辑,其版权均为 丘壑博客 所有,文章内容系作者个人观点,不代表 小而美应用 对观点赞同或支持。如需转载,请注明文章来源。

发表评论

加载中,请稍后...