jhorlima / wp-mocabonita
WordPress插件开发框架
Requires
- php: >=5.5.9
- illuminate/database: ~5
- illuminate/http: ~5
- illuminate/pagination: ~5
- nesbot/carbon: ~1.20
- symfony/var-dumper: ~3
Requires (Dev)
- johnpbloch/wordpress: 4.2
- phpdocumentor/phpdocumentor: 2.9.0
- phpunit/phpunit: ~4.0
- dev-master
- 3.3.6.10
- 3.3.6.9
- 3.3.6.8
- 3.3.6.7
- 3.3.6.6
- 3.3.6.5
- 3.3.6.4
- 3.3.6.3
- 3.3.6.2
- 3.3.6.1
- 3.3.6
- 3.3.5.4
- 3.3.5.3
- 3.3.5.2
- 3.3.5.1
- 3.3.5
- 3.3.4
- 3.3.3
- 3.3.2.8
- 3.3.2.7
- 3.3.2.6
- 3.3.2.5
- 3.3.2.4
- 3.3.2.3
- 3.3.2.2
- 3.3.2.1
- 3.3.2
- 3.3.1
- 3.3.0
- 3.2.10
- 3.2.9
- 3.2.8
- 3.2.7
- 3.2.6
- 3.2.5
- 3.2.4
- 3.2.3
- 3.2.2
- 3.2.1
- 3.2.0
- 3.1.0
- 3.0.0
This package is auto-updated.
Last update: 2024-09-07 12:14:45 UTC
README
#MocaBonita - MocaBonita 是一个用于辅助创建 WordPress 插件的框架。
优点
- MVC模式
- Composer
- 验证
- ORM
- 面向对象
- 模板和视图
- 事件
- 仅在需要时才完全加载资源
- 不会干扰 WordPress 的生命周期,除非存在相关事件
- 易于学习
Antes de começar, é recomendado que você faça uma leitura desse artigo:
https://codex.wordpress.org/pt-br:Escrevendo_um_Plugin#Nomes.2C_arquivos_e_Locais
####1. 创建插件#### 访问 WordPress 安装目录下的 wp-content/plugins
文件夹,然后创建一个以插件名称命名的新的文件夹,例如:exemplo-plugin
。
####2. 导入 MocaBonita#### 首先需要在电脑上安装 Composer。
安装完成后,在插件目录下通过终端执行以下代码。
$ composer require jhorlima/wp-mocabonita --update-no-dev
####3. 配置插件#### 安装 MocaBonita 及其 Composer 依赖后,在插件目录中创建一个名为 index.php
的文件,并在其中添加以下代码
<?php /** * Plugin Name: Exemplo de Plugin * Plugin URI: http://exemplo.plugin.com * Description: Um exemplo de Plugin WordPress com MocaBonita * Version: 1.0.0 * Author: Fulando * Author URI: http://www.github.com/fulando * License: GLPU * * @doc: https://developer.wordpress.org/plugins/the-basics/header-requirements/ */ /** * Namespace base do Plugin * @doc: https://php.ac.cn/manual/pt_BR/language.namespaces.php */ namespace ExemploPlugin; use MocaBonita\MocaBonita; use MocaBonita\tools\MbPage; use MocaBonita\tools\MbPath; use MocaBonita\tools\MbRequest; use ExemploPlugin\controller\ExemploController; /** * Impedir que o plugin seja carregado fora do Wordpress * @doc: https://codex.wordpress.org/pt-br:Escrevendo_um_Plugin#Arquivos_de_Plugin */ if (!defined('ABSPATH')) { die('Acesso negado!' . PHP_EOL); } /** * Carregar o autoload do composer * Adicionar o namespace atual para ser interpretado pelo autoload do composer */ $pluginPath = plugin_dir_path(__FILE__); $loader = require $pluginPath . "vendor/autoload.php"; $loader->addPsr4(__NAMESPACE__ . '\\', $pluginPath); /** * Callback que será chamado ao ativar o plugin (Opicional) * @doc: https://jhorlima.github.io/wp-mocabonita/classes/MocaBonita.MocaBonita.html#method_active */ MocaBonita::active(function (MocaBonita $mocabonita){ // }); /** * Callback que será chamado ao desativar o plugin (Opicional) * @doc: https://jhorlima.github.io/wp-mocabonita/classes/MocaBonita.MocaBonita.html#method_deactive */ MocaBonita::deactive(function (MocaBonita $mocabonita){ // }); /** * Callback que terão as configurações do plugin * @doc: https://jhorlima.github.io/wp-mocabonita/classes/MocaBonita.MocaBonita.html#method_plugin */ MocaBonita::plugin(function (MocaBonita $mocabonita){ /** * Criando uma página para o Plugin */ $paginaExemplo = MbPage::create('Exemplo'); /** * Aqui podemos configurar alguns ajustes da página * @doc: https://jhorlima.github.io/wp-mocabonita/classes/MocaBonita.tools.MbPage.html */ $paginaExemplo->setMenuPosition(1) ->setDashicon('dashicons-admin-site') ->setRemovePageSubmenu(); /** * Criando outra página para o Plugin * É possível inúmeras páginas ao plugin */ $paginaOutra = MbPage::create('Outra'); /** * Para que cada página funcione corretamente, é necessário criar uma Class que extenda de MbController * e depois adiciona-la à página, através de seu nome. * @doc: https://php.ac.cn/manual/en/language.oop5.basic.php#language.oop5.basic.class.class */ $paginaOutra->setController(ExemploController::class); /** * Cada método da controller pode ser representado por uma action na página, * entretanto o método na Controller deve ter o sufixo "Action", Ex: cadastrarAction(MbRequest $mbRequest, MbResponse $mbResponse). * @doc: https://jhorlima.github.io/wp-mocabonita/classes/MocaBonita.tools.MbAction.html */ $paginaOutra->addMbAction('cadastrar', function (MbRequest $mbRequest){ try{ return ModelExemplo::create($mbRequest->inputSource()); } catch (\Exception $e){ throw new \Exception("Não foi possível realizar o cadastro", 400, $e); } }); /** * Por padrão, ao ser criado uma página, uma action chamada index é criada, contudo é possível ajustar * suas configurações, assim como de qualquer outra action. * Assim como as páginas, as actions tem suas próprias configurações. */ $paginaOutra->getMbAction('index') ->setRequiresAjax(true) ->setRequiresMethod('GET') ->setRequiresLogin(false); $paginaOutra->addMbAction('apagar') ->setRequiresMethod('DELETE') ->setRequiredParam('id'); $paginaOutra->addMbAction('atualizar') ->setRequiresMethod('PUT') ->setRequiredParams(['id', 'usuario_id']); /** * Cada página pode ter suas capacidades alteradas, contudo elas só terão efeitos se for necessário o login do Wordpress * @doc: https://codex.wordpress.org/Roles_and_Capabilities#Capability_vs._Role_Table */ $paginaOutra->setCapability('read'); /** * Caso seu plugin precise de um shortcode, você pdoe adiciona-lo associando à página. * Seu comportamento é semelhante a de uma action, contudo seu sufixo deve ser "Shortcode", Ex: exemploShortcode(array $attributes, $content, $tags). * @doc: https://codex.wordpress.org/Shortcode_API * @doc: https://jhorlima.github.io/wp-mocabonita/classes/MocaBonita.MocaBonita.html#method_addMbShortcode */ $mocabonita->addMbShortcode('exemplo_shortcode', $paginaOutra, 'exemplo'); /** * Vamos criar uma terceira página que será uma subpágina da página Outra */ $paginaTeste = MbPage::create('Teste'); /** * É possível tornar uma página como subpágina de outra. * A única diferença entre uma página e uma subpágina é que no menu administrativo, a subpágina passa a ser um submenu * da página principal. Além disso, ao adicionar uma subpágina, você não precisa adiciona-la ao MocaBonita, * como vamos fazer nas próximas linhas com as outras duas páginas. * @doc: https://jhorlima.github.io/wp-mocabonita/classes/MocaBonita.tools.MbPage.html#method_setSubPage */ $paginaOutra->setSubPage($paginaTeste); /** * Após finalizar todas as configurações da página, podemos adiciona-las ao MocaBonita para que elas possam ser * usadas pelo Wordpress. Caso uma página não seja adicionada, apenas os shortcodes relacionados a ela serão * executados. */ $mocabonita->addMbPage($paginaExemplo); $mocabonita->addMbPage($paginaOutra); /** * É possível também definir assets ao plugin, wordpress ou página, basta obter seu MbAsset. * Nos assets é possível adicionar css e javascript ao Wordpress. * A class MbPath também pode ser utilizada para auxiliar nos diretórios do wordpress. * @doc: https://jhorlima.github.io/wp-mocabonita/classes/MocaBonita.tools.MbAsset.html * @doc: https://jhorlima.github.io/wp-mocabonita/classes/MocaBonita.tools.MbPath.html * @doc: https://jhorlima.github.io/wp-mocabonita/classes/MocaBonita.MocaBonita.html#method_getAssetsPlugin * @doc: https://jhorlima.github.io/wp-mocabonita/classes/MocaBonita.MocaBonita.html#method_getAssetsWordpress * @doc: https://jhorlima.github.io/wp-mocabonita/classes/MocaBonita.tools.MbPage.html#method_getMbAsset */ $mocabonita->getAssetsPlugin() ->setCss(MbPath::pBwDir('bootstrap/dist/css/bootstrap.min.css')) ->setCss(MbPath::pCssDir('app.css')); }, true); //O ultimo parâmetro de MocaBonita::plugin é opcional e define se o plugin está em desenvolvimento.
请记住编辑页面开头的注释以识别插件。建议插件命名空间与文件夹名称相同,使用 UpperCamelCase
格式。
建议内部页面结构如下
controller
:在此文件夹中放置插件的控制层。
model
:在此文件夹中放置插件的模型。
view
:在此文件夹中放置插件的视图和模板。
event
:在此文件夹中放置插件的事件。
public
:在此文件夹中放置插件的图像、CSS 和 JavaScript 文件。
同时,在 public
文件夹内创建 images
、css
和 js
文件夹,它们可以通过 MbPath 获取。
*请注意,在 controller
、model
和 service
文件夹中,您需要在 PHP 类中定义命名空间。
配置文档:[https://jhorlima.github.io/wp-mocabonita/classes/MocaBonita.MocaBonita.html](https://jhorlima.github.io/wp-mocabonita/classes/MocaBonita.MocaBonita.html)
####4. 页面####
MocaBonita 框架的页面负责传递插件信息。它们可以通过 WordPress 管理菜单访问,默认情况下,也可以通过 URL 的 "page" 参数访问,参数值为 slug。例如:?page=exemplo。
默认情况下,一个页面配置如下
<?php use MocaBonita\tools\MbPage; use MocaBonita\tools\MbAsset; /** * Criando uma página para o Plugin */ $paginaExemplo = MbPage::create('Exemplo'); /** * Configuração Padrão ao criar uma página do MocaBonita * O Slug da página, por padrão, é criado ao definir o nome. Ele utiliza a função do * Wordpress sanitize_title no nome para gerar o slug. * @doc: https://codex.wordpress.org/Function_Reference/sanitize_title */ $paginaExemplo->setName("Exemplo"); $paginaExemplo->setSlug("exemplo"); $paginaExemplo->setCapability("manage_options"); $paginaExemplo->setDashicon("dashicons-editor-code"); $paginaExemplo->setHideMenu(false); $paginaExemplo->setMbAsset(new MbAsset()); $paginaExemplo->setMainMenu(true); $paginaExemplo->setSubMenu(false); $paginaExemplo->setMenuPosition(1); $paginaExemplo->addMbAction('index');
可以在插件中添加大量页面,但它们需要在插件配置或 MocaBonita 事件的配置中创建,该事件在 WordPress 启动后初始化,称为 START_WORDPRESS。
*请注意:所有页面都需要在配置后添加到 MocaBonita。
<?php /** * Após finalizar todas as configurações da página, podemos adiciona-las ao MocaBonita para que elas possam ser * usadas pelo Wordpress. Caso uma página não seja adicionada, apenas os shortcodes relacionados a ela serão * executados. */ $mocabonita->addMbPage($paginaExemplo);
一个页面也可以有其他子页面。页面和子页面的唯一区别在于,在管理菜单中,子页面将成为主页面的子菜单。此外,添加子页面时,您不需要将其添加到 MocaBonita,因为这将成为页面的责任。
子页面可以像主页面一样创建,然后作为子页面添加,例如
<?php use MocaBonita\tools\MbPage; $paginaTeste = MbPage::create('Teste'); $paginaExemplo->setSubPage($paginaTeste);
或直接在现有页面中添加,只需提供新子页面的名称和 slug。
<?php $paginaExempo->addSubPage('Teste', 'teste');
有关 MocaBonita 页面类的完整文档,请参阅[完整文档](#)
https://jhorlima.github.io/wp-mocabonita/classes/MocaBonita.tools.MbPage.html
####5º 动作 ####
MocaBonita 的动作是页面的组件。系统需要执行的每个活动都通过动作来完成。一个页面可以有无数个动作,并且默认情况下,它已经带有动作 "index"。
如何添加动作的示例
<?php use MocaBonita\tools\MbPage; $paginaTeste = MbPage::create('Teste'); $paginaTeste->addMbAction("index");
默认情况下,动作已经配置了
<?php use MocaBonita\tools\MbPage; use MocaBonita\tools\MbRequest; use ExemploPlugin\model\Exemplo; $paginaTeste = MbPage::create('Teste'); $indexAction = $paginaTeste->addMbAction("buscar-todos"); /** * Configuração padrão ao criar uma action */ $indexAction->setMbPage($paginaTeste); $indexAction->setName("buscar-todos"); $indexAction->setFunctionName("buscarTodos"); $indexAction->setRequiresLogin(true); $indexAction->setRequiresAjax(false); $indexAction->setRequiresMethod(null); $indexAction->setFunctionComplement('Action'); $indexAction->setShortcode(false); $indexAction->setCapability(null); /** * Outros Exemplos */ $paginaTeste->addMbAction("create") ->setCallback(function (MbRequest $mbRequest){ return Exemplo::create($mbRequest->inputSource()); }); $paginaTeste->addMbAction("update", function (MbRequest $mbRequest){ return Exemplo::updateOrCreate(['id' => $mbRequest->query('id')], $mbRequest->inputSource()); })->setRequiredParam('id'); $paginaTeste->addMbAction("all")->setData(Exemplo::all());
更多信息请参考: https://jhorlima.github.io/wp-mocabonita/classes/MocaBonita.tools.MbAction.html
动作通过 URL 的 actions 参数来调用。例如:wp-admin/admin.php?page=teste&action=index, wp-admin/admin-post.php?page=teste&action=index 和 wp-admin/admin-ajax.php?page=teste&action=index
当一个动作没有 setCallback() 或 setData() 时,需要在页面上添加一个控制器来调用具有相应动作名称的 camelCase 格式并附加 Action 的方法。例如:action buscar-todos => buscarTodosAction()。
####6º 控制器 ####
建设中