theantichris/simple-plugin-framework

此包已被废弃且不再维护。未建议替代包。

一个用于创建WordPress插件的简单框架。

v5.0.2 2016-01-02 16:14 UTC

This package is not auto-updated.

Last update: 2020-01-24 15:12:36 UTC


README

介绍

这是一个用于开发WordPress插件的简单框架。

WordPress中的实体(文章类型、分类法等)被视为对象,因此创建新的实体并设置其属性与PHP中的任何对象相同。每个对象在实例化时都会将其自身与适当的WordPress动作钩子关联起来。

入门指南

Composer

该包托管在Packagist上,并准备好与Composer一起使用。只需将包添加到您的composer.json文件中。

在您的插件中使用SPF

开始使用SPF的最简单方法是为您的插件创建一个类,并在类的构造函数中放置框架代码。

class myPlugin
{
    public function __construct()
    {
        // Place SPF code in there.
    }
}

new myPlugin();

创建WordPress对象

SPF包含用于创建文章类型、分类法、页面、设置和仪表板小部件的类。这些类都继承自WordPressObject类。

WordPressObject

WordPressObject类提供了一些其他类使用的一些常用方法,并为定义您的文本域提供了一个静态属性。这是一个抽象类,不能被实例化。

文本域

要为所有WordPressObject类指定自定义文本域,请设置WordPressObject父类的静态属性$textDomain。这是可选的,文本域的默认值为'default'。

WordPressObject::$textDomain = 'my-text-domain';

getSlug()

此公共方法返回对象的slug。slug是WordPress数据库中对象的唯一标识符。此方法在框架中用于将相关对象关联起来。

echo $someObject->getSlug();

getName()

使用此公共方法获取对象的用户可读显示名称。$name属性在返回之前通过文本域传递。

echo $someObject->getName();

display()

此方法从不直接调用,而是用作WordPress对象的显示回调函数。它调用视图类的render()方法,传入对象的$viewFile和$viewData属性。

PostType

PostType类的构造函数需要创建文章类型的名称和一个slug。名称必须是复数形式,以确保正确生成标签。

PostType类的构造函数生成文章类型的标签,然后将register_post_type()函数绑定到init钩子上。

$postType = new PostType('My Post Type');

PostType 的其余属性默认设置为创建一个基本、公开的帖子类型,但可以使用设置器进行覆盖。

setDescription()

setDescription() 方法接受一个字符串。

$postType->setDescription('This is my custom post type.');

hasArchive()

hasArchive() 方法接受一个布尔值。默认为 true。

$postType->hasArchive(false);

setPublic()

setPublic() 方法接受一个布尔值。这决定了帖子类型是否显示在仪表板和网站的前端。

$postType->setPublic(false);

setMenuPosition()

setMenuPosition() 方法接受一个整数或数字字符串。数字越高,帖子类型在仪表板中的菜单项位置越高。如果您指定了一个被另一个菜单项使用的值,可能会覆盖另一个。

$postType->setMenuPosition(85);

或者...

$postType->setMenuPosition('85');

setMenuIcon()

setMenuIcon() 方法接受一个图像 URL 或 dashicon 作为字符串。

$postType->setMenuIcon('http://placehold.it/15x15');

或者...

$postType->setMenuIcon('dashicons-admin-tools');

setCapabilities()

setCapabilities() 方法接受一个字符串数组,用于管理帖子类型的权限。

包含的 Capabilities 类可以用来确保使用有效的 WordPress 权限。

默认

array(
    'edit_post'          => Capability::edit_posts,
    'read_post'          => Capability::read_posts,
    'delete_post'        => Capability::delete_posts,
    'edit_posts'         => Capability::edit_posts,
    'edit_others_posts'  => Capability::edit_others_posts,
    'publish_posts'      => Capability::publish_posts,
    'read_private_posts' => Capability::read_private_posts,
)

用法

$postType->setCapabilities($myCapabilitiesArray);

setSupports()

setSupports() 方法接受一个字符串数组,表示帖子类型支持的 WordPress 功能。您也可以传入 false 来禁用所有功能。

$postType->setSupports(['title', 'editor', 'thumbnail']``);

分类法

分类法类在实例化时需要分类法的复数显示名称和 slug。可选地,要注册分类法的帖子类型(默认为帖子)和文本域。

构造函数设置属性,生成标签,并将 register_taxonomy() 函数绑定到 init 钩子。

SPF 在添加之前检查分类法是否存在。

$taxonomy = new Taxonomy('Custom Tags', $postType->getSlug);

可以使用 addTerm() 方法向分类法中添加术语。它需要添加的术语,并可可选地接受术语描述。此方法检查术语是否已被添加,并且只有当它未被添加时才添加。它将 WordPress 函数 wp_insert_term 绑定到 init 钩子。此方法可以链式调用。

$taxonomy->addTerm('Tag One', 'This is the first tag.');

元框

可以使用此类将包含 1 个或多个自定义字段的元框添加到您的帖子类型中。对象在实例化时需要名称、附加到的帖子类型 slugs 以及一个视图文件。可选地,可以传入视图数据。

构造函数设置属性,然后将 addMetaBox() 方法绑定到 add_meta_boxes 钩子,并将 saveMetaBox() 方法绑定到 save_post 钩子。

$postTypes 参数可以是单个字符串,也可以是字符串数组,如果您想将元框绑定到多个帖子类型。

$metaBox = new MetaBox('My MetaBox', $postTypes, $viewFiles, $viewData);

类会自动处理在帖子更新时将自定义字段保存到WordPress数据库。

设置器

设置器可用于上下文和优先级属性。

setContext()

此方法设置元盒将在页面的哪个部分显示。接受的值有 'normal'、'advanced' 和 'side'。默认为 'advanced'。

$metaBox->setContext('side');
setPriority()

此方法设置在元盒将显示的上下文中的优先级。接受的值有 'high'、'core'、'default' 和 'low'。默认为 'default'。

$metaBox->setPriority('low');

自定义字段

要使用MetaBox类在元盒视图文件中的静态方法添加自定义字段。

MetaBox::CheckboxInput($name, $slug, $value, $default = '');
MetaBox::ColorInput($name, $slug);
MetaBox::DateInput($name, $slug);
MetaBox::DateTimeInput($name, $slug);
MetaBox::DateTimeLocalInput($name, $slug);
MetaBox::EmailInput($name, $slug);
MetaBox::FileInput($name, $slug);
MetaBox::HiddenInput($name, $slug);
MetaBox::MonthInput($name, $slug);
MetaBox::NumberInput($name, $slug, $step = '1');
MetaBox::PasswordInput($name, $slug);
MetaBox::RadioButtonInputs($name, $slug, $options, $displayBlock);
MetaBox::RangeInput($name, $slug, $min, $max);
MetaBox::SearchInput($name, $slug);
MetaBox::SelectInput($name, $slug, $options);
MetaBox::TelInput($name, $slug);
MetaBox::Textarea($name, $slug, $rows, $cols);
MetaBox::TextInput($name, $slug);
MetaBox::TimeInput($name, $slug);
MetaBox::UrlInput($name, $slug);
MetaBox::WeekInput($name, $slug);

页面

您可以使用MenuPage、ObjectPage、UtilityPage、SubMenuPage和OptionsPage类创建新的仪表板页面。所有页面类都继承自Page抽象类。

所有页面类在实例化时都需要一个名称、slug和视图文件,$viewData可以可选传入。slug和名称将自动添加到$viewData数组中。

基本构造函数设置参数,然后将抽象的addPage()方法绑定到admin_menu钩子。在子类中覆盖addPage()方法以使用正确的WordPress函数添加该类型的页面。

设置器

设置器可用于能力、菜单图标、位置。对于SubMenuPage,还有父slug的设置器。

setCapability()

setCapability()方法接受一个字符串,指定用户访问页面的权限级别。

包含的 Capabilities 类可以用来确保使用有效的 WordPress 权限。

$page->setCapability(Capability::manage_options);
setMenuIcon()

setMenuIcon()方法接受一个URL或dashicon的名称作为字符串。

$page->setMenuIcon('http://placehold.it/15x15');

或者...

$page->setMenuIcon('dashicons-admin-tools');
setPosition()

setPosition()方法接受一个整数或数字字符串。如果您指定了已被其他菜单图标占用的位置,它们可能会相互覆盖。

$page->setPosition(100);

或者...

$page->setPosition('100');
setParentSlug()

setParentSlug()方法仅适用于SubMenuPage类。设置父slug是必需的。它设置了SubMenuPage的父页面。它接受一个字符串值,最简单的方法是使用父页面对象的getSlug()方法。将$parentSlug设置为null以创建一个不在菜单中出现的页面。

$subMenuPage->setParentSlug($parentPage->getSlug());

页面类型

MenuPage

要添加顶级菜单页面,请使用MenuPage类。调用add_menu_page()函数。

$menuPage = new MenuPage('My Page', $myView);
ObjectPage

ObjectPage在对象级别(帖子、媒体、链接、页面、评论等)添加顶级页面。调用add_object_page()函数。

$objectPage = new ObjectPage('My Page', $myView);
UtilityPage

UtilityPage 在实用程序级别(外观、插件、用户、工具、设置等)添加顶级页面。调用 add_utility_page() 函数。

$utilityPage = new UtilityPage('My Page', $myView);
OptionsPage

OptionsPage 在设置下添加子菜单页面。调用 add_options_page 函数。

$optionsPage = new OptionsPage('My Page', $myView);
SubMenuPage

SubMenuPage 为其他页面添加一个页面作为子菜单项。调用 add_submenu_page() 函数。

$subPage = new SubMenuPage('My Sub Page', $myView);
$subPage->setParentSlug($myPage->getSlug());

Settings

SPF 的 Settings API 部分由三个类组成。Settings、SettingsSection 和 SettingsField。

SettingsField 对象代表单个设置字段,而 SettingsSection 对象代表 SettingsField 对象的集合。

Settings 对象管理 WordPress 交互以及设置将在哪一页上显示。

Settings 构造函数需要指定设置将在哪一页上显示的 slug。

$settings = new Settings($myPage->getSlug());

SettingsFields

SettingsField 构造函数需要传入一个名称、slug 和一个视图文件。也可以传入视图数据。

您必须指定字段的 slugs 的前缀,以使用 $prefix 参数帮助防止数据库中的命名冲突。

视图文件应仅包含渲染输入字段的 HTML 和逻辑。名称和 slug 会自动添加到 $viewData 属性。

$field = new SettingsField('My Field', $prefix, $viewView, $viewData);

SettingsSection

SettingsSection 类需要实例化时提供名称和 slug。可以可选地传入视图文件和视图数据。

除非您需要显示特定内容,如向用户显示说明,否则您不需要包含视图文件,因为 WordPress 会自动在页面上显示该部分的名称。

如果使用视图文件,名称会自动添加到 $viewData 属性。

$section = new SettingsSection('Section One', $viewFile, $viewData);

Adding SettingsField to SettingsSection

可以使用 addFields() 方法将单个 SettingsField 或 SettingsField 对象数组分配给 SettingsSection。

$section->addFields($field1)->addFields($field2);

或者...

$section->addFields(array($field1, $field2));

Adding SettingsSection to Settings

使用 Settings 的 addSections() 方法将 SettingsSection 对象添加到 Settings 对象。与 addFields() 类似,此方法接受单个 SettingsSection 或 SettingsSection 数组。

$settings->addSections($section1)->addSection($section2);

或者...

$settings->addSections(array($section1, $section2));

DashboardWidget

您可以使用 DashboardWidget 类向 WordPress 仪表板添加新小工具。

在实例化时,该类需要一个名称、slug 和视图文件路径。您可以在可选的 $viewData 参数中提供需要传递给视图的数据。DashboardWidget 的名称和 slug 会自动添加到 $viewData。

构造函数分配属性并将 addWidget() 方法绑定到 wp_dashboard_setup 钩子。

addWidget() 方法调用 WordPress 函数 wp_add_dashboard_widget

$myWidget = new DashboardWidget('My Widget', $widgetView);

WelcomePanel

您可以使用这个类替换默认的WordPress欢迎面板,以自定义欢迎面板。这是通过使用welcome_panel钩子来实现的。

这个类只需要传入一个视图文件,但可以选择传入视图数据。视图文件将包含您希望欢迎面板显示的HTML。

$welcomePanel = new WelcomePanel($welcomePanelView);

视图

WordPressObject类使用包含的静态View类来显示它们的输出。每个对象都有一个display()方法,用作WordPress函数中的回调。

这个display()方法调用View::render(),传入$viewFile和$viewData属性。$viewFile属性是一个表示要使用的视图文件的完整路径和文件名的字符串。$viewData属性是一个关联数组,包含视图文件中可能需要的额外信息。

render()方法提取$viewData属性以在视图中创建变量。例如$viewData['foo']变成$foo

视图文件至少是一个包含对象HTML输出的PHP文件。您可以在视图文件中包含尽可能少或尽可能多的逻辑。