Guia Definitivo para Desenvolvimento de Plugins para WordPress: Construa o Seu Primeiro Plugin do Zero

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

Preparação e configuração do ambiente

Antes de começar a escrever o código, você precisa de um ambiente de desenvolvimento adequado. Isso inclui uma instalação local do WordPress, um editor de código e conhecimentos básicos de PHP. Recomendamos o uso de XAMPP, MAMP ou Local by Flywheel para montar rapidamente um ambiente local para o WordPress. Certifique-se de que a versão do PHP atende aos requisitos oficiais do WordPress, geralmente PHP 7.4 ou uma versão mais recente.

Um plugin é, essencialmente, um ou mais arquivos PHP que são colocados no diretório de plugins do WordPress.wp-content/pluginsCada plugin deve ter um nome único, e o cabeçalho do seu arquivo principal deve conter as anotações de informações padrão do plugin. Isso é fundamental para que o WordPress reconheça o plugin.

Crie o seu primeiro arquivo de plugin.

Primeiramente, emwp-content/pluginsCrie uma nova pasta no diretório, por exemplo…my-first-pluginEm seguida, crie o arquivo PHP principal dentro dessa pasta; geralmente, o nome do arquivo é o mesmo que o nome da pasta.my-first-plugin.phpNeste arquivo, você precisa escrever as informações de cabeçalho do plugin.

Leitura recomendada Guia completo para o desenvolvimento de plugins do WordPress: construa o seu primeiro plugin do zero.

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

Após salvar o arquivo, acesse a página de “Plugins” no painel administrativo do WordPress. Você deve ver “Meu Primeiro Plugin” na lista de plugins. Ative-o agora; embora ele ainda não tenha nenhuma funcionalidade, isso indica que seu plugin foi carregado com sucesso pelo WordPress.

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).

Compreender os mecanismos centrais do WordPress: Ganchos (Hooks) e Filtros (Filters)

A forte capacidade de expansão do WordPress se deve à sua arquitetura baseada em eventos, cujo núcleo são os “ganchos” (Hooks). Os ganchos são divididos em dois tipos: Ações (Actions) e Filtros (Filters). Compreendê-los é essencial para o desenvolvimento eficaz de plugins.

Os ganchos de ação (action hooks) permitem que você insira e execute seu próprio código em momentos específicos, como a publicação de um artigo ou a carregamento de uma página. Por exemplo, você pode enviar um e-mail quando um artigo for publicado. Você pode usá-los para realizar tarefas automatizadas.add_action()A função monta sua função personalizada no gancho de ação especificado.

Os ganchos (hooks) dos filtros permitem que você modifique os dados. Antes que os dados sejam utilizados (como salvos em um banco de dados ou exibidos no navegador), você pode interceptá-los e alterá-los. Por exemplo, você pode modificar o título de um artigo ou o conteúdo de um comentário. Você pode usar isso para realizar ajustes necessários nos dados antes que eles sejam enviados para o destino final.add_filter()Funções para aplicar filtros.

Usar ganchos de ação para adicionar funcionalidades

Suponhamos que queiramos adicionar uma linha de texto personalizado no rodapé da página de administração do nosso site. O WordPress disponibiliza uma funcionalidade chamada…admin_footerO gancho de ação (action hook). Podemos adicionar o seguinte código no arquivo principal do plugin:

Leitura recomendada Guia de introdução para iniciantes no desenvolvimento de plugins do WordPress: crie o seu primeiro plugin funcional do zero.

// Defina uma função que exiba informações no rodapé do administrador.
function myplugin_display_admin_footer_text() {
    echo '<p>Obrigado por usar o “Meu Primeiro Plugin”!</p>';
}
// Monte a função no gancho da ação admin_footer
add_action( 'admin_footer', 'myplugin_display_admin_footer_text' );

Salve o arquivo e atualize a página do backend do WordPress. Role para a parte inferior da página; você deve conseguir ver o texto que foi adicionado. Esta é a aplicação básica dos “action hooks”: executar código em posições específicas.

Modificar o conteúdo usando filtros

Agora, vamos tentar modificar todos os títulos dos artigos, adicionando um símbolo de marca registrada no final de cada título de forma uniforme. Podemos usar…the_titleFiltro.

// 定义一个修改文章标题的函数
function myplugin_modify_post_title( $title, $post_id ) {
    // 确保只在主循环且非管理后台中修改
    if ( ! is_admin() && in_the_loop() ) {
        $title = $title . ' ™';
    }
    return $title;
}
// 将函数挂载到 the_title 过滤器钩子,参数2表示接受2个参数
add_filter( 'the_title', 'myplugin_modify_post_title', 10, 2 );

Este código verifica se o ambiente atual está dentro do ciclo principal de exibição de artigos na interface frontal. Se estiver, o símbolo “™” é adicionado após o título.10É a prioridade (quanto menor o número, mais rápido é a execução).2Isso indica que nossa função aceita dois parâmetros (os valores originais).$titlee$post_id)。

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%

Construção de funcionalidades para plugins: criação de menus de gerenciamento e páginas de configuração

Um plugin maduro geralmente precisa oferecer opções de configuração no painel administrativo do WordPress. Isso envolve a criação de uma página de menu de gerenciamento exclusiva para o plugin. O WordPress disponibiliza uma ampla gama de funções da API para realizar essa funcionalidade.add_menu_page()eadd_options_page()

Adicionar o menu de gerenciamento de nível superior

Nós adicionaremos um menu principal independente para o plugin. Isso geralmente é feito…admin_menuIsso é feito dentro dos ganchos de ação (action hooks). Criaremos uma função para definir o menu e as páginas.

// 定义添加管理菜单的函数
function myplugin_add_admin_menu() {
    add_menu_page(
        '我的插件设置',           // 页面标题
        '我的插件',               // 菜单标题
        'manage_options',         // 所需权限(管理员)
        'myplugin-settings-page', // 菜单slug(唯一标识)
        'myplugin_display_settings_page', // 用于显示页面内容的回调函数
        'dashicons-admin-generic', // 菜单图标(Dashicons)
        30                        // 菜单位置
    );
}
// 将函数挂载到 admin_menu 钩子
add_action( ‘admin_menu’, ‘myplugin_add_admin_menu’ );

Em seguida, precisamos definir a função de callback.myplugin_display_settings_page()Para renderizar o conteúdo HTML da página de configurações.

Leitura recomendada Desenvolvimento de plugins para WordPress: Um guia completo do básico ao avançado – Construindo funcionalidades personalizadas

// Definir a exibição da página de configurações
function myplugin_display_settings_page() {
    ? &gt;
    <div class="wrap">
        <h1>Configurações do meu plugin</h1>
        <form method="post" action="/pt/options.php/" data-trp-original-action="options.php">
            <?php
            // 输出设置字段、安全nonce等
            settings_fields( ‘myplugin_settings_group’ );
            do_settings_sections( ‘myplugin-settings-page’ );
            submit_button();
            ?>
        <input type="hidden" name="trp-form-language" value="pt"/></form>
    </div>
    &lt;?php
}

Configurações de registro, campos e partições

Para processar os dados dos formulários de forma segura, precisamos utilizar a API de configurações do WordPress. Isso inclui o registro de novas configurações, a adição de seções e campos de configuração.

// Inicializar as configurações do plug-in
function myplugin_settings_init() {
    // 1. registrar uma configuração (armazenada na tabela wp_options)
    register_setting(
        ‘myplugin_settings_group’, // nome do grupo de configurações, correspondente a settings_fields()
        ‘myplugin_options’ // nome das opções armazenadas no banco de dados
    ).

// 2. adicionar uma seção de configurações
    add_settings_section(
        ‘myplugin_section_basic’, // ID da partição
        ‘basic_settings’, // título da partição
        ‘myplugin_section_basic_callback’, // Função de callback de introdução da partição
        ‘myplugin-settings-page’ // o slug da página à qual pertence
    );

// 3. adicionar um campo à partição
    add_settings_field(
        ‘myplugin_field_message’, // ID do campo
        ‘welcome_message’, // rótulo do campo
        ‘myplugin_field_message_callback’, // função de retorno de chamada que renderiza o HTML do campo
        ‘myplugin-settings-page’, // slug da página à qual ele pertence
        ‘myplugin_section_basic’ // ID da seção à qual ele pertence
    );
}
add_action( ‘admin_init’, ‘myplugin_settings_init’ );

// Função de retorno de chamada de introdução da partição
function myplugin_section_basic_callback() {
    echo ‘<p>Configura as informações básicas do plugin.</p>’;
}

// Função de retorno de chamada para renderização de campo
function myplugin_field_message_callback() {
    // Obter os valores existentes do banco de dados
    $options = get_option( ‘myplugin_options’ );
    $value = $options[‘message’] ? ‘’; // Operador de mesclagem nula do PHP 7.0+
    // Saída da caixa de entrada
    echo ‘<input type="“text”" name="“myplugin_options[message]”" value="“‘" . esc_attr( $value ) ‘” class ="“regular-text”" />‘;
}

Agora, o seu plugin possui uma página de configuração de gestão completa e compatível com os padrões do WordPress, permitindo que as opções de configuração sejam salvadas e lidas de forma segura.

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.

Melhores Práticas de Internacionalização e Segurança para Plugins

Para que o seu plugin possa ser utilizado por usuários em todo o mundo, a internacionalização (i18n) é um passo essencial. Além disso, seguir as normas de segurança é a base para proteger você e o site dos usuários contra ataques.

Implementar a internacionalização de texto

O WordPress usa__()_e()Para implementar a tradução, utilize funções como a translate(). Primeiro, você precisa garantir que o cabeçalho do plug-in esteja configurado corretamente.Text Domain(Exemplo:my-first-pluginEm seguida, envolva todas as strings direcionadas aos usuários com a função de tradução.

// 在插件代码中,将硬编码的文本替换
// 修改前:echo ‘<p>Obrigado por usar o “Meu Primeiro Plugin”!</p>’;
// 修改后:
function myplugin_display_admin_footer_text() {
    echo ‘<p>‘ . esc_html__( ‘Obrigado por usar “O Meu Primeiro Plugin”!’, ‘my-first-plugin’ ) . ‘</p>’;
}

Em seguida, você precisará usar ferramentas como o Poedit para gerar o conteúdo desejado..pot(O arquivo do modelo) deve ser colocado no plugin.languagesNo folder. O tradutor pode criar o conteúdo correspondente..poE o compilado.moArquivo. Por fim, use-o durante a inicialização do plugin.load_plugin_textdomain()Tradução de “Function loading”.

function myplugin_load_textdomain() {
    load_plugin_textdomain( ‘my-first-plugin’, false, dirname( plugin_basename( __FILE__ ) ) . ‘/languages/’ );
}
add_action( ‘plugins_loaded’, ‘myplugin_load_textdomain’ );

Seguir as normas de codificação de segurança

A segurança é de extrema importância. Primeiramente, nunca confie nos dados inseridos pelos usuários. Todos os dados provenientes de usuários ou de fontes externas (como…)$_GET$_POST$_COOKIETodos eles devem ser verificados, limpos e escapados.

  • Saída com escape: Ao exibir dados em HTML, JavaScript ou URLs, use as funções de escape correspondentes.
    // 输出到HTML属性
    echo ‘<input value="“‘" . esc_attr( $value ) ‘“ />‘;
    // 输出到HTML内容
    echo ‘<p>‘ . esc_html( $text ) . ‘</p>’;
    // 输出到JavaScript变量
    echo ‘<script>var msg = “‘ . esc_js( $message ) . ‘“;</script>’;
    // 输出到URL
    echo ‘<a href="/pt/“‘/" . esc_url( $url ) ‘“>link</a>’;
  • Verificação de entrada: verificar se os dados estão de acordo com o formato esperado (por exemplo, se são um endereço de e-mail, um número, etc.).
    if ( ! filter_var( $email, FILTER_VALIDATE_EMAIL ) ) {
        // 不是有效的邮箱地址
        wp_die( ‘无效的邮箱格式。’ );
    }
  • Verificação de Permissões: Antes de realizar operações de gestão, verifique se o usuário atual possui as permissões necessárias.
    if ( ! current_user_can( ‘manage_options’ ) ) {
        wp_die( ‘你没有执行此操作的权限。’ );
    }
  • Verificação de Nonce: Para operações que envolvem alterações de estado (como o envio de formulários ou solicitações AJAX), é utilizado um Nonce (um número único e temporário) para evitar ataques de falsificação de solicitações entre sites (CSRF – Cross-Site Request Forgery).
    // 在表单中输出nonce字段
    wp_nonce_field( ‘myplugin_action’, ‘myplugin_nonce’ );
    // 在处理请求时验证nonce
    if ( ! isset( $_POST[‘myplugin_nonce’] ) || ! wp_verify_nonce( $_POST[‘myplugin_nonce’], ‘myplugin_action’ ) ) {
        wp_die( ‘安全校验失败。’ );
    }

resumos

Através deste guia, você completou todo o processo, desde a criação de arquivos de plugins básicos, até o entendimento e uso do sistema de ganchos (hooks) do WordPress, a construção de interfaces de gerenciamento no backend, bem como a implementação de funcionalidades de internacionalização e práticas básicas de segurança. Você adquiriu as habilidades essenciais para desenvolver plugins para o WordPress que sejam completos em funcionalidades, bem estruturados e seguros. A essência do desenvolvimento de plugins reside no uso eficaz dos ganchos de ações (actions) e filtros (filters) para expandir as funcionalidades do WordPress, sempre dando prioridade à segurança e à manutenibilidade. Em seguida, você pode tentar explorar APIs mais complexas, como tabelas de banco de dados personalizadas, interações AJAX ou pontos de extremidade de API REST, a fim de criar ferramentas ainda mais poderosas.

Perguntas frequentes Perguntas frequentes

Quais são os conhecimentos prévios necessários para desenvolver um plugin para o WordPress com o código ###?
Você precisa ter conhecimentos básicos de programação em PHP, e será muito útil também entender HTML, CSS e JavaScript (especialmente jQuery). O mais importante é ter uma noção inicial da arquitetura básica do WordPress, conceitos como temas, plugins, tipos de artigos e funções de usuário. Este guia parte do pressuposto de que você já possui esses conhecimentos básicos.

Como depurar o meu plugin do WordPress?

Primeiro, certifique-se de que…wp-config.phpNo arquivoWP_DEBUGA constante foi definida como…trueIsso exibirá erros, avisos e notificações do PHP na página. Em segundo lugar, é possível utilizar…error_log()A função grava as informações de depuração no log de erros do servidor. Para um depuramento mais avançado, você pode considerar o uso de plugins de depuração especializados, como o Query Monitor, que permite visualizar informações detalhadas sobre consultas ao banco de dados, execução de funções de interrupção (hooks), carregamento de scripts, entre outros.

Como devo distribuir o plugin que desenvolvi?

Para uso pessoal ou compartilhamento em pequena escala, você pode simplesmente criar um arquivo ZIP com o código. Se deseja publicá-lo de forma aberta, existem dois principais caminhos: o primeiro é enviar o plugin para o diretório oficial de plugins do WordPress (WordPress.org), o que exige a adesão às suas diretrizes de envio e padrões de código, mas garante a maior exposição possível; o segundo é distribuí-lo através do seu próprio site ou de marketplaces de terceiros (como o CodeCanyon). Antes de enviar o plugin para o diretório oficial, verifique cuidadosamente a qualidade e a segurança do código.

Como adicionar tipos de artigos ou categorias personalizados ao meu plugin?

Você pode usarregister_post_type()Função para criar tipos de artigos personalizados (CPT – Custom Post Types), utilizando…register_taxonomy()Use funções para criar uma classificação personalizada. É melhor realizar essas operações…initA execução ocorre nos ganchos de ação (action hooks). O WordPress Codex e o Developer Handbook fornecem descrições detalhadas sobre os parâmetros dessas duas funções, representando uma maneira poderosa de expandir as capacidades de gerenciamento de conteúdo do WordPress.

Como evitar que os nomes das funções em um plugin entrem em conflito com outros plugins?

Para evitar conflitos entre nomes de funções, classes ou constantes, a melhor prática é usar namespaces (desde o PHP 5.3). Se o seu plugin precisar suportar versões mais antigas do PHP ou se você desejar manter a máxima compatibilidade, pode adicionar um prefixo único a todos os identificadores. Por exemplo, use o nome do plugin ou uma abreviação como prefixo.myplugin_function_nameMyPlugin_ClassNameouMYPLUGIN_CONSTANTOs exemplos de código contidos neste guia utilizam o método de prefixação.