Npcink Blog
切换菜单

Impack WordPress - 面向对象方式开发 WordPress 主题

利于面向对象方式开发 WordPress 主题、插件的 PHP 公共代码包。

本页目录7 节

利于面向对象方式开发 WordPress 主题、插件的 PHP 公共代码包。

注册元框/分类法字段

1.一种元框一个类

use Impack\WP\Utils\Metabox;
class Custombox extends Metabox
{
function render($post)
{
echo '自定义内容';
}
function save($postid)
{
// 保存数据
}
}

2.在 add_meta_boxes 钩子执行

Custombox::add('boxid', '标题');

3.注册字段:创建有 addField/editField/saveField 方法的类后执行 add 方法

SeoField::add('category');

注册类型/分类法

1.类型配置文件 post.php 填注册参数

return [
'news' => [
// 'class' => News::class,
'name' => 'news',
'label' => '新闻',
'taxonomy' => ['tag'], //分类法配置的键名
'metabox' => [
//key=元框ID,val=类名和add方法的参数数组
'boxid' => [Custombox::class, '标题'],
],
],
];

2.分类法配置文件 taxonomy.php

return [
'tag' => [
'field' => [SeoField::class], //字段类名数组
],
];

3.init 钩子内执行

(new Impack\WP\Register\Registrar())->post();

4.配置项有 metabox/taxonomy/field 时,自动注册这些功能

5.配置项有 class 时,自动以单例形式绑定到容器,数组键用作绑定的 ID

异常处理规则

  • 简单错误不终止程序运行
  • 非调试模式下不输出任何简单错误
  • 调试模式下显示所有错误和详细信息
  • JSON 请求返回 JSON 格式的信息

使用自定义异常响应 AJAX 请求

1.定义异常消息

use Impack\Support\Enum;
class CustomEnum extends Enum
{
const ERROR = [0, '错误消息'];
}

2.定义异常类

class CustomException extends Exception{
use \Impack\WP\Exceptions\Render;
protected $enum = CustomEnum::class
}

3.抛出异常,参数支持 WP_Error、Enum

throw new CustomException('ERROR');

数据模型:Post/Comment/Term/User

使用时不需要 new 实例,调用静态方法 where

  • where:返回单例,自动添加基础参数,支持传参
  • limit/order/in/notin/search/meta/metas:添加查询参数
  • param/merge:键值对添加参数/合并参数
  • edit:

编辑 add/update 常用的参数

  • get:读取数据,参数默认为 null 返回自定义对象数组
  • add:新增数据
  • update:更新指定 ID 的数据
  • delete:静态方法,删除数据
  • Post 方法:

parent/post/tax/taxs

  • Term 方法:parent/noChild
  • User 方法:user/role/hasPosts/adminStyle
  • Comment 方法:

parent/comment/status/post/author/subtree

  • 新增术语时未提供 slug 会使用名称代替,中文将转成拼音
  • setSingle:参数支持类名/init,自定义 get 返回的对象。
$post = \Impack\WP\Query\Post::where();
$term = \Impack\WP\Query\Term::where();
$user = \Impack\WP\Query\User::where();
$comment = \Impack\WP\Query\Comment::where();
// 查询文章
$post->limit(10)->get();
// 删除数据
$term::delete(1);
// 新增文章
$post->edit('标题', '内容')->add();
// 更新文章
$post->edit('修改标题')->update(1);
// 新增评论
$comment->edit('新评论')->add();
// 更新评论
$comment->edit('修改评论')->update(1);
// 新增术语
$term->edit('名称')->add();
// 更新术语
$term->parent(1)->update(2);
// 新增用户
$user->edit('login', 'pass', 'name')->add();
// 更新用户
$user->edit(null, null, '新名字')->update(1);

WordPress 内置的全局对象参考

  • wp、wp_object_cache、wp_embed
  • wpdb、wp_query、wp_rewrite
  • wp_user、wp_roles、wp_widget_factory
  • wp_locale、wp_locale_switcher

工作区目录建议

  • src:所有类存放的目录
  • config:配置信息。放置所有硬编码参数以便修改
  • assets:js/css/fonts/images 等静态资源目录
  • view:模板文件目录