jjgrainger / wp-custom-post-type-class
一个类,可以帮助您快速构建更高级的自定义帖子类型。
Requires
- php: >=5.3.0
This package is auto-updated.
Last update: 2024-09-06 08:16:44 UTC
README
注意 我已经将项目的更新版本发布到新的仓库 PostTypes。
WP Custom Post Type Class v1.4
一个类,可以帮助您快速构建更高级的自定义帖子类型。
安装
使用Composer安装
将包添加到项目的composer.json
文件中。更多信息请访问 getcomposer.org。
{ "require": { "jjgrainger/wp-custom-post-type-class": "dev-master" } }
手动安装
下载并将类文件包含到您的主题的functions.php
文件中,如下所示
include_once('CPT.php');
然后您就可以开始使用了!
创建新的自定义帖子类型
要创建帖子类型,只需创建一个新的对象
$books = new CPT('book');
第一个参数是帖子类型名称,是必需的。理想情况下,帖子类型名称全部小写,单词之间用下划线_
分隔。
要具体指定其他帖子类型名称,可以传递一个关联数组
post_type_name
- 帖子类型的名称(单数,小写,下划线)
singular
- 帖子类型的单数标签(书籍,人物)
plural
- 帖子类型的复数(书籍,人物)
slug
- 帖子类型的永久链接slug(复数,小写,连字符)
您可以通过将名称作为数组传递给第一个参数来传递这些名称
$people = new CPT(array( 'post_type_name' => 'person', 'singular' => 'Person', 'plural' => 'People', 'slug' => 'people' ));
可选的第二个参数是帖子类型的参数。有关可用选项,请参阅 WordPress codex。
该类尽可能使用WordPress默认设置。
要覆盖默认选项,只需传递一个包含选项的数组作为第二个参数。不需要传递所有选项,只需传递您想添加/覆盖的选项即可
$books = new CPT('book', array( 'supports' => array('title', 'editor', 'thumbnail', 'comments') ));
有关所有可用选项的详细信息,请参阅 WordPress codex。
现有帖子类型
要处理现有帖子类型,只需将帖子类型名称传递给类构造函数
$blog = new CPT('post');
添加分类法
您可以使用register_taxonomy()
方法轻松添加分类法
$books->register_taxonomy('genres');
此方法接受两个参数,名称和选项。分类法名称是必需的,可以是字符串(分类法名称),或者是一个与帖子类型相同的格式的名称数组
$books->register_taxonomy(array( 'taxonomy_name' => 'genre', 'singular' => 'Genre', 'plural' => 'Genres', 'slug' => 'genre' ));
选项可以可选地作为数组传递。有关所有可能的选项,请参阅 WordPress codex。
现有分类法
您可以通过通过register_taxonomy
方法传递分类法名称将现有分类法添加到帖子类型。您只需要在第一次注册时指定自定义分类法的选项。
管理员编辑屏幕
过滤器
当您注册一个分类法时,它将自动添加到管理员编辑屏幕作为过滤器和一个列。
您可以使用filters()
方法定义您想要的过滤器
$books->filters(array('genre'));
通过传递一个分类名称数组,您可以选择出现的筛选器以及它们的顺序。如果您传递一个空数组,则管理员编辑屏幕上不会出现下拉筛选器。
列
这个类包含一些方法来帮助您修改管理员列。使用此类注册的分类会自动添加到管理员编辑屏幕的列中。
您可以添加自己的自定义列以包含您想要的任何值,例如,在我们的书籍帖子类型中,我们将添加价格和评分的自定义字段。
此类没有添加自定义字段的任何方法,因为高级自定义字段(ACF)比此类能做的任何事情都要强大得多!
您可以通过传递数组的方式使用columns()
方法来定义您希望在管理员编辑屏幕上出现的列
$books->columns(array( 'cb' => '<input type="checkbox" />', 'title' => __('Title'), 'genre' => __('Genres'), 'price' => __('Price'), 'rating' => __('Rating'), 'date' => __('Date') ));
键定义了列的名称,值是列出现的标签。以下列名称是由类自动填充的
- 通过对象注册的任何分类
cb
批量编辑的复选框title
带有编辑链接的帖子标题author
帖子作者post_id
帖子的IDicon
帖子的缩略图
填充列
您需要创建一个函数来填充一个不是自动填充的列。
您可以使用populate_column()
方法这样做
$books->populate_column('column_name', function($column, $post) { // your code goes here… });
这样我们可以这样填充我们的价格列
$books->populate_column('price', function($column, $post) { echo "£" . get_field('price'); // ACF get_field() function });
该方法会将两个变量传递到函数中
$column
- 列名称(不是标签)$post
- 当前帖子对象
这些变量被传递以帮助您适当填充列。
排序列
如果某个列可以通过升序/降序排序,您可以定义自定义可排序列,如下所示
$books->sortable(array( 'column_name' => array('meta_key', true) ));
true/false
用于定义元值是字符串还是整数,原因是如果数字作为字符串排序,则数字
1, 3, 5, 11, 14, 21, 33
将按以下方式排序
1, 11, 14, 21, 3, 33, 5
通过添加选项true值,值将作为整数排序,如果false或未定义,则类将按字符串排序列。
因此,在我们的书籍示例中,您将使用
$books->sortable(array( 'price' => array('price', true), 'rating' => array('rating', true) ));
菜单图标
dashicons
随着WordPress 3.8的发布,出现了dashicons,这是一个您可以用于自定义帖子类型的图标字体。要使用它,只需通过menu_icon()
方法传递图标名称,如下所示
$books->menu_icon("dashicons-book-alt");
要查看图标列表和要使用的类名,请访问https://developer.wordpress.org/resource/dashicons/
翻译
此类已设置用于翻译,但如果您需要设置自己的textdomain以与主题或插件一起使用,请使用set_textdomain()
方法
$books->set_textdomain('your-textdomain');
刷新重写规则
您可以使用flush()
方法以编程方式重新创建网站的重写规则。这是一个昂贵的操作,应谨慎使用,有关更多信息,请参阅codex
$books->flush();
备注
- 此类没有用于为帖子类型创建自定义字段的方法,请使用高级自定义字段(ACF)
- README.md中使用的书籍示例可以在books-post-type.php中找到
- 许可协议:MIT License
- 维护协议:Semantic Versioning Guide
作者
Joe Grainger