Módulo 7: Internacionalização e Segurança no Desenvolvimento de Plugins WordPress

Tornando o Plugin Multilíngue

Quando desenvolvemos um plugin para WordPress, é fundamental garantir que ele possa ser traduzido para diferentes idiomas. Isso permite que um público mais amplo possa utilizá-lo, melhorando sua acessibilidade global.

Uso das Funções __() e _e()

O WordPress fornece duas funções principais para facilitar a tradução de textos dentro do código do plugin:

  • __() – Retorna o texto traduzido sem imprimir na tela.
  • _e() – Traduz e imprime o texto diretamente.

Exemplo de uso dentro do nosso plugin:

function meu_plugin_mensagem_rodape() {
    echo '<p style="text-align: center;">' . __('Obrigado por visitar nosso site!', 'meu-primeiro-plugin') . '</p>';
}

Para preparar o plugin para tradução, precisamos adicionar a função load_plugin_textdomain() dentro do arquivo principal do plugin:

function meu_plugin_carregar_textos() {
    load_plugin_textdomain('meu-primeiro-plugin', false, dirname(plugin_basename(__FILE__)) . '/languages');
}
add_action('plugins_loaded', 'meu_plugin_carregar_textos');

Agora, basta criar um arquivo .pot com as traduções e disponibilizá-lo na pasta languages dentro do diretório do plugin.

Práticas de Segurança no Desenvolvimento de Plugins

A segurança é um fator essencial ao desenvolver plugins para WordPress. Vamos abordar algumas das melhores práticas para proteger seu plugin contra vulnerabilidades.

1. Protegendo Contra Acesso Direto

Inclua a seguinte verificação no início do seu arquivo principal para evitar que ele seja acessado diretamente:

if (!defined('ABSPATH')) {
    exit; // Sai do script se for acessado diretamente
}

2. Sanitização e Validação de Dados

Sempre limpe e valide os dados recebidos antes de usá-los no banco de dados:

$nome = sanitize_text_field($_POST['nome']);
$email = sanitize_email($_POST['email']);

Isso impede que códigos maliciosos sejam inseridos na base de dados.

3. Uso de prepare() ao Executar Querys no Banco de Dados

Nunca use querys SQL diretas com dados inseridos pelo usuário. Use prepare() para evitar SQL Injection:

$dados = $wpdb->get_results($wpdb->prepare("SELECT * FROM {$wpdb->prefix}meu_plugin_dados WHERE email = %s", $email));

4. Verificação de Nonces para Evitar CSRF

Ao criar formulários administrativos, use um nonce para garantir que a requisição venha de uma fonte confiável:

wp_nonce_field('meu_plugin_nonce_action', 'meu_plugin_nonce');

E ao processar os dados do formulário:

if (!isset($_POST['meu_plugin_nonce']) || !wp_verify_nonce($_POST['meu_plugin_nonce'], 'meu_plugin_nonce_action')) {
    die('Ação não permitida.');
}

Lidando com Permissões de Usuários

Controlar quem pode acessar e modificar dados dentro do plugin é essencial para a segurança. O WordPress possui um sistema robusto de permissões baseado em “capabilities” e “roles”.

1. Verificando Permissão ao Criar Menus de Admin

Ao adicionar um menu no painel administrativo, certifique-se de que apenas usuários com permissão adequada possam acessá-lo:

add_menu_page(
    'Configurações do Meu Plugin',
    'Meu Plugin',
    'manage_options',
    'meu-plugin-configuracoes',
    'meu_plugin_pagina_configuracao_callback',
    'dashicons-admin-generic',
    20
);

A capability manage_options garante que apenas administradores tenham acesso.

2. Restringindo Ações com current_user_can()

Antes de executar uma ação sensível, verifique se o usuário tem permissão:

if (!current_user_can('manage_options')) {
    wp_die(__('Você não tem permissão para acessar esta página.', 'meu-primeiro-plugin'));
}

Conclusão

Internacionalização e segurança são aspectos fundamentais no desenvolvimento de plugins para WordPress. Ao tornar seu plugin multilíngue e aplicar boas práticas de segurança, você garante que ele seja acessível e confiável para uma ampla gama de usuários.