wordpressvn / wp-meta-box
方便的包,可轻松创建 WordPress 元数据框。
1.5.0
2024-09-24 04:02 UTC
Requires
- php: ^7.4|^8.0
Requires (Dev)
- laravel/pint: ^1.17.3
- phpcompatibility/php-compatibility: *
README
此包旨在简化创建 WordPress 插件元数据框的过程。
⚠️ 在第一个稳定版本发布之前,API 可能会更改。请自行承担风险使用。
安装
composer require wordpressvn/wp-meta-box
用法
基本示例
use WPVNTeam\WPMetaBox\WPMetaBox; $meta_box = WPMetaBox::post('Post settings') ->set_post_type('post'); $meta_box->add_option('text', [ 'name' => 'name_of_option', 'label' => __('Label of option', 'textdomain'), 'description' => __('Some additional description', 'textdomain') ]); $meta_box->make(); // Or for taxonomies: $meta_box = WPMetaBox::taxonomy('Taxonomy settings') ->set_taxonomies(['category']);
可用类型
文本
$meta_box->add_option('text', [ 'name' => 'name_of_option', 'label' => __('Label of option', 'textdomain') ]);
日期
$meta_box->add_option('date', [ 'name' => 'name_of_option', 'label' => __('Label of option', 'textdomain') ]);
数字
$meta_box->add_option('number', [ 'name' => 'name_of_option', 'label' => __('Label of option', 'textdomain') ]);
文本区域
$meta_box->add_option('textarea', [ 'name' => 'name_of_option', 'label' => __('Label of option', 'textdomain') ]);
复选框
$meta_box->add_option('checkbox', [ 'name' => 'name_of_option', 'label' => __('Label of option', 'textdomain') ]);
选择(单选按钮)
$meta_box->add_option('checkbox', [ 'name' => 'name_of_option', 'label' => __('Label of option', 'textdomain'), 'options' => [ 1 => 'option 1', 2 => 'option 2' ] ]);
颜色
$meta_box->add_option('color', [ 'name' => 'name_of_option', 'label' => __('Label of option', 'textdomain') ]);
选择
$meta_box->add_option('select', [ 'name' => 'name_of_option', 'label' => __('Label of option', 'textdomain'), 'options' => [ 1 => 'option 1', 2 => 'option 2' ] ]);
您也可以允许多个值。
$meta_box->add_option('select', [ 'name' => 'name_of_option', 'label' => __('Label of option', 'textdomain'), 'multiple' => true, 'options' => [ 1 => 'option 1', 2 => 'option 2' ] ]);
Select2
Select2 提供了一个可定制的选择框,支持搜索。
您可以使用与常规 select 相同的方式使用 select2。
$meta_box->add_option('select2', [ 'name' => 'name_of_option', 'label' => __('Label of option', 'textdomain'), 'options' => [ 1 => 'option 1', 2 => 'option 2' ] ]);
如果您想通过 Ajax 搜索选项,可以通过定义两个回调(或函数名)来实现。一个用于获取和过滤选项,另一个用于获取值回调。
以下示例使用 select2 选择一个页面。
$meta_box->add_option('select2', [ 'name' => 'name_of_option', 'label' => __('Label of option', 'textdomain'), 'ajax' => [ 'value' => function($pageId) { return get_the_title($pageId) ?? null; }, 'action' => function() { $results = array_reduce(get_posts(['post_type' => 'page', 's' => $_GET['q']]), function($item, $page) { $item[$page->ID] = $page->post_title; return $item; }, []); echo json_encode($results); die(); } ] ]);
您可以通过将 config 中的 multiple 设置为 true 来允许多个值。如果您想在这里使用 Ajax 功能,请确保也定义了值回调。
$meta_box->add_option('select2', [ 'name' => 'name_of_option', 'label' => __('Label of option', 'textdomain'), 'multiple' => true, 'ajax' => [ 'value' => function($ids) { foreach($ids as $id) { $titles[$id] = get_the_title($id) ?? $id; } return $titles ?? []; }, 'action' => function() { $results = array_reduce(get_posts(['post_type' => 'page', 's' => $_GET['q']]), function($item, $page) { $item[$page->ID] = $page->post_title; return $item; }, []); echo json_encode($results); die(); } ] ]);
您可以使用 config 将任何您想传递的内容传递给 select2 配置,配置中的 Ajax 部分除外。
选项列表可在此处找到 这里。
包中包含的 Select2 从 Cloudflare CDN 加载。您可以使用 wmb_select2_assets 过滤钩子覆盖此内容。
媒体
$meta_box->add_option('media', [ 'name' => 'name_of_option', 'label' => __('Label of option', 'textdomain') ]);
图片
$meta_box->add_option('image', [ 'name' => 'name_of_option', 'label' => __('Label of option', 'textdomain') ]);
代码编辑器
$meta_box->add_option('code-editor', [ 'name' => 'name_of_option', 'label' => __('Label of option', 'textdomain') ]);
WP 编辑器
$meta_box->add_option('wp-editor', [ 'name' => 'name_of_option', 'label' => __('Label of option', 'textdomain') ]);
您可以通过提供 config 数组来自定义编辑器。有关此配置的更多信息,请参阅 wp.editor 文档。
重复
使用重复选项的画廊示例
$meta_box->add_option('repeater', [ 'name' => 'gallery', 'label' => __('Gallery', 'textdomain'), ])->add_repeater_option('image', [ 'name' => 'image', 'label' => __('Image', 'textdomain'), ]);
贡献者
许可协议
MIT。有关更多信息,请参阅 许可文件。