jjgrainger/wp-custom-post-type-class

一个类,可以帮助您快速构建更高级的自定义帖子类型。

v1.4 2015-08-11 08:44 UTC

README

注意 我已经将项目的更新版本发布到新的仓库 PostTypes

WP Custom Post Type Class v1.4

Latest Stable Version Total Downloads License

一个类,可以帮助您快速构建更高级的自定义帖子类型。

安装

使用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 帖子的ID
  • icon 帖子的缩略图

填充列

您需要创建一个函数来填充一个不是自动填充的列。

您可以使用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