Do zero ao um: Introdução ao desenvolvimento de plugins do WordPress e guia das melhores práticas

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

Por que escolher desenvolver o próprio plugin para o WordPress?

O WordPress se tornou o sistema de gerenciamento de conteúdo mais popular no mundo em grande parte graças à sua poderosa arquitetura de plugins. Os plugins permitem que os desenvolvedores adicionem quase qualquer funcionalidade ao site sem modificar o código principal. Ao criar seus próprios plugins, você pode atender a necessidades altamente personalizadas, resolver problemas específicos do negócio, melhorar o desempenho do site e até mesmo transformar essas soluções em produtos para compartilhamento e venda na comunidade ou no mercado. Dominar as habilidades de desenvolvimento de plugins significa que você pode controlar profundamente o comportamento do WordPress, passando de um mero usuário de temas para um criador ativo de funcionalidades.

Compreender a arquitetura dos plugins do WordPress é o primeiro passo. Todos os plugins estão localizados…/wp-content/plugins/No diretório, cada plugin possui sua própria pasta. O WordPress identifica e carrega os plugins ao escanear o arquivo PHP principal localizado nesse diretório. Esse design modular garante a isolamento das funções, a segurança e a facilidade de manutenção.

Construa o seu primeiro plugin para o WordPress.

Estrutura básica dos arquivos para a criação de um plugin

Um dos plugins mais simples para o WordPress necessita, no mínimo, de um arquivo PHP principal. Vamos criar primeiro um arquivo chamado…my-first-pluginO diretório e, nele, crie o arquivo principal.my-first-plugin.phpAs notas de cabeça deste arquivo são essenciais, pois são utilizadas para fornecer informações metadadas sobre o plugin ao WordPress.

Leitura recomendada Guia completo para o desenvolvimento de plugins do WordPress: construir funcionalidades personalizadas 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
 */

Coloque a pasta que contém o código acima em.../wp-content/plugins/Em seguida, acesse a página de “Plugins” no painel administrativo do WordPress, e você poderá ver e ativar esse plugin. Embora ele ainda não tenha nenhuma funcionalidade, você já criou com sucesso uma estrutura de plugin compatível com as normas do 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).

Adicionar uma função simples ao plugin.

Vamos adicionar uma funcionalidade básica a este plugin: adicionar automaticamente um texto personalizado no final do conteúdo do artigo. Isso exigirá o uso dos ganchos (hooks) de filtros do WordPress.the_content

Nosmy-first-plugin.phpAbaixo dos comentários de cabeça, adicione o seguinte código:

// 在文章内容后添加自定义文本
function myfp_add_footer_text( $content ) {
    // 确保只在主循环的单篇文章页面添加
    if ( is_single() &amp;&amp; in_the_loop() &amp;&amp; is_main_query() ) {
        $footer_text = '<p><em>Obrigado por ler este artigo, apresentado por “Meu Primeiro Plugin”.</em></p>';
        $content .= $footer_text;
    }
    return $content;
}
add_filter( 'the_content', 'myfp_add_footer_text' );

Este código define uma função.myfp_add_footer_textEle recebe o conteúdo do artigo.$contentComo parâmetro. Dentro da função, isso é processado através de etiquetas condicionais.is_single()Realize julgamentos com base nisso para garantir que o texto seja adicionado apenas na página de um único artigo. Por fim, use…add_filter()A função monta a nossa função personalizada no sistema.the_contentNeste filtro, após salvar o arquivo e visualizar qualquer artigo, você notará que o texto que adicionamos já apareceu na parte inferior da página.

Seguir as melhores práticas de desenvolvimento de plugins para WordPress

Assegurar a segurança do código e a validação dos dados

Ao lidar com dados inseridos ou exibidos pelos usuários em um plugin, a segurança é a principal consideração. O WordPress disponibiliza uma grande quantidade de funções para ajudar os desenvolvedores a realizar a validação, a escapamento e a limpeza dos dados. Nunca use esses dados diretamente.$_GET$_POSTou$_REQUESTAs variáveis contidas nisso.

Leitura recomendada Análise aprofundada do desenvolvimento de plugins para WordPress: Construindo funcionalidades personalizadas do zero

Por exemplo, quando você obtém um ID a partir de um parâmetro de URL e o utiliza em uma consulta ao banco de dados, deve proceder da seguinte maneira:

// 安全地获取并验证一个URL整数参数
$item_id = isset( $_GET['id'] ) ? absint( $_GET['id'] ) : 0;
if ( $item_id > 0 ) {
    // 使用 $item_id 进行安全查询
    global $wpdb;
    $query = $wpdb->prepare( "SELECT * FROM {$wpdb->prefix}my_table WHERE id = %d", $item_id );
    $result = $wpdb->get_row( $query );
}

Aqui,absint()A função força a conversão da entrada em um número inteiro não negativo.$wpdb->prepare()Este método é utilizado para preparar instruções SQL de forma segura, a fim de prevenir ataques de injeção de SQL. Para qualquer dado dinâmico que for exibido em páginas HTML, deve-se utilizar este método.esc_html()esc_attr()ouwp_kses_post()Use funções como `escape()` para realizar a escape dos caracteres.

Implementar suporte a tradução e internacionalização

Para que o seu plugin possa ser usado por usuários em todo o mundo, a internacionalização (i18n) é essencial. Isso significa que todas as strings de texto direcionadas aos usuários devem ser encapsuladas usando as funções de tradução do WordPress.

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%

Modifique o código que adicionou o texto anterior para que ele suporte a tradução.

function myfp_add_footer_text( $content ) {
    if ( is_single() &amp;&amp; in_the_loop() &amp;&amp; is_main_query() ) {
        // 使用 __() 函数使字符串可翻译
        $footer_text = sprintf(
            '<p><em>%s</em></p>',
            esc_html__( '感谢阅读本文,由“我的第一个插件”为您呈现。', 'my-first-plugin' )
        );
        $content .= $footer_text;
    }
    return $content;
}

Nós usamosesc_html__( ‘字符串’, ‘text-domain’ )Vamos embalar o texto. Entre eles…my-first-pluginÉ um campo de texto (Text Domain) definido no início do plugin, o que garante a independência das traduções. Em seguida, o tradutor pode utilizá-lo..potO arquivo contém as traduções para diferentes idiomas do seu plugin..moArquivo de tradução.

Escrever código que possa ser mantido e usar programação orientada a objetos.

Para plugins simples, a programação procedural pode ser suficiente. No entanto, para plugins com funcionalidades mais complexas, o uso da programação orientada a objetos (POO) pode ajudar a organizar o código de forma mais eficaz, melhorando a legibilidade e a manutenibilidade.

Leitura recomendada Guia completo para o desenvolvimento de plugins do WordPress: do início ao fim, criando funcionalidades personalizadas.

A seguir, está um exemplo de como reestruturar nosso plugin utilizando classes:

class My_First_Plugin {
    /**
     * 构造函数,用于初始化动作和过滤器
     */
    public function __construct() {
        add_action( 'init', array( $this, 'load_textdomain' ) );
        add_filter( 'the_content', array( $this, 'add_footer_to_content' ) );
    }

/**
     * 加载插件文本域用于国际化
     */
    public function load_textdomain() {
        load_plugin_textdomain( 'my-first-plugin', false, dirname( plugin_basename( __FILE__ ) ) . '/languages' );
    }

/**
     * 在文章内容后添加文本
     */
    public function add_footer_to_content( $content ) {
        if ( is_single() &amp;&amp; in_the_loop() &amp;&amp; is_main_query() ) {
            $footer_text = sprintf(
                '<p><em>%s</em></p>',
                esc_html__( '感谢阅读本文,由“我的第一个插件”为您呈现。', 'my-first-plugin' )
            );
            $content .= $footer_text;
        }
        return $content;
    }
}

// 初始化插件类
new My_First_Plugin();

Ao encapsular as funcionalidades…My_First_PluginNa classe, a estrutura do código é mais clara, o que evita a contaminação dos funções pelo espaço de nomes global e facilita a expansão das funcionalidades.

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.

Adicionar uma interface de gerenciamento e opções de configuração para o plugin.

Criar uma página de menu de gerenciamento e opções

Muitos plugins precisam fornecer opções de configuração para os usuários. O WordPress disponibiliza uma API para adicionar menus e submenus no backend. É recomendado usá-la.add_options_page()A função adiciona a página de configuração do plugin ao menu principal “Configurações”, o que está de acordo com as normas de experiência do usuário do WordPress.

class My_First_Plugin_Admin {
    public function __construct() {
        add_action( 'admin_menu', array( $this, 'add_admin_menu' ) );
        add_action( 'admin_init', array( $this, 'register_settings' ) );
    }

public function add_admin_menu() {
        add_options_page(
            '我的插件设置',          // 页面标题
            '我的第一个插件',        // 菜单标题
            'manage_options',       // 所需权限
            'myfp-settings',        // 菜单slug
            array( $this, 'render_settings_page' ) // 回调函数
        );
    }

public function register_settings() {
        register_setting( 'myfp_settings_group', 'myfp_footer_text' );
        add_settings_section( 'myfp_main_section', '主要设置', null, 'myfp-settings' );
        add_settings_field( 'myfp_text_field', '页脚文本', array( $this, 'render_text_field' ), 'myfp-settings', 'myfp_main_section' );
    }

public function render_text_field() {
        $value = get_option( 'myfp_footer_text', '默认的感谢文本。' );
        echo '<input type="text" name="myfp_footer_text" value="' . esc_attr( $value ) . '" class="regular-text" />';
    }

public function render_settings_page() {
        ?&gt;
        <div class="wrap">
            <h1></h1>
            <form action="/pt/options.php/" method="post" data-trp-original-action="options.php">
                <?php
                settings_fields( 'myfp_settings_group' );
                do_settings_sections( 'myfp-settings' );
                submit_button();
                ?>
            <input type="hidden" name="trp-form-language" value="pt"/></form>
        </div>
        &lt;?php
    }
}

// 仅在管理后台加载管理类
if ( is_admin() ) {
    new My_First_Plugin_Admin();
}

Integrar as funcionalidades dos plugins com as opções de configuração.

Após criar a página de configurações, precisamos modificar a funcionalidade do lado front-end para que ela utilize os valores das opções salvos pelo usuário, em vez de textos codificados em forma fixa.

Antes da atualizaçãoMy_First_Plugindentro da classeadd_footer_to_contentMétodo:

public function add_footer_to_content( $content ) {
    if ( is_single() &amp;&amp; in_the_loop() &amp;&amp; is_main_query() ) {
        // 从数据库选项获取用户自定义的文本,如果不存在则使用默认翻译
        $saved_text = get_option( 'myfp_footer_text' );
        $footer_text = ! empty( $saved_text ) ? esc_html( $saved_text ) : esc_html__( '感谢阅读本文,由“我的第一个插件”为您呈现。', 'my-first-plugin' );

$content .= sprintf( '<p><em>%s</em></p>', $footer_text );
    }
    return $content;
}

Agora, o texto do rodapé do plugin pode ser personalizado através da página de configurações do backend, o que permite a separação entre funcionalidades e configurações, aumentando significativamente a flexibilidade do plugin.

resumos

O desenvolvimento de plugins para o WordPress é um processo que começa com a compreensão da sua arquitetura básica e, gradualmente, aprofunda-se em questões como segurança, internacionalização, organização do código e interação com os usuários. O essencial é seguir os padrões de codificação do WordPress e as melhores práticas da comunidade, incluindo o uso do sistema de ganchos (Actions and Filters) disponibilizado pelo framework, a garantia da segurança dos dados, o suporte a múltiplas línguas e a criação de interfaces de gestão claras e intuitivas. Você pode dominar todo o processo de desenvolvimento de plugins de forma sistemática, começando com a criação de um plugin simples, adicionando opções de configuração ao longo do caminho e, em seguida, reestruturando o código para uma abordagem orientada a objetos. Lembre-se: um bom plugin não é apenas aquele que funciona corretamente, mas também aquele que é seguro, eficiente, fácil de manter e compatível com diferentes idiomas.

Perguntas frequentes Perguntas frequentes

Quais são os conhecimentos prévios necessários para desenvolver um plugin para o WordPress?

Você precisa ter uma base sólida em programação PHP, pois os plugins são principalmente escritos em PHP. Além disso, é necessário ter um conhecimento básico de HTML, CSS e JavaScript para construir interfaces e interações no lado front-end. Compreender os conceitos fundamentais do WordPress, como temas, tipos de artigos, categorias, metadados e, principalmente, o mecanismo de ganchos (actions e filters), é essencial para o desenvolvimento bem-sucedido de plugins. Ter familiaridade com as operações básicas do banco de dados MySQL também é muito útil para o processamento de dados complexos.

Como depurar um plugin do WordPress que está em desenvolvimento?

Primeiro, certifique-se de que…wp-config.phpO ficheiro foi aberto.WP_DEBUGeWP_DEBUG_LOGIsso irá registrar os erros e avisos do PHP em um arquivo específico./wp-content/debug.logNo arquivo, evite que as mensagens de erro sejam exibidas diretamente para o usuário. Em segundo lugar, é possível utilizar…error_log()A função exibe informações de depuração personalizadas no mesmo arquivo de log. Para verificar os valores das variáveis, utilize…print_r()ouvar_dump()Função, e em conjunto com…echo ‘’;Formateie o código, mas lembre-se de fazer isso apenas no ambiente de desenvolvimento. Além disso, utilize as ferramentas de desenvolvimento do navegador (tecla F12) para acessar os painéis “Console” e “Network” e assim depurar os códigos JavaScript e as solicitações AJAX.

Como meu plugin pode interagir com serviços ou APIs de terceiros?

Interagir com APIs de terceiros é uma maneira comum de expandir as funcionalidades de um plugin. No WordPress, recomenda-se o uso da API HTTP embutida (como…)wp_remote_get()wp_remote_post()É necessário utilizar HTTPS para enviar solicitações, pois esse protocolo lida com questões relacionadas à compatibilidade, tempo de resposta (timeout) e segurança. É essencial usar HTTPS sempre que estiver transmitindo dados sensíveis. Quanto às respostas recebidas da API, geralmente é necessário decodificar o formato JSON (utilizando métodos apropriados).json_decode()Você pode usar dados em formato JSON ou XML e realizar um bom tratamento de erros, como verificar o código de status HTTP e os códigos de erro retornados pela API. É recomendável armazenar informações sensíveis, como as chaves da API, nas configurações do plugin, em vez de codificá-las diretamente em arquivos.

Como enviar meu plugin gratuito para o diretório oficial de plugins do WordPress?

Primeiramente, você precisa garantir que o seu plugin esteja em total conformidade com a licença GPL, que a qualidade do código seja alta e que não contenha nenhum link malicioso ou promocional. Crie uma conta no WordPress.org e, em seguida, acesse a seção “Desenvolvedores” para enviar o seu plugin. Você deve fornecer um pacote compactado do plugin (em formato ZIP) que inclua as informações padrão do plugin, além de outros arquivos necessários.readme.txtO arquivo descreve o plugin em um formato específico, além de possíveis capturas de tela e ícones. Após a submissão, a equipe de revisão dos plugins irá analisá-lo, e esse processo pode levar algumas semanas. Se for aprovado, você receberá um repositório SVN oficial para gerenciar o código do seu plugin. Os usuários poderão então procurar e instalar o seu plugin diretamente pelo painel administrativo do WordPress.