Introdução ao Desenvolvimento de Plugins para WordPress: Construa sua Primeira Extensão de Funcionalidades do Zero

Leitura de 3 minutos
2026-03-11
2026-06-04
1,917
Eu recebo uma comissão quando você faz compras através dos links abaixo, sem custo adicional para você.

Por que escolher desenvolver um plugin para o WordPress?

O WordPress, como o sistema de gerenciamento de conteúdo mais popular do mundo, deve sua grande capacidade de expansão em grande parte à sua arquitetura de plugins. Desenvolver seus próprios plugins significa que você não está mais limitado às funcionalidades dos plugins existentes e pode atender com precisão às necessidades específicas do seu site ou dos seus clientes. Seja para adicionar um simples código curto ou para criar um painel de gerenciamento complexo, os plugins permitem separar a lógica das suas funcionalidades do tema, garantindo que elas não sejam afetadas com as atualizações do mesmo.

Do ponto de vista do aprendizado, compreender o desenvolvimento de plugins é um caminho essencial para aprofundar o conhecimento do núcleo do WordPress. Isso te permite conhecer os conceitos fundamentais de Action Hooks e Filter Hooks, que são a base da modularidade e da extensibilidade do WordPress. Dominar o desenvolvimento de plugins não só aprimora suas habilidades técnicas, como também abre novas oportunidades profissionais e até mesmo possibilita a criação de produtos digitais comercializáveis.

Preparativos antes do desenvolvimento

Antes de escrever a primeira linha de código, você precisa de um ambiente de desenvolvimento adequado. Isso geralmente inclui um servidor local (como Local by Flywheel, XAMPP ou MAMP), um editor de código (como VS Code ou PhpStorm), bem como um site de teste com o WordPress instalado. Certifique-se de que o seu ambiente de teste esteja utilizando a mesma versão do PHP que o ambiente de produção online, a fim de evitar problemas de compatibilidade.

Leitura recomendada Dominando as habilidades essenciais do WordPress: um guia prático completo, da criação à otimização

Compreender a estrutura básica do plug-in.

Um plugin básico do WordPress pode conter apenas um arquivo PHP. No entanto, um plugin bem estruturado geralmente inclui vários diretórios e arquivos para garantir uma melhor organização. Um diretório de plugin típico pode ter a seguinte estrutura:
O ficheiro do plug-in principal (por exemplo, my-first-plugin.phpEste é o ponto de entrada do plugin, que contém as informações de cabeçalho do plugin.
- includes/ 目录:存放核心功能类或函数文件。
- admin/ Diretório: Contém o código relacionado à interface de gerenciamento do backend.
- public/ Diretório: Contém o código destinado à parte frontal (front-end) do site.
- assets/ Diretório: Local onde são armazenados recursos estáticos, como JavaScript, CSS e imagens.
- languages/ Diretório: Local onde são armazenados os arquivos de tradução internacionalizados (.po/.mo).

Hospedagem para sites WordPress da UltraHost
Garantia de reembolso em 30 dias, largura de banda ilimitada e banco de dados, proteção contra DDoS gratuita; desconto de 50% na compra de 3 anos (planos de 4 TB a 10 TB).

Informações essenciais sobre os cabeçalhos dos plugins necessários

Cada plugin do WordPress deve conter uma nota de cabeçalho padrão no topo do seu arquivo PHP principal; essa nota é essencial para que o WordPress reconheça o plugin. Aqui está um exemplo básico:

<?php
/**
 * Plugin Name:       我的第一个插件
 * Plugin URI:        https://example.com/my-first-plugin
 * Description:       这是一个用于学习插件开发的简单示例插件。
 * Version:           1.0.0
 * Author:            你的名字
 * Author URI:        https://example.com
 * License:           GPL v2 or later
 * Text Domain:       my-first-plugin
 * Domain Path:       /languages
 */

Dentre eles,Plugin Name Esses campos são obrigatórios; todos os outros são opcionais. No entanto, para garantir a integridade e a manutenibilidade do plugin, é recomendado preencher todas as informações relevantes.Text Domain Usado para internacionalização.Domain Path Aponta para o diretório dos arquivos de linguagem.

Crie o seu primeiro plugin: uma função simples de saudação.

Vamos praticar com um exemplo real. Criaremos um plugin que exibirá uma mensagem de saudação personalizável no topo do conteúdo dos artigos de um site.

Criar arquivos de plugin e diretórios

Primeiramente, dentro do diretório de instalação do seu WordPress… wp-content/plugins/ Dentro da pasta, crie uma nova pasta com o nome de my-greeting-pluginEm seguida, crie um arquivo PHP principal dentro dessa pasta, nomeando-o… my-greeting-plugin.phpE copie as informações do cabeçalho do plugin acima para dentro.

Leitura recomendada Como escolher e desenvolver plugins WordPress de alta qualidade: do início ao fim.

Use ganchos para adicionar funcionalidades.

O WordPress funciona através de um sistema de ganchos (hooks). Para adicionar informações antes do conteúdo dos artigos, precisamos utilizar esses ganchos. the_content Gancho do filtro: No seu arquivo principal do plugin, adicione a seguinte função e a chamada do gancho:

/**
 * 在文章内容前添加问候语
 *
 * @param string $content 原始的文章内容。
 * @return string 修改后的文章内容。
 */
function mgp_add_greeting_to_content( $content ) {
    $greeting_text = get_option( 'mgp_greeting_text', '欢迎阅读!' ); // 从数据库获取设置,默认为“欢迎阅读!”
    $custom_greeting = '<div class="mgp-greeting"><p><strong>'`. esc_html($greeting_text)`.'</strong></p></div>';

// 仅对主循环中的单篇文章页面生效
    if ( is_single() &amp;&amp; in_the_loop() &amp;&amp; is_main_query() ) {
        return $custom_greeting . $content;
    }
    return $content;
}
// 将函数挂载到 `the_content` 过滤器
add_filter( 'the_content', 'mgp_add_greeting_to_content' );

Este código define uma função. mgp_add_greeting_to_contentEle recebe o conteúdo do artigo e adiciona um contêiner DIV com um saudação no início dele. add_filter() Funções: Nós vamos montar (ou “carregar”) funções personalizadas no WordPress. the_content O filtro está em funcionamento. O julgamento lógico dentro da função garante que a saudação seja exibida apenas no ciclo principal da página de um único artigo na interface frontal, sem afetar as páginas de arquivos ou os widgets.

Criar uma página simples de configurações de gerenciamento

Para que os usuários possam personalizar o texto dos cumprimentos, precisamos adicionar uma página de configurações simples. Isso envolve o uso da API do menu de administração do WordPress. Continue adicionando o seguinte código no arquivo principal do plugin:

hospedagem compartilhada da hosting.com
Alto desempenho com CPUs AMD EPYC, armazenamento SSD NVMe e LiteSpeed, suporte interno especializado 24 horas por dia, 7 dias por semana, medidas de segurança avançadas, incluindo SSL, força bruta, malware e proteção contra DDoS, economia de até 73%
/**
 * 注册插件设置菜单和页面
 */
function mgp_register_admin_menu() {
    add_options_page(
        '问候语设置',           // 页面标题
        '问候语插件设置',       // 菜单标题
        'manage_options',      // 所需权限
        'my-greeting-plugin',  // 菜单slug
        'mgp_render_settings_page' // 用于输出页面内容的回调函数
    );
}
add_action( 'admin_menu', 'mgp_register_admin_menu' );

/**
 * 渲染设置页面的内容
 */
function mgp_render_settings_page() {
    ?&gt;
    <div class="wrap">
        <h1>Configurações do plugin de saudações</h1>
        <form method="post" action="/pt/options.php/" data-trp-original-action="options.php">
            <?php
            settings_fields( 'mgp_settings_group' ); // 输出设置组和非ce字段
            do_settings_sections( 'my-greeting-plugin' ); // 输出设置区域
            submit_button(); // 输出提交按钮
            ?>
        <input type="hidden" name="trp-form-language" value="pt"/></form>
    </div>
    <?php
}

/**
 * 初始化插件设置
 */
function mgp_initialize_settings() {
    // 注册一个设置
    register_setting(
        'mgp_settings_group', // 设置组名
        'mgp_greeting_text',  // 选项名,对应数据库中的键
        array( // 可选的验证回调函数
            'sanitize_callback' => 'sanitize_text_field',
            'default' =&gt; '欢迎阅读!'
        )
    );

// 添加一个设置区域
    add_settings_section(
        'mgp_main_section',           // 区域ID
        '主要设置',                   // 区域标题
        null,                         // 区域介绍的回调函数(此处不需要)
        'my-greeting-plugin'          // 页面slug
    );

// 向区域中添加一个字段
    add_settings_field(
        'mgp_greeting_field',         // 字段ID
        '问候语文本',                 // 字段标签
        'mgp_greeting_field_callback', // 用于输出字段HTML的回调函数
        'my-greeting-plugin',         // 页面slug
        'mgp_main_section'            // 区域ID
    );
}
add_action( 'admin_init', 'mgp_initialize_settings' );

/**
 * 渲染问候语文本输入字段
 */
function mgp_greeting_field_callback() {
    $greeting = get_option( 'mgp_greeting_text', '欢迎阅读!' );
    echo '<input type="text" name="mgp_greeting_text" value="' . esc_attr( $greeting ) . '" class="regular-text" />'echo '<p class="description">Este texto será exibido no topo de cada artigo no seu site.</p>';
}

Este código realiza as seguintes funções:
1. Usar add_action( 'admin_menu', ... ) Foi adicionada uma página de submenu no menu “Configurações”.
2. Usar add_action( 'admin_init', ... ) Configurações iniciais, incluindo a opção de registrar um banco de dados, uma área de configurações e um campo de entrada.
3. Foram definidas funções para a configuração da página de renderização, bem como dos formulários e campos.
Agora, faça login no painel administrativo do seu WordPress e, no menu “Configurações”, você encontrará as opções para o plugin “Greeting Message Settings”. Lá, você poderá modificar o texto da saudação e ver imediatamente os resultados nos artigos exibidos no frontend.

Melhores Práticas e Avanços no Desenvolvimento de Plugins

Após a conclusão das funcionalidades básicas, seguir as melhores práticas tornará o seu plugin mais profissional, mais seguro e mais fácil de manter.

A segurança é a tarefa mais importante.

Nunca confie nas informações fornecidas pelos usuários. Em plugins, todos os dados obtidos de fontes externas (como…) $_GET$_POST$_COOKIE Qualquer dado obtido a partir de uma consulta a um banco de dados deve ser verificado, limpo ou escapado antes de ser exibido ou utilizado.
Saída de escape: usar esc_html()esc_attr()esc_url() e wp_kses_post() Funções como essas.
Limpar a entrada: usar sanitize_text_field()sanitize_email()intval() Funções como essas.
Segurança de banco de dados: usar $wpdb Para consultar os métodos de uma classe, ou utilizar prepare() Utilize métodos para realizar consultas parametrizadas a fim de prevenir injeções de SQL.
Verificação de permissões: antes de aceder à página de gestão ou de executar operações sensíveis, utilize current_user_can() Verifique as permissões do usuário e utilize-as de acordo com as necessidades. check_admin_referer() Verificar o campo `nonce` para evitar a falsificação de solicitações entre sites (Cross-Site Request Forgery – CSRF).

Leitura recomendada Domine as técnicas essenciais do WordPress e crie sites profissionais que combinem funcionalidade e beleza estética.

Implementar internacionalização (i18n)

Para que o seu plugin possa ser usado por usuários de todo o mundo, é necessário suportar a tradução em vários idiomas. Isso requer que você utilize as funções de tradução do WordPress para encapsular todas as strings direcionadas aos usuários. Modifique as saídas de string no código anterior:

// 在插件头信息中已定义 Text Domain: my-first-plugin
$greeting_text = get_option( 'mgp_greeting_text', __( '欢迎阅读!', 'my-first-plugin' ) );

// 在管理菜单函数中
add_options_page(
    __( '问候语设置', 'my-first-plugin' ),
    __( '问候语插件设置', 'my-first-plugin' ),
    'manage_options',
    'my-greeting-plugin',
    'mgp_render_settings_page'
);

Em seguida, você pode usar ferramentas como o Poedit para extrair as strings do código-fonte do plugin e gerá-las. .pot Os ficheiros de modelo, a partir dos quais os tradutores podem criar versões em diferentes idiomas. .po e .mo Arquivo, e coloque-o no plugin. /languages Catálogo.

Hospedagem Compartilhada InterServer
Hospedagem compartilhada $2.50 USD por mês, primeiro mês $0.1 USD código promocional tryinterserver, 461 scripts de aplicativos em nuvem, instalação com um clique.

Organização do código e otimização de desempenho

À medida que as funcionalidades dos plugins aumentam, é sensato dividir o código em arquivos distintos. O uso da programação orientada a objetos (POO) e de classes para organizar o código melhora a legibilidade e a reutilizabilidade. Quanto aos recursos (CSS, JS), é aconselhável… wp_enqueue_style() e wp_enqueue_script() A função está sendo executada no hook correto (por exemplo, no momento apropriado do ciclo de vida do aplicativo). wp_enqueue_scripts ou admin_enqueue_scriptsOs recursos são carregados conforme necessário e as versões das dependências são especificadas. Evite realizar consultas de banco de dados dispendiosas diretamente nos plugins; considere usar a API Transients para armazenar em cache dados não críticos.

resumos

Começando pela criação de um arquivo PHP simples e pela adição das informações padrão de cabeçalho dos plugins, passando pelo uso dos ganchos de ação (action hooks) e dos ganchos de filtro (filter hooks) para integrar o plugin ao ciclo de vida do WordPress, até a construção de uma interface de gerenciamento e a adoção de melhores práticas de segurança e internacionalização, você já percorreu o caminho básico para desenvolver um plugin completo para o WordPress. Este plugin de “saudação”, embora simples, demonstra de forma completa o processo central do desenvolvimento de plugins: planejamento das funcionalidades, utilização dos ganchos, processamento de dados e criação da interface. Lembre-se de que o aprendizado contínuo a partir dos manuais oficiais, o estudo do código de plugins open-source de qualidade e a prática constante são os melhores caminhos para aprimorar suas habilidades no desenvolvimento de plugins. Seu próximo plugin pode muito bem resolver um problema prático mais complexo e interessante.

Perguntas frequentes Perguntas frequentes

Um plugin para WordPress precisa de no mínimo quantos arquivos?

Um plugin WordPress completo requer, no mínimo, um único arquivo PHP. Basta que essa arquivo contenha, no início, as informações corretas sobre o plugin (pelo menos…) Plugin NameAssim, o WordPress consegue reconhecer e ativar o plugin na lista de plugins do backend. Este arquivo pode conter todo o código funcional, bem como o código das páginas de gerenciamento, entre outros. Claro, para plugins mais complexos, é recomendável dividir o código em vários arquivos e diretórios a fim de facilitar a manutenção.

Como evitar que o plugin que desenvolvi entre em conflito com outros plugins?

A chave para evitar conflitos é usar prefixos únicos para nomear todas as suas funções, classes, variáveis, nomes de opções e ganchos de ação/filtro. Por exemplo, não use… add_greeting() Nomes de funções tão genéricos deveriam ser evitados; em vez disso, seria melhor usar nomes mais específicos e claros. mgp_add_greeting() Nomes como esses (entre eles) mgp (São as abreviaturas dos seus plugins.) Para as opções armazenadas no banco de dados, também deve-se usar um prefixo único, como… mgp_greeting_textIsso pode reduzir ao máximo a possibilidade de conflitos de namespace.

O que deve ser feito ao ativar e desativar um plugin?

Quando um plugin é ativado, geralmente é necessário executar algumas tarefas únicas, como verificar a versão do PHP ou do WordPress, criar tabelas no banco de dados, inicializar as opções padrão, etc. Isso pode ser feito através de… register_activation_hook() A função pode ser implementada da mesma forma.register_deactivation_hook() É usado para definir as ações a serem executadas quando um plugin é desativado, como a eliminação de tarefas agendadas. No entanto, tenha em mente que os ganchos de desativação (deactivation hooks) geralmente não são utilizados para a remoção de dados; a limpeza de dados é normalmente realizada pelos ganchos de desinstalação ou por escolha manual do usuário.

Como adicionar uma página de configurações para o meu plugin?

Para adicionar uma página de configurações para um plugin, são utilizados principalmente dois APIs do WordPress: o API de menus e o API de configurações. Primeiramente, use… add_action( 'admin_menu', ... ) Monte uma função e use-a dentro dessa função. add_menu_page() ou add_submenu_page() Venha registrar uma página de menu de nível superior ou subnível. Em seguida, use… add_action( 'admin_init', ... ) Monte outra função e use-a dentro da primeira. register_setting()add_settings_section() e add_settings_field() Vamos definir as opções de configuração específicas e os campos do formulário. Por fim, escreveremos uma função de callback para renderizar o formulário HTML da página de configurações.

Qual versão do WordPress meu plugin precisa ser compatível?

Isso depende do seu público-alvo. Geralmente, é recomendado que o plugin seja compatível com as últimas 3 a 4 versões principais do WordPress. Você pode usar essa informação no cabeçalho do plugin. Requires at least: Para declarar a versão mínima exigida do WordPress, durante o processo de desenvolvimento deve-se evitar o uso de funções muito novas que são suportadas apenas pela versão mais recente do WordPress. function_exists() Realize verificações de condições para fornecer alternativas compatíveis com versões anteriores do WordPress. Além disso, testar periodicamente em versões mais antigas do WordPress é uma boa maneira de garantir a compatibilidade.