利于面向對象方式開發 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:模板文件目錄