利于面向对象方式开发 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:模板文件目录