一文说透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 Box和Advanced 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 Fields、Custom Post Type Maker、还有官方推荐的Custom Post Type UI ,后面会写一些这几个插件的详细使用用法。
用插件的方式当然是非常方便的,但同时也会有一些缺点:会引入很多不不要的代码和数据,因为是通用行的解决方案,所有它们需要兼顾的方面比较多,有些是并不需要的需求,再一点,虽然这些插件的基础功能大都是免费的,但是高级功能还是需要付费的。
所以,最后还有一种终极方案就是自己手写代码来实现完全定制化了,下一篇文章再写。
参考文献:
- https://wpsmith.net/2011/understanding-wordpress-custom-post-types-benefits-and-advantages-of-using-custom-post-types/
- https://wpsmith.net/2011/understanding-wordpress-custom-post-types-what-are-custom-post-types/
- Visualizing the WordPress 3.0 contributors
一文说透WordPress的自定义文章类型相关推荐
- WordPress 修改自定义文章类型的固定链接结构
关于自定义文章类型和固定链接结构,大家可以想回顾一下: WordPress 自定义文章类型 介绍及实例解说(上) WordPress 自定义文章类型 介绍及实例解说(下) WordPress快速添加多 ...
- Wordpress 自定义文章类型添加 Categoried、Tags
默认情况下 ,自定义文章类型没有分类和标签属性,需要通过 register_taxonomy_for_object_type 手动注册文章分类和标签,可以通过在 functions.php 或插件中添 ...
- 自定义文章类型(Custom Post Types)添加POST_TYPE——以增加Slider为例(未完待续)...
自定义文章类型(Custom Post Types)添加POST_TYPE--以增加Slider为例(未完待续) 钩子: add_action('init', 'cube_slider_registe ...
- html5置顶按钮如何添加,WordPress如何自定义文章开启置顶按钮?
WordPerss想制作置顶的功能,结果竟然发现自定义文章类型没有置顶的功能选项,查阅资料后发现WP只是没有显示置顶的选项,功能和文章类型一样.那么WordPress如何自定义文章开启置顶按钮? 添加 ...
- Wordpress 自定义文章类型的显示以及分页问题
前提:自己开发了一套主题,并且全局使用了自定义了文章类型. 首页调用了四个分类来显示,并且每个分类显示8个文章,使用查询方式如下: $args = array('post_type'=>'vid ...
- 自定义文章类型/分类 自由读取自定义分类
使用 get_terms 函数可以自由读自定义分类. get_terms 函数共有2个参数. 第1个是自定义分类名. 第2个是各种设置的数组. 除了自定义分类名以外,其它基本和 get_categor ...
- wordpress 模板自定义设置
可以通过新建模板文件,或通过后台模板库创建模板,以下是各类型页面调用模板的设置方法 一.首页 二.单页 以下是单个帖子的层次结构是如何工作的: single-{post-type}-{slug}.ph ...
- wordpress给后台文章列表增加自定义排序栏
为什么80%的码农都做不了架构师?>>> 受到Joost de Valk文章custom post type snippets 的启发,Joost的这篇文章简单地提供了一段怎么 ...
- wordpress 自定义_WordPress自定义帖子类型:它是什么以及如何创建?
wordpress 自定义 WordPress has come a long way – from being known as just a great blogging platform – a ...
最新文章
- 阿里云工业互联网平台开发样例
- linux命令free
- mstsc 加密oracle修正,mstsc远程报:这可能是由于CredSSP 加密Oracle修正的两种完美解决方法...
- 分隔线演练-利用参数增加分隔线的灵活度
- linux命令crontab
- 这个连“炒菜的油”都不放过的“吝啬”男人,却用“吝啬”创造了世界奇迹!...
- java instanceof运算符_java的instanceof运算符
- python 爬虫库比较_公认8个效率最高的爬虫框架
- Unreal、CryEngine、Gamebryo引擎介绍
- SQL Server 2008 R2 SSRS 安装配置后无法使用问题的解决方法
- xx是一个类型 这在给定的上下文_#PaperCarrier | CoSeRNN :为你解释序列化与上下文在会话推荐中的作用...
- 期货软件公司排名_排行榜_五大品牌_口碑好的期货软件公司
- 神州数码笔试题C语言,神州数码笔试真题
- 人人商场二次开发-克隆我的小店页面导航 首页 清除
- java时间差的百分之二十,java计算时间差及某个时间段数据
- win10、win7系统重装教程
- 直播相关知识之二 采集、处理、编码和封装
- 【实验2 选择结构】7-9 sdut-C语言实验-三位数整数的各位数字
- 2016河北省职称计算机考试试题,2016年最新河北省职称计算机考试试题及答案(参考).doc...
- 亚琛工业大学计算机硕士英语项目,【官方说明会】亚琛工业大学国际硕士项目...
热门文章
- 分布式监控系统开发【day38】:报警阈值程序逻辑解析(三)
- 签名别人的公钥以及验证签名的公钥
- 安装了多个php版本,如何编译扩展
- SPSS统计功能与模块对照表
- Kubernetes 学习2 k8s基础概念
- PostgreSQL 10.1 手册_部分 II. SQL 语言_第 9 章 函数和操作符_9.23. 行和数组比较
- 每天一个linux命令(59):rcp命令
- Web应用程序系统的多用户权限控制设计及实现-总述【1】
- AngularJS-源码阅读(八.二)
- 转载:word排版之长英文单词自动换行