potterywp / super-cpt
为WordPress提供极其简单和吸引人的自定义文章类型、自定义文章元数据和自定义分类。
This package is auto-updated.
Last update: 2024-09-13 02:43:46 UTC
README
注意:此仓库的master分支是夜间构建版本,请谨慎使用。
WordPress插件,用于构建极其简单和吸引人的自定义文章类型、自定义文章元数据和自定义分类。您可以从WordPress.org插件库安装。
描述
SuperCPT是为程序员而创建的,由程序员实现的针对自定义文章类型、自定义分类和自定义文章元数据的对象包装器。"简单来说",SuperCPT
- 简化了自定义文章类型和自定义分类的过程(例如,自动将名称添加到所有标签中),
- 允许您为所有自定义文章类型和分类设置默认选项,
- 显著简化了创建、保存和显示自定义文章元数据的过程,
- 非常吸引人!您的自定义字段经过精心设计以看起来很棒,SuperCPT还包含来自Font Awesome的361个精美图标(并支持添加您自己的图标)
演示视频
观看一个简短演示和教程的屏幕录像。
更多
说明
根据您何时何地声明自定义文章类型和分类,您有不同选项可以选择要钩到的操作。`after_setup_theme` 是最安全的选择,但如果您在其他插件中引用此内容,`plugins_loaded` 是一个好选择。为了避免出现致命错误,在引用之前应该检查类 `Super_Custom_Post_Type` 是否存在。下面的代码示例是参考代码。
自定义文章类型
要定义一个新的自定义文章类型,请使用字符串创建 `Super_Custom_Post_Type` 类的实例。例如,
$movies = new Super_Custom_Post_Type( 'movie' );
它的工作方式非常类似于 register_post_type
。通过使用这个,您获得的第一件事是,所有的标签都设置了“电影”或“电影们”。如果我们的文章类型是“indie-film”,则标签会有“独立电影”和“独立电影们”。当然,您也有能力在goose/geese这样的情况下设置复数词。您还可以通过过滤器定义自己的自定义文章类型默认值。最后,您还可以访问 `Super_Custom_Post_Type` 的父类 `Super_Custom_Post_Meta`,以便快速、干净、直观地创建自定义文章元数据,我们将在下面进行介绍。
最后,如果您已经构建了许多自定义文章类型,您可能已经厌倦了那个大头针图标。SuperCPT提供了来自 Font Awesome 的361个精美图标,实现起来非常简单。以下是它的样子
$movies->set_icon( 'film' );
自定义分类
要定义一个新的自定义分类,与自定义文章类型类似,您需要用字符串创建 `Super_Custom_Taxonomy` 类的实例。例如,
$actors = new Super_Custom_Taxonomy( 'actor' );
同样,我们为此免费获得了标签,使用“演员”或“演员们”作为适当的标签,而无需逐个指定16个标签。
自定义文章元数据
自定义文章元数据是SuperCPT最耀眼的地方,因为这个过程通常是耗时最长的。《Super_Custom_Post_Meta》是一个可以添加到任何文章类型中的独立类,包括内置的文章和页面类型。这个类有一个名为《add_meta_box》的方法,它完成了大部分工作,并且某种程度上模仿了WordPress的功能。以下是一个示例
$movies->add_meta_box( array(
'id' => 'features',
'fields' => array(
'tagline' => array( 'type' => 'text' )
)
) );
《add_meta_box》方法接受一个参数数组(与核心函数接受的普通有序参数不同)。《id》是唯一必需的属性,它将成为元框的ID以及标题(这将转换为“单词”,例如,《movie_details》将转换为“电影详情”)。《fields》是元框中所有字段的数组。它是一个关联数组,其中数组的键是字段名称,值是字段属性的其他关联数组。这些键紧密反映结果字段中的HTML属性,任何插件不认识的键实际上将成为HTML属性(例如,传递《'data-src' => 'foo'》将成为字段中的HTML属性《data-src="foo"》)。请参阅参考文档以获取《add_meta_box》参数数组和字段数组中所有选项的完整范围。
简而言之,使用这个类意味着您无需进行任何额外工作来存储数据、检索数据、样式化框等。
辅助函数
SuperCPT提供了一些辅助函数来显示和操作您的文章元数据。
示例代码
以下是完整的示例代码
function scpt_demo() {
if ( ! class_exists( 'Super_Custom_Post_Type' ) )
return;
$demo_posts = new Super_Custom_Post_Type( 'demo-post' );
# Test Icon. Should be a square grid.
$demo_posts->set_icon( 'th-large' );
# Taxonomy test, should be like tags
$tax_tags = new Super_Custom_Taxonomy( 'tax-tag' );
# Taxonomy test, should be like categories
$tax_cats = new Super_Custom_Taxonomy( 'tax-cat', 'Tax Cat', 'Tax Cats', 'category' );
# Connect both of the above taxonomies with the post type
connect_types_and_taxes( $demo_posts, array( $tax_tags, $tax_cats ) );
# Add a meta box with every field type
$demo_posts->add_meta_box( array(
'id' => 'demo-fields',
'context' => 'normal',
'fields' => array(
'textbox-demo' => array(),
'textarea-demo' => array( 'type' => 'textarea' ),
'wysiwyg-demo' => array( 'type' => 'wysiwyg' ),
'boolean-demo' => array( 'type' => 'boolean' ),
'checkboxes-demo' => array( 'type' => 'checkbox', 'options' => array( 'one', 'two', 'three' ) ),
'radio-buttons-demo' => array( 'type' => 'radio', 'options' => array( 'one', 'two', 'three' ) ),
'select-demo' => array( 'type' => 'select', 'options' => array( 1 => 'one', 2 => 'two', 3 => 'three' ) ),
'multi-select-demo' => array( 'type' => 'select', 'options' => array( 'one', 'two', 'three' ), 'multiple' => 'multiple' ),
'date-demo' => array( 'type' => 'date' ),
'label-override-demo' => array( 'label' => 'Label Demo' )
)
) );
# Add another CPT to test one-to-one (it could just as easily be one-to-many or many-to-many) relationships
$linked_posts = new Super_Custom_Post_Type( 'linked-post', 'Other Post', 'Other Posts' );
$linked_posts->add_meta_box( array(
'id' => 'one-to-one',
'title' => 'Testing One-to-One relationship',
'context' => 'side',
'fields' => array(
'demo-posts' => array( 'type' => 'select', 'data' => 'demo-post' ),
'side-wysiwyg' => array( 'type' => 'wysiwyg' )
)
) );
$linked_posts->set_icon( 'cogs' );
}
add_action( 'after_setup_theme', 'scpt_demo' );
作者
Matthew Boynes
版权和许可
版权所有 2012 Matthew Boynes
本作品许可协议为Apache License, Version 2.0(以下简称“协议”);除非遵守协议,否则不得使用本作品。您可以在《LICENSE》文件或以下位置获取协议副本:
https://apache.ac.cn/licenses/LICENSE-2.0
除非适用法律要求或书面同意,否则根据本协议分发的软件按“原样”分发,不提供任何明示或暗示的保证或条件。有关许可的具体语言、权限和限制,请参阅协议。