O que é um programador WordPress? Na WPPoland sou eu, Mariusz Szatkowski. Escrevo PHP, JavaScript (React nos blocos Gutenberg), SQL e uso as APIs do núcleo: temas e plugins à medida, Core Web Vitals, hardening e integrações. Trabalho com WordPress desde 2006, sozinho, a partir de Gdynia, por isso o código que recebe fui eu que o escrevi. Numa loja portuguesa isso inclui MB WAY e Multibanco no checkout, envios pelos CTT e a ligação a um programa de faturação certificado pela AT. Se o briefing já existe, o âmbito e a forma de orçamentar estão mais abaixo.
Factos-chave (versão curta)
Um programador WordPress escreve PHP 8.x e React, entrega temas de blocos e plugins à medida, liga CRM e ERP e monta WooCommerce segundo os WordPress Coding Standards. Na WPPoland esse programador é Mariusz Szatkowski.
Um especialista WordPress entra quando o site já está no ar e parte: atualizações que derrubam o checkout, malware, lentidão, uma fatura que deixa de sair com ATCUD.
Quem: Mariusz Szatkowski, programador WordPress sénior que trabalha com WordPress desde 2006. Vivo em Gdynia e trabalho remotamente para empresas em Portugal e no resto da Europa. Sem equipa nem subcontratados.
O quê: WordPress e WooCommerce à medida, projetos headless, trabalho sobre Core Web Vitals medido com utilizadores reais, sites multilíngues e integrações API. O design gráfico e os wireframes vêm do seu lado.
Orçamento: o âmbito e o preço são definidos individualmente numa proposta escrita. O calendário resulta do âmbito e consta da mesma proposta.
Com quem trabalha
- WordPress comercial desde 2006, antes do Gutenberg e da REST API
- Conduzido por sénior: o engenheiro do discovery é o mesmo na semana seis
- Sem passagem para offshore, sem camada de PM faturada
- Organizador da WordCamp Europe, mentor WordPress Foundation Credits
- Shopify Academy: percurso CRO e Partner Marketing (Credly, 2025)
Credenciais Shopify Academy
Competências de um programador WordPress 2026
Um programador WordPress em 2026 tem de dominar PHP 8.x, JavaScript com React e a base de dados por baixo do WordPress. A tabela organiza a stack por camada:
| Camada | Tecnologias obrigatórias | Tecnologias complementares |
|---|---|---|
| Backend | PHP 8.x (OOP, typed properties, enums), WordPress Core API, WooCommerce REST | Laravel, Symfony, Composer |
| Frontend | React, JavaScript ES6+, blocos Gutenberg, Full Site Editing, Tailwind | Next.js, Astro, Vue.js |
| Bases de dados | MySQL / MariaDB, otimização de WP_Query, tabelas próprias | Redis, PostgreSQL, Elasticsearch |
| DevOps | Git, Composer, NPM, CI/CD, Docker, staging e produção | Cloudflare Workers, AWS, GCP |
| Segurança | hardening WP, OWASP Top 10, proteção contra injeção SQL e XSS | WAF, CSP, cabeçalhos de segurança |
Se precisa de um par de mãos sénior sem camada de agência, veja WordPress freelancer. Trabalho fora do WordPress (APIs, integrações, aplicações novas) orçamenta-se como programador de software.
Provas técnicas e atividade open-source
O que pode verificar por si:
- Contribuidor do core do WordPress: patches com testes unitários submetidos via Trac nas classes de query, na REST API e na internacionalização (entre outros, #51811,
scomo alias desearchemWP_Term_Query, #43502, reset de postdata no controlador REST de posts, #64986, gettext na pré-visualização), além de General Translation Editor da língua polaca (profiles.wordpress.org/motylanogha). - 30 plugins gratuitos no WordPress.org, entre eles o “Polski for WooCommerce”, escritos segundo os WordPress Coding Standards.
- Código aberto no GitHub: por exemplo o
woocommerce-mcp, um servidor Model Context Protocol só de leitura que expõe dados do WooCommerce a agentes de IA. - Comunidade WordPress: organizador do WordCamp Gdynia, coorganizador do WordCamp Polska e do WordCamp Europe, orador e WordPress Foundation Credits Mentor.
Exemplos de código de um programador WordPress
A diferença entre um programador e um clicador vê-se no código que chega à produção. Seguem-se quatro padrões que os plugins prontos e os page builders raramente implementam bem: segurança, consultas, API e cache.
1. Gravação segura de meta: permissão por post, nonce, sanitização
Verificação de edit_post sobre o post concreto em vez de um papel genérico, nonce ao guardar e sanitização da entrada antes de gravar na base de dados. O escaping é feito à parte, na apresentação.
O que isto significa para si: um editor não sobrescreve os dados de outra pessoa e a gravação não pode ser desencadeada a partir de um site externo. Sem isto basta uma conta de autor para alguém trocar conteúdo que ninguém tem guardado num backup separado.
Mostrar o código PHP (44 linhas)
declare( strict_types=1 );
add_action( 'init', 'wppl_register_projekt_meta' );
add_action( 'save_post_wppl_projekt', 'wppl_save_projekt_meta', 10, 2 );
// Meta com tipagem, sanitização e auth_callback baseado em capability.
function wppl_register_projekt_meta(): void {
register_post_meta(
'wppl_projekt',
'wppl_budzet_pln',
array(
'type' => 'integer',
'single' => true,
'show_in_rest' => true,
'sanitize_callback' => 'absint', // Número inteiro, sem negativos.
'auth_callback' => static function ( bool $allowed, string $meta_key, int $post_id ): bool {
return current_user_can( 'edit_post', $post_id );
},
)
);
}
// Guarda a meta com a cadeia de segurança completa.
function wppl_save_projekt_meta( int $post_id, WP_Post $post ): void {
// 1. Nonce - proteção contra CSRF.
if ( ! isset( $_POST['wppl_budzet_nonce'] )
|| ! wp_verify_nonce( sanitize_key( wp_unslash( $_POST['wppl_budzet_nonce'] ) ), 'wppl_save_budzet' )
) {
return;
}
// 2. Ignoramos autosave e revisões.
if ( ( defined( 'DOING_AUTOSAVE' ) && DOING_AUTOSAVE ) || wp_is_post_revision( $post_id ) ) {
return;
}
// 3. Permissões para o post concreto, não o genérico 'edit_posts'.
if ( ! current_user_can( 'edit_post', $post_id ) ) {
return;
}
// 4. Sanitização da entrada antes de guardar.
$budzet = isset( $_POST['wppl_budzet_pln'] )
? absint( wp_unslash( $_POST['wppl_budzet_pln'] ) )
: 0;
update_post_meta( $post_id, 'wppl_budzet_pln', $budzet );
}Clicador: guarda os dados num campo do page-builder sem capabilities próprias nem nonce, por isso qualquer autor (e muitas vezes um CSRF) pode sobrescrever o valor, e os dados acabam guardados em bruto e devolvidos sem esc_attr().
2. WP_Query eficiente sem o problema N+1
De onde vem o N+1 no WordPress e como uma única chamada a update_meta_cache() depois de obter os IDs o elimina, em vez de N consultas separadas à base de dados dentro do ciclo.
O que isto significa para si: uma listagem com cinquenta entradas consulta a base de dados poucas vezes em vez de dezenas. Com tráfego real, é a diferença entre um servidor que aguenta a campanha e outro que cai.
Mostrar o código PHP (30 linhas)
function wppl_get_projekty( int $limit = 12 ): array {
$query = new WP_Query(
array(
'post_type' => 'wppl_projekt',
'post_status' => 'publish',
'posts_per_page' => $limit,
'no_found_rows' => true, // Sem SQL_CALC_FOUND_ROWS - não contamos a paginação.
'fields' => 'ids', // Apenas IDs, não os objetos completos.
'update_post_term_cache' => false, // Taxonomias desnecessárias aqui.
)
);
$ids = $query->posts;
if ( empty( $ids ) ) {
return array();
}
// Chave para evitar o N+1: com uma consulta preparamos a meta de todos os IDs.
update_meta_cache( 'post', $ids );
$projekty = array();
foreach ( $ids as $post_id ) {
$projekty[] = array(
'id' => (int) $post_id,
'budzet' => (int) get_post_meta( $post_id, 'wppl_budzet_pln', true ), // Acerto na cache.
);
}
return $projekty;
}Clicador: o widget do page-builder itera sobre os objetos de post completos e chama get_post_meta em cada iteração, gerando dezenas de consultas SQL por cada vista, e o SQL_CALC_FOUND_ROWS por omissão acrescenta uma contagem de linhas dispendiosa que a página nem sequer usa.
3. Endpoint da REST API com permission_callback real e schema
Autorização por objeto no permission_callback, validação e sanitização declarativas dos argumentos e um schema formal que descreve o contrato para os consumidores da API.
O que isto significa para si: a integração com o CRM ou o ERP não expõe publicamente os seus dados nem se parte à primeira alteração do lado do fornecedor.
Mostrar o código PHP (25 linhas)
add_action( 'rest_api_init', 'wppl_register_rest_routes' );
function wppl_register_rest_routes(): void {
register_rest_route(
'wppoland/v1',
'/projekty/(?P<id>\d+)/budzet',
array(
'methods' => WP_REST_Server::EDITABLE, // POST, PUT, PATCH.
'callback' => 'wppl_rest_update_budzet',
// Autorização real: permissão para o post CONCRETO.
'permission_callback' => static function ( WP_REST_Request $request ): bool {
return current_user_can( 'edit_post', (int) $request['id'] );
},
'args' => array(
'budzet' => array(
'type' => 'integer',
'required' => true,
'minimum' => 0,
'sanitize_callback' => 'absint',
'validate_callback' => 'rest_validate_request_arg',
),
),
)
);
}Clicador: os formulários de plugin expõem muitas vezes os dados via admin-ajax ou uma rota com permission_callback definido como __return_true, sem validação de tipos nem schema, o que abre a escrita não autorizada e quebra a previsibilidade da integração.
4. Cache com invalidação através de last_changed
O padrão last_changed do core do WordPress: um único registo invalida toda a família de chaves de cache, com a distinção correta entre os hooks before_delete_post e deleted_post.
O que isto significa para si: depois de editar um texto, a página mostra logo a versão nova, sem ter de pedir a alguém que limpe a cache à mão.
Mostrar o código PHP (18 linhas)
// Chave de cache baseada no marcador last_changed - uma invalidação
// anula todas as variantes (vários $limit) sem as apagar uma a uma.
function wppl_projekty_cache_key( int $limit ): string {
$last_changed = wp_cache_get_last_changed( 'wppl_projekty' );
return sprintf( 'wppl_projekty_%d_%s', $limit, $last_changed );
}
add_action( 'save_post_wppl_projekt', 'wppl_flush_projekty_cache' );
add_action( 'before_delete_post', 'wppl_flush_projekty_cache' );
// Usamos before_delete_post, porque deleted_post dispara DEPOIS de o post ser apagado,
// quando get_post_type() já devolve false e não é possível verificar o tipo.
function wppl_flush_projekty_cache( int $post_id ): void {
if ( 'wppl_projekt' !== get_post_type( $post_id ) ) {
return;
}
wp_cache_set_last_changed( 'wppl_projekty' ); // Novo marcador = novas chaves.
}Clicador: os plugins de cache dos page-builders ou mantêm dados desatualizados até uma limpeza manual, ou tentam apagar chaves individuais e perdem variantes; ligar a invalidação a deleted_post em vez de before_delete_post deixa de funcionar em silêncio, porque já não é possível verificar o tipo do post.
O site funciona, mas ninguém se atreve a mexer
É o estado mais comum e o mais caro: tudo parece bem até alguém precisar de acrescentar um campo ao formulário ou ligar o site à faturação. Aí descobre-se que ninguém sabe o que parte se tocar. Envie o endereço e diga o que precisa de acrescentar nos próximos meses. Respondo por escrito a dizer se assenta no que já existe ou se essa parte tem de ser refeita, antes de falarmos de orçamento, que é sempre individual.
Diga o que precisa de acrescentarO que distingue um programador WordPress de um implementador
O implementador apoia-se em plugins e temas prontos. O programador escreve o que o projeto precisa e deixa o resto de fora. Qualquer pessoa que alugue um alojamento barato consegue clicar no instalador automático do WordPress, mas isso é administração.
Implementador (clicador)
Parte de um tema pronto e pesado e cobre as faltas com muitos plugins e um page builder como o Elementor ou o Divi. Cada plugin acrescenta código a carregar e peças a atualizar, e uma vulnerabilidade num deles afeta o site inteiro.
Programador WordPress
Usa o WordPress como framework através das APIs do núcleo, escreve a lógica de negócio em PHP e os blocos em React e mantém poucos plugins. O resultado mede-se com Core Web Vitals de visitantes reais antes e depois, e não com uma única execução do Lighthouse.
O que faz um programador WordPress
Trato de toda a parte técnica: temas e plugins à medida, integrações API com CRM e ERP, revisões de segurança e Core Web Vitals. O código segue os WordPress Coding Standards e fica num repositório Git a que tem acesso. Para sites e lojas completos, veja também a criação de sites e lojas WordPress.
Temas WordPress à medida
Temas de blocos (FSE) construídos de raiz sobre o seu design e os seus wireframes, responsivos e feitos para WCAG 2.2 AA.
Lojas WooCommerce
Pagamentos com MB WAY, Multibanco e cartão através do prestador de pagamentos que já usa, envios pelos CTT, DPD ou outras transportadoras, preços B2B, várias moedas e línguas.
Plugins próprios e código herdado
Quando nenhum plugin existente cobre o processo, escrevo um. Também leio e arrumo código escrito por outros.
Desempenho e Core Web Vitals
Cache de objetos com Redis, CDN, imagens AVIF e WebP, consultas que não crescem com o número de posts. Medido com utilizadores reais antes e depois.
Integrações API e headless
WordPress a trocar dados com CRM (HubSpot, Salesforce), ERP e faturação. Quando faz sentido, frontend em Next.js ou Astro com o WordPress como ferramenta editorial por trás.
Revisões de segurança e hardening
Revisão de plugins e temas próprios, proteção contra XSS e injeção SQL, cabeçalhos de segurança, dois fatores para administradores e backups testados por reposição.
Em Portugal, o ponto que mais condiciona uma loja é a faturação. O WooCommerce não emite faturas: quem fatura por programa informático tem de usar um programa certificado pela AT, com ATCUD e código QR. A ligação entre a loja e esse programa explico-a no artigo sobre faturação no WooCommerce em Portugal.

Quanto ganha um programador WordPress
Quando a IA entra no recrutamento, é o código real que decide: WordPress AI e recrutamento, outubro 2026.
Depende sobretudo de o programador trabalhar por conta de outrem ou como independente. O trabalhador por conta de outrem tem salário; o independente fatura horas ou dias e paga daí a Segurança Social, o equipamento, as férias e os meses sem projetos. A experiência em e-commerce, integrações e headless faz subir o valor nos dois casos. Não publico tabelas salariais aqui: não tenho uma fonte que separe os programadores WordPress dos restantes programadores, e um número sem fonte não ajuda a decidir.
No mercado há três formas de faturar: à hora, ao dia e a preço fechado para uma entrega definida. Uso preço fechado quando o âmbito está escrito e horas para trabalho contínuo.
Custo total de um site WordPress em três anos
Quando alguém pergunta quanto custa um programador WordPress, pergunta na verdade quanto vai custar o site nos próximos anos. A oferta mais barata costuma deixar dívida técnica que se paga mais tarde, muitas vezes a meio de uma campanha ou de uma auditoria de RGPD.
| Área | Oferta mais barata (clicador) | Orçamento individual (sénior) |
|---|---|---|
| Ponto de partida | tema pronto com Elementor ou Divi, muitos plugins | tema de blocos próprio (FSE), poucos plugins |
| Core Web Vitals | raramente medidos | medidos com utilizadores reais antes e depois |
| Segurança | depende de manter muitos plugins atualizados | menos dependências, atualizações testadas em staging |
| Integrações em Portugal | MB WAY, Multibanco e faturação resolvidos com extras que não encaixam | pagamentos, envios e faturação planeados na mesma solução |
| Próxima alteração | muitas vezes, reconstrução | ampliação do que já existe |
Freelancer ou agência
Depende do projeto. O freelancer dá-lhe contacto direto com quem escreve o código; a agência tem mais perfis na casa. Agências que já vendem WordPress e precisam de capacidade extra sob a própria marca usam o balcão de desenvolvimento para agências.
| Critério | Freelancer / programador sozinho | Agência |
|---|---|---|
| Melhor para | plugin próprio, auditoria, refactor, migração | projeto grande com design, textos e marketing |
| Comunicação | direta com quem escreve o código | via gestor de projeto |
| Overhead | sem gestor de projeto nem camada comercial | gestão e vendas incluídas no preço |
| Bus factor | uma pessoa, por isso a documentação e o acesso ao repositório têm de estar em ordem | várias pessoas podem assumir |
É assim que trabalho: sozinho, com o design gráfico e os wireframes do seu lado.
Como se tornar programador WordPress
O básico do WordPress aprende-se em alguns meses. Chegar a programador que responde pelo código em produção leva anos de PHP, bases de dados e frontend moderno. Instalar um tema e configurar plugins é administração.
Um caminho realista: primeiro HTML, CSS, JavaScript básico e o loop do WordPress; depois PHP 8.x, hooks e filtros, REST API e React para blocos; a seguir arquitetura de aplicações, headless, integrações, desempenho e segurança; por fim auditorias, projetos grandes e contribuições para o núcleo.
O que mais ensina é o trabalho real com clientes. O WordPress Developer Handbook e o Slack do Make WordPress são melhor ponto de partida do que um bootcamp, e ler tickets do Trac e discussões de patches mostra como os programadores experientes depuram.
Contrate um programador WordPress
Procura um programador WordPress para o seu projeto? Trabalha diretamente comigo: âmbito escrito antes do código, staging para revisão e ninguém a assumir o projeto a meio. O orçamento segue o âmbito acordado. Lojas WooCommerce faço-as como programador WooCommerce.
Um programador faz sentido quando o projeto ultrapassa um site institucional simples, por exemplo quando:
- precisa de integrações com CRM, ERP, pagamentos ou sistemas internos,
- a loja WooCommerce está lenta ou não aguenta mais tráfego,
- quer reconstruir um site preso ao Elementor, Divi ou outro builder pesado,
- é preciso corrigir erros ou arrumar código herdado,
- planeia uma migração, uma versão multilíngue, uma área reservada ou um projeto headless.
Processo de colaboração
- Briefing e esclarecimentos: envia um briefing escrito, faço perguntas por email e deixo âmbito, pressupostos e calendário na proposta.
- Layout: marca na folha de cálculo que lhe envio os elementos de cada vista. O design gráfico e as maquetes ficam do seu lado; eu programo o tema responsivo a partir desse layout.
- Desenvolvimento: o código fica num repositório Git. Cada alteração chega ao staging com uma descrição escrita do que mudou.
- Lançamento: depois da sua aprovação em staging, o site passa para produção. A seguir podemos acordar a manutenção.
- Contrato e fatura: contrato B2B ao abrigo da lei polaca, fatura com autoliquidação e o meu NIF-IVA europeu PL7393037445, e acordo de subcontratante (art. 28.º RGPD) antes de aceder a dados pessoais.
Comunicamos por escrito: email, documentos e o repositório. Se preferir um telefonema, diga-me.
Tipos de projeto de desenvolvimento WordPress
| Tipo de serviço | Ideal para | Conteúdo típico |
|---|---|---|
| Site simples | pequenas empresas, portefólios | tema responsivo, SEO básico, poucas páginas |
| Site empresarial | empresas em crescimento | tipos de conteúdo próprios, várias línguas, formulários e integrações |
| Loja online | comércio eletrónico | WooCommerce, pagamentos, envios, stock |
| Projeto grande | organizações com vários sistemas | arquitetura própria, integrações API, multisite |
| Manutenção | todos os clientes | monitorização, backups, atualizações testadas |
Preço e calendário constam da proposta de cada projeto.
WordPress em números
O WordPress é um CMS open-source escrito em PHP, com MySQL ou MariaDB como base de dados. Começou como plataforma de blogs e hoje também serve de backend em projetos headless e na integração de agentes de inteligência artificial.
Importância global do WordPress no mercado (2025/2026)
Os dados de mercado mostram claramente porque é que as competências de programador WordPress são tão procuradas a nível global.
Vale a pena fazer um site WordPress com page builder
Um page builder pode servir no arranque. Num projeto exigente torna-se um limite: o site fica mais pesado, depende de mais extensões e custa mais a alterar. Com código próprio cada parte responde a uma necessidade real e o site cresce sem que os editores percam a ordem no painel. Se o WordPress tem de funcionar de forma estável hoje e ser ampliado daqui a um ou dois anos, compensa construí-lo bem desde o início.
Descreva o seu projeto WordPress
O melhor é começar por uma breve descrição dos requisitos, do estado atual do site e do problema a resolver. Com essa base preparo um âmbito sensato e uma proposta. Cada orçamento é individual.
Enviar descrição do projeto Veja o portefólio de trabalhos realizados
Serviços relacionados
- Criação de sites e lojas WordPress: desenvolvimento à medida
- Desenvolvimento WooCommerce: lojas em WooCommerce
- Manutenção WordPress: monitorização, backups e atualizações
- Otimização de desempenho: Core Web Vitals
Páginas regionais
Sobre o autor. Mariusz Szatkowski, programador WordPress sénior na área de TI desde 2006 e fundador da WPPoland (2007). Trabalha sozinho em desenvolvimento WordPress, WooCommerce, desempenho e segurança para empresas na Europa.
Fontes. Quota de mercado do WordPress: W3Techs. Core Web Vitals: Google Search Console.













