Portfólio
Gerencie seus projetos e trabalhos de portfólio com custom post type
by Charles Batista · github.com/charlesbatista/wordpress-plugin-boilerplate · website
Install
No release zip yet. The repository archive installs, but the folder name will carry the branch suffix and updates will not flow:
wp plugin install https://github.com/charlesbatista/wordpress-plugin-boilerplate/archive/refs/heads/master.zipPlugin Boilerplate - WordPress
Boilerplate moderno para criação de plugins WordPress seguindo as melhores práticas atuais de PHP e WordPress.
🚀 Características
- PHP 8.0+: Utiliza recursos modernos do PHP (namespaces, type hints, etc.)
- Arquitetura OOP: Código orientado a objetos organizado
- PSR-4 Autoloading: Autoload automático de classes
- Separação de Concerns: Admin, Frontend e Core separados
- Gestão de Capabilities: Sistema robusto de permissões
- Internacionalização: Pronto para tradução
- WordPress Coding Standards: Segue os padrões do WordPress
- Segurança: Nonces, sanitização e validação incluídos
- Gutenberg Ready: Suporte ao editor de blocos
📁 Estrutura de Diretórios
plugin-boilerplate/
├── admin/
│ ├── assets/
│ │ ├── css/
│ │ │ └── admin.css
│ │ └── js/
│ │ └── admin.js
│ └── views/
│ ├── dashboard.php
│ └── settings.php
├── includes/
│ ├── Admin/
│ │ └── Admin.php
│ ├── Capabilities/
│ │ └── CapabilityManager.php
│ ├── Frontend/
│ │ └── Frontend.php
│ ├── PostTypes/
│ │ └── PostTypeManager.php
│ ├── Activator.php
│ ├── Deactivator.php
│ ├── I18n.php
│ ├── Loader.php
│ └── Plugin.php
├── public/
│ └── assets/
│ ├── css/
│ │ └── public.css
│ └── js/
│ └── public.js
├── languages/
├── plugin-boilerplate.php
├── uninstall.php
└── README.md
🔧 Como Usar
1. Renomear o Plugin
Faça uma busca e substituição (case-sensitive) dos seguintes termos:
Plugin Boilerplate→ Nome do seu pluginplugin-boilerplate→ slug do seu plugin (kebab-case)plugin_boilerplate→ prefixo do seu plugin (snake_case)PluginBoilerplate→ namespace do seu plugin (PascalCase)PLUGIN_BOILERPLATE→ constantes do seu plugin (UPPER_CASE)
2. Atualizar Cabeçalho
Edite o cabeçalho em plugin-boilerplate.php:
/**
* Plugin Name: Seu Plugin
* Plugin URI: https://seusite.com
* Description: Descrição do seu plugin
* Version: 1.0.0
* Author: Seu Nome
* Author URI: https://seusite.com
* Text Domain: seu-plugin
*/
3. Configurar Custom Post Type
Edite includes/PostTypes/PostTypeManager.php para configurar seu custom post type:
- Altere labels
- Defina o slug
- Configure capabilities
- Ajuste supports
4. Configurar Capabilities
Edite includes/Capabilities/CapabilityManager.php:
- Defina suas capabilities customizadas
- Configure permissões por role
- Adicione roles personalizados se necessário
5. Desenvolver Funcionalidades
Área Admin
Adicione funcionalidades em includes/Admin/Admin.php:
public function my_custom_function() {
// Seu código aqui
}
Registre hooks em includes/Plugin.php:
$this->loader->add_action('admin_init', $admin, 'my_custom_function');
Área Pública
Adicione funcionalidades em includes/Frontend/Frontend.php:
public function my_custom_function() {
// Seu código aqui
}
Registre hooks em includes/Plugin.php:
$this->loader->add_action('wp_footer', $public, 'my_custom_function');
🔐 Sistema de Capabilities
O boilerplate inclui um sistema robusto de gestão de capabilities:
Capabilities Padrão
edit_{plugin}- Editar item individualread_{plugin}- Ler item individualdelete_{plugin}- Deletar item individualedit_{plugin}s- Editar itensedit_others_{plugin}s- Editar itens de outros usuáriospublish_{plugin}s- Publicar itensread_private_{plugin}s- Ler itens privadosdelete_{plugin}s- Deletar itensmanage_{plugin}_settings- Gerenciar configuraçõesview_{plugin}_reports- Ver relatóriosexport_{plugin}_data- Exportar dadosimport_{plugin}_data- Importar dados
Distribuição por Role
- Administrator: Todas as capabilities
- Editor: Gerenciamento completo exceto configurações
- Author: Gerenciar próprios posts
- Contributor: Editar e ler próprios posts
Criar Role Customizado
$capability_manager = new CapabilityManager();
$capability_manager->create_custom_role(
'custom_role',
'Role Customizado',
[
'read' => true,
'edit_plugin_boilerplate' => true,
]
);
🎨 Assets
CSS
- Admin:
admin/assets/css/admin.css - Public:
public/assets/css/public.css
JavaScript
- Admin:
admin/assets/js/admin.js - Public:
public/assets/js/public.js
Variáveis JavaScript
As variáveis são localizadas automaticamente:
Admin:
pluginBoilerplateAdmin.ajaxUrl
pluginBoilerplateAdmin.nonce
pluginBoilerplateAdmin.strings
Public:
pluginBoilerplatePublic.ajaxUrl
pluginBoilerplatePublic.nonce
🌐 Internacionalização
Criar Arquivo de Tradução
- Instale o plugin Loco Translate ou use Poedit
- Crie tradução para
plugin-boilerplate - Salve em
languages/
Usar Strings Traduzíveis
__('Texto', PLUGIN_BOILERPLATE_TEXT_DOMAIN);
_e('Texto', PLUGIN_BOILERPLATE_TEXT_DOMAIN);
esc_html__('Texto', PLUGIN_BOILERPLATE_TEXT_DOMAIN);
esc_html_e('Texto', PLUGIN_BOILERPLATE_TEXT_DOMAIN);
🔒 Segurança
Nonces
Sempre use nonces para requisições:
// Criar nonce
wp_create_nonce('plugin_boilerplate_action');
// Verificar nonce
wp_verify_nonce($_POST['nonce'], 'plugin_boilerplate_action');
Sanitização
sanitize_text_field($_POST['field']);
sanitize_email($_POST['email']);
sanitize_url($_POST['url']);
wp_kses_post($_POST['content']);
Validação
if (!current_user_can('manage_plugin_boilerplate_settings')) {
wp_die(__('Acesso negado', PLUGIN_BOILERPLATE_TEXT_DOMAIN));
}
📊 Boas Práticas
- Sempre use namespaces: Evite conflitos de nomes
- Type hints: Use type declarations em métodos
- Documentação: Comente suas classes e métodos
- Sanitização: Sempre sanitize inputs
- Escapamento: Sempre escape outputs
- Capabilities: Use capabilities ao invés de roles
- Hooks: Use o Loader para organizar hooks
- Singleton: Use para classes únicas (Plugin.php)
- Constantes: Defina constantes para paths e versões
- Desinstalação: Implemente limpeza em uninstall.php
🔄 Atualizações
Ao atualizar a versão:
- Altere
PLUGIN_BOILERPLATE_VERSIONno arquivo principal - Atualize o header
Version: - Execute migrações se necessário
- Teste em ambiente de staging
📝 Licença
GPL v2 or later
👨💻 Autor
Charles Batista
🌐 charlesbatista.com.br
🤝 Contribuindo
- Fork o projeto
- Crie uma branch para sua feature
- Commit suas mudanças
- Push para a branch
- Abra um Pull Request