Estrutura básica e arquivos de um plugin para WordPress
Um plugin padrão para o WordPress precisa de pelo menos um arquivo principal. Esse arquivo geralmente tem o mesmo nome do plugin, por exemplo: my-first-plugin.phpNo início desse arquivo, deve-se incluir um comentário de cabeçalho específico para declarar as metadados do plugin ao sistema WordPress. Essas informações incluem o nome do plugin, a descrição, a versão, o autor, entre outros, e elas serão exibidas na página de gerenciamento de plugins no painel administrativo.
Além do arquivo principal, um plugin bem estruturado geralmente contém outros diretórios e arquivos para organizar o código. As estruturas de diretórios comuns incluem aqueles usados para armazenar arquivos CSS e JavaScript./assetsO índice contém os arquivos de classes em PHP./includesO índice, bem como os modelos utilizados para a interface do usuário./templatesÍndice. Essa estrutura modular facilita a manutenção do código e a colaboração em equipe.
O arquivo principal do plugin é o ponto de entrada para todas as funcionalidades do mesmo. Além de declarar as informações metadadas, suas principais responsabilidades incluem registrar e ativar/desativar os “ganchos” (hooks) de programação, carregar os arquivos de dependência necessários e inicializar as funções centrais do plugin. Com uma organização de arquivos adequada, é possível garantir que o plugin mantenha uma estrutura clara, mesmo que suas funcionalidades sejam complexas.
Leitura recomendada Guia de Início para o Desenvolvimento de Plugins para WordPress。
Crie o seu primeiro plugin básico.
Vamos começar criando o plugin mais simples possível, o “Hello World”, para nos familiarizarmos com o processo de criação de plugins e com o seu ciclo de vida básico.
Definir as informações do plugin e a função principal
Primeiramente, dentro do diretório de instalação do WordPress local de você…/wp-content/plugins/No caminho, crie uma nova pasta com o nome “hello-world”. Dentro dessa pasta, crie um arquivo com o nome…hello-world.phpO arquivo.
No início deste arquivo, você precisa adicionar as informações do cabeçalho do plugin. Um cabeçalho de plugin típico é mostrado a seguir:
<?php
/**
* Plugin Name: 你好世界示例插件
* Plugin URI: https://yourwebsite.com/hello-world
* Description: 这是一个用于演示的简单WordPress插件。
* Version: 1.0.0
* Author: 你的名字
* Author URI: https://yourwebsite.com
* License: GPL v2 or later
* Text Domain: hello-world
* Domain Path: /languages
*/ Em seguida, adicionaremos uma função simples a este plugin: a adição automática de um texto no final do conteúdo do artigo. Isso pode ser feito através de...the_contentUse filtros para implementar essa funcionalidade. Adicione o seguinte código após as informações no cabeçalho do arquivo principal:
function hello_world_add_footer_text( $content ) {
// 仅在单篇文章页面添加
if ( is_single() ) {
$footer_text = '<p><em>Este texto foi gerado pelo plugin “Olá, Mundo”.</em></p>';
$content .= $footer_text;
}
return $content;
}
add_filter( 'the_content', 'hello_world_add_footer_text' ); Tratamento da ativação e desativação de plugins
Plugins profissionais devem lidar adequadamente com a lógica de ativação e desativação. Por exemplo, ao ser ativado, um plugin pode precisar criar tabelas no banco de dados ou definir opções padrão; ao ser desativado, pode ser necessário limpar dados temporários. Nós utilizamos…register_activation_hookeregister_deactivation_hookFunções são usadas para registrar os respectivos “ganchos” (hooks).
Leitura recomendada Desenvolvimento de plugins do WordPress do início ao fim: crie funcionalidades personalizadas e extensões eficientes。
Adicione o código ao arquivo principal:
// 插件激活时执行的操作
function hello_world_activate() {
// 例如:添加一个选项到数据库
if ( ! get_option( 'hello_world_installed' ) ) {
add_option( 'hello_world_installed', time() );
}
// 可以在这里刷新固定链接规则,以确保新注册的URL结构生效
flush_rewrite_rules();
}
register_activation_hook( __FILE__, 'hello_world_activate' );
// 插件停用时执行的操作
function hello_world_deactivate() {
// 例如:删除我们创建的临时选项(谨慎操作,用户数据通常不删除)
// delete_option( 'hello_world_installed' );
// 清理重写规则
flush_rewrite_rules();
}
register_deactivation_hook( __FILE__, 'hello_world_deactivate' ); Após concluir os passos acima, você poderá ver e ativar o “Plugin de Exemplo ”Olá, Mundo!“” na página de “Plugins” do painel administrativo do WordPress. Após a ativação, ao visitar qualquer artigo, você verá o texto adicionado no final do conteúdo.
Utilizar a API do núcleo do WordPress para aprimorar as funcionalidades do site.
O WordPress oferece uma API extremamente rica, que permite que os desenvolvedores de plugins interajam de forma segura e padronizada com o sistema principal. Dominar essas APIs é essencial para realizar desenvolvimentos profissionais.
Usar ganchos de ação (action hooks) e filtros (filters)
Os “Action Hooks” permitem que você insira e execute o seu próprio código em momentos específicos. Por exemplo, quando um artigo é publicado, o WordPress aciona esses hooks.save_postAções. Você pode realizar isso através de…add_action()A função monta a sua própria função nesse “gancho” (hook).
function hello_world_on_post_publish( $post_id, $post, $update ) {
// 检查是否不是修订版本,并且是发布操作
if ( wp_is_post_revision( $post_id ) || $post->post_status != 'publish' ) {
return;
}
// 发送邮件通知或执行其他逻辑
// wp_mail( '[email protected]', '新文章已发布', '文章标题:' . $post->post_title );
}
add_action( 'save_post', 'hello_world_on_post_publish', 10, 3 ); Os “Filter Hooks” permitem que você modifique os dados.the_contentUm exemplo típico de aplicação de filtro é… Outro exemplo comum é a modificação dos títulos dos artigos.
function hello_world_modify_title( $title ) {
return '【推荐】' . $title;
}
// add_filter( 'the_title', 'hello_world_modify_title' ); // 谨慎使用,这会修改所有标题 Criar uma página de menu de gerenciamento e opções
Muitos plugins necessitam de uma interface de administração para a configuração dos seus parâmetros. O WordPress disponibiliza funções que permitem adicionar menus principais ou submenus de forma fácil no painel de administração.
Leitura recomendada Dominando o desenvolvimento de plug-ins do WordPress: Criando módulos de funções personalizadas eficientes a partir do zero。
O código abaixo demonstra como adicionar uma página de opções simples e usar a API de configurações do WordPress para salvar uma opção de forma segura.
// 步骤1:向管理后台添加一个菜单项
function hello_world_add_admin_menu() {
add_menu_page(
'你好世界设置', // 页面标题
'你好世界插件', // 菜单标题
'manage_options', // 所需权限
'hello-world-settings', // 菜单slug
'hello_world_settings_page', // 用于渲染页面的回调函数
'dashicons-admin-generic', // 图标(可选)
80 // 菜单位置
);
}
add_action( ‘admin_menu‘, ‘hello_world_add_admin_menu’ );
// 步骤2:定义设置页面的HTML内容
function hello_world_settings_page() {
?>
<div class="”wrap”">
<h1>Configurações do plugin “Olá, Mundo”!</h1>
<form method="”post”" action="/pt/”options.php”/" data-trp-original-action="”options.php”">
<?php
settings_fields( ‘hello_world_settings_group’ ); // 输出设置字段和非ce字段
do_settings_sections( ‘hello-world-settings’ ); // 输出设置部分
submit_button(); // 输出提交按钮
?>
<input type="hidden" name="trp-form-language" value="pt"/></form>
</div>
<?php
}
// 步骤3:注册设置、字段和章节
function hello_world_settings_init() {
// 注册一个新的设置项到“hello_world_settings_group”组
register_setting( ‘hello_world_settings_group’, ‘hello_world_custom_message’ );
// 在页面中新增一个章节
add_settings_section(
‘hello_world_settings_section’,
‘自定义消息设置’,
‘hello_world_settings_section_callback’,
‘hello-world-settings‘
);
// 向章节中添加一个字段
add_settings_field(
‘hello_world_message_field’,
‘前台显示的消息’,
‘hello_world_message_field_render’,
‘hello-world-settings’,
‘hello_world_settings_section’
);
}
add_action( ‘admin_init’, ‘hello_world_settings_init’ );
// 章节描述的回调函数
function hello_world_settings_section_callback() {
echo ‘<p>Aqui, você configura o conteúdo das mensagens exibidas no frontend pelo plugin.</p>’;
}
// 字段渲染的回调函数
function hello_world_message_field_render() {
$option = get_option( ‘hello_world_custom_message’, ‘这是默认消息’ );
echo ‘<input type="”text”" name="”hello_world_custom_message”" value="”‘" . esc_attr( $option ) ‘“ size ="”40”" />’;
} Com o código acima, você criou uma página de configurações no backend que atende aos padrões do WordPress e permite o salvamento seguro de dados.
插件安全、性能与发布准备
Antes de compartilhar um plugin com outras pessoas ou enviá-lo para o diretório oficial, é essencial garantir que ele seja seguro, eficiente e fácil de usar.
Seguir as melhores práticas de segurança
A segurança é a principal prioridade no desenvolvimento de plugins. O princípio mais importante é: nunca confie nas informações fornecidas pelos usuários. Todos os dados provenientes dos usuários ou de fontes externas (como…)$_GET, $_POST, $_COOKIEAntes de serem utilizados em consultas de banco de dados, exibidos em páginas ou executados como comandos do sistema, todos esses dados devem ser verificados, limpos ou escapados (ou seja, os caracteres especiais devem ser convertidos em formas seguras para evitar problemas de interpretação).
Para o conteúdo que é exibido no HTML, use…esc_html(), esc_attr()ouwp_kses_post()Use funções como `escape()` para realizar a escape dos caracteres.
echo ‘<div class="”“‘" . esc_attr( $user_provided_class ) ‘“>’ . esc_html( $user_provided_content ) . ‘</div>’; Para consultas ao banco de dados, nunca deve-se concatenar variáveis diretamente em uma instrução SQL. É necessário usar métodos apropriados para inserir os valores das variáveis na instrução.$wpdb->prepare()O método é utilizado para realizar o pré-processamento dos dados.
global $wpdb;
$user_id = 123;
$query = $wpdb->prepare(
“SELECT * FROM {$wpdb->prefix}my_table WHERE user_id = %d”,
$user_id
);
$results = $wpdb->get_results( $query ); Além disso, todas as funções de callback acessíveis pelos usuários (seja através de AJAX no front-end ou de operações no back-end) devem utilizar…current_user_can()oucheck_ajax_referer()Funções como essas realizam verificações de permissões e segurança.
Otimizar o desempenho dos plugins
Plugins com desempenho ruim podem afetar a experiência do usuário em todo o site. A otimização pode ser iniciada de várias maneiras: use o cache de forma eficiente para evitar consultas complexas ao banco de dados ou chamadas de API remotos a cada carregamento de página. O WordPress disponibiliza a API Transiente (Transient API).(Transients API)Isso permite armazenar dados temporários de forma conveniente.
// 尝试从缓存获取数据
$data = get_transient( ‘my_plugin_expensive_data’ );
if ( false === $data ) {
// 缓存中没有,执行昂贵操作
$data = expensive_database_query();
// 将结果缓存12小时
set_transient( ‘my_plugin_expensive_data’, $data, 12 * HOUR_IN_SECONDS );
} Em segundo lugar, assegure-se de que os arquivos CSS e JavaScript sejam carregados apenas nas páginas necessárias. Isso pode ser feito através de estratégias de carregamento dinâmico, como o uso de `require` ou `import` em JavaScript, ou de técnicas de cacheamento para evitar o carregamento desnecessário.wp_enqueue_script()ewp_enqueue_style()As funções permitem controlar com precisão o carregamento de recursos e as suas relações de dependência. No caso de recursos de backend, é possível montá-los (ou vinculá-los) de forma a serem utilizados adequadamente pelo sistema.admin_enqueue_scriptsGancho; no caso de recursos da interface frontal (frontend), eles são montados (mounted) nesse gancho.wp_enqueue_scriptsGancho.
Preparar para a internacionalização e a publicação.
Para que o plugin possa ser usado por usuários de todo o mundo, a internacionalização (i18n) é um passo essencial. Isso significa que você precisa embalar todas as strings direcionadas aos usuários usando funções específicas.
Troque as strings no plugin de:
echo “Hello World!”; Mude para:
echo __( ‘Hello World!’, ‘hello-world’ ); Among them‘hello-world’Foi você quem definiu isso no cabeçalho do plugin.Text DomainEm seguida, você pode usar ferramentas como o Poedit para gerar o conteúdo desejado..potOs ficheiros de modelo, a partir dos quais os tradutores podem criar versões em diferentes idiomas..poe.moArquivos. Coloque esses arquivos de tradução no cabeçalho do plugin.Domain PathO diretório especificado (por exemplo,/languagesBasta clicar em “abaixo”.
Antes de publicar, por favor, assegure-se de escrever um documento detalhado.readme.txtO arquivo deve seguir os requisitos oficiais do WordPress, incluindo uma descrição do plugin, instruções de instalação, respostas para dúvidas comuns, etc. Essa é uma exigência obrigatória para a submissão ao diretório de plugins do WordPress. Além disso, é essencial adicionar comentários detalhados em PHP no código do plugin; isso não só ajuda os outros a entenderem o seu código, como também demonstra sua profissionalismo.
resumos
Este artigo apresenta de forma sistemática o processo completo para desenvolver um plugin profissional para o WordPress do zero. Começamos com a compreensão da estrutura básica de um plugin e criamos o primeiro plugin simples, que incluía lógica para ativar/desativá-lo. Em seguida, aprofundamos nosso conhecimento sobre o poderoso sistema de ganchos (hooks) de ações e filtros do WordPress, bem como a maneira de integrá-los de forma avançada com o código do próprio sistema, e criamos uma página de configurações padrão para o plugin. Por fim, destacamos as normas de segurança essenciais no desenvolvimento de plugins, as técnicas de otimização de desempenho e os preparativos para a internacionalização, visando a publicação do plugin em todo o mundo. Ao dominar esses conhecimentos e habilidades fundamentais, você será capaz de criar plugins profissionais seguros, eficientes e fáceis de manter, satisfazendo não apenas necessidades pessoais, mas também um público mais amplo de usuários.
Perguntas frequentes Perguntas frequentes
Quais são as noções básicas necessárias para desenvolver plugins para o WordPress?
Para desenvolver plugins para o WordPress, é necessário ter uma base sólida em programação PHP, uma vez que o código dos plugins é composto principalmente por PHP. Além disso, é essencial ter um conhecimento básico de HTML, CSS e JavaScript para lidar com a exibição e a interação do lado cliente (front-end). O mais importante de tudo é estar familiarizado com os conceitos fundamentais do WordPress, como ganchos (Hooks), códigos encurtados (Shortcodes), tipos de artigos personalizados (Custom Post Types – CPT) e classes de operação no banco de dados.$wpdbO uso de…
Como depurar um plugin do WordPress que está em desenvolvimento?
Um método eficaz de depuração é ativar as funcionalidades de depuração do WordPress.WP_DEBUG“Modelo”. Em seu…wp-config.phpNo arquivo, será…define( ‘WP_DEBUG’, false );mudar paradefine( ‘WP_DEBUG’, true );Você também pode ativar várias funções ao mesmo tempo.WP_DEBUG_LOGRegistre os erros em um arquivo de log, ou ative essa funcionalidade.WP_DEBUG_DISPLAYExibir erros na página (apenas no ambiente de desenvolvimento). Além disso, utilizar as ferramentas de desenvolvimento do navegador (guia Console, aba Network) é essencial para depurar JavaScript front-end e solicitações AJAX.
Como meu plugin pode ser compatível com outros plugins?
O segredo para garantir uma boa compatibilidade é seguir os padrões de codificação do WordPress e utilizar variáveis e nomes de funções globais com cuidado. Adicionar um prefixo único às funções, classes e constantes do seu plugin é a melhor prática para evitar conflitos de nomes. Por exemplo, você pode usar…myplugin_Ou use abreviaturas de desenvolvedores como prefixos. Ao modificar conteúdos que podem estar relacionados a outros plugins (como o texto dos artigos ou os títulos), certifique-se de que a sua função de callback do filtro tenha a prioridade adequada.add_filterO terceiro parâmetro (…) e preste atenção ao formato do valor retornado. Além disso, use-o de forma adequada.class_exists()oufunction_exists()Para verificar se uma determinada classe ou função foi definida, é possível implementar um carregamento condicional dos recursos ou fornecer uma solução alternativa.
É necessário dominar a programação orientada a objetos (OOP) para desenvolver plugins?
虽然使用传统的面向过程编程方式也可以开发功能完整的插件,但强烈推荐学习和使用面向对象编程(OOP)。OOP能够更好地组织代码,通过类(Class)来封装功能,提高代码的可复用性和可维护性。对于中大型插件项目,使用OOP结合命名空间(Namespaces)和自动加载(Autoloading)是行业内的标准做法,它能让你更清晰地区分不同模块,并显著降低代码的耦合度。
O que vem a seguir, o que vem a seguir?
Leitura ampliada e conhecimento prático
Os seguintes estão relacionados ao tópico deste artigo e são adequados para uma leitura mais aprofundada. Geralmente, é melhor priorizar o artigo que está mais próximo do seu problema atual e, em seguida, expandir gradualmente para os tópicos adjacentes.
- Como escolher e personalizar o tema perfeito para o seu WordPress?
- Guia de Desenvolvimento de Plugins para WordPress: Crie o seu primeiro plugin personalizado do zero
- Tornar-se um desenvolvedor de plugins para WordPress: Um guia completo do zero ao um
- Do Zero ao Um: Um Guia Completo e Prático para Construir Sites Profissionais com o WordPress
- Do Zero: Todo o Processo de Desenvolvimento de Temas para WordPress Moderno e as Melhores Práticas