O wp-config.php é um dos arquivos de maior importância para a instalação, funcionamento e segurança do WordPress. Conhecer bem e de forma completa esse arquivo de configuração pode parecer desnecessário, mas esse é um ledo engano. Caso ainda não conheça alguma das definições que serão apresentadas, você entenderá a importância desse arquivo para o seu projeto.

O arquivo wp-config.php não existe entre os arquivos do WordPress; tal arquivo é criado durante o processo de instalação do assistente, ou (se você optar pela instalação manual) com base no modelo wp-config-sample.php.

Acesso ao wp-config.php

Como o arquivo de configurações possui extrema importância para o funcionamento de sua aplicação, é fundamental tomar algumas medidas preventivas quanto a sua manipulação. Uma importante técnica de segurança para o arquivo de configuração do WordPress é mover o arquivo um nível acima na estrutura de pastas do servidor. Como de modo geral o WordPress é instalado na raiz de acesso público do site, ao fazer uso dessa técnica o wp-config.php fica completamente inacessível via HTTP.

Caso você tenha sua instalação em um subdiretório da estrutura pública de arquivos do seu site; você pode optar por gerenciar os níveis de permissão para o arquivo ou então boquear o acesso via .htaccess:

<files wp-config.php>
order allow,deny
deny from all
</files>

Configuração da base de dados

Conectar o banco de dados ao WordPress pode requerer maior atenção em alguns casos. De acordo com o serviço de hospedagem, o DB_HOST,  precisa uma especificação mais detalhada. Eventualmente será preciso especificar o MySQL Alternate Port e MySQL Sockets or Pipes.

O número da porta de conexão padrão do MySQL é 3306, mas se o host do seu banco de dados utiliza um número de porta alternativo, é necessário que este número seja informado para o DB_HOST. Ficando assim:

// localhost
define( 'DB_HOST', 'localhost:3307' );
// endereços personalizados
define( 'DB_HOST', 'mysql.example.com:3307' );

Em hosts que utilizam sockets Unix e pipes, também é necessário ajustar a linha de código referente a definição do DB_HOST. Ficando assim:

define( 'DB_HOST', 'localhost:/var/run/mysqld/mysqld.sock' );

Security Keys

Configurando as Security Keys (chaves secretas, de segurança), você consegue aprimorar ainda mais a segurança no WordPress. O sistema utiliza essas chaves únicas para fazer a validação de cookies; como por exemplo, usados para controle de login dos usuários.

Você pode definir o conjunto de caracteres que quiser, mas sempre opte por ferramentas que geram chaves aleatórias, complexas e difíceis de serem descobertas. O próprio WordPress oferece em sua API pública um endereço para gerar novas Security Keys.

Reposicionar conteúdo

Com algumas constantes específicas, você pode alterar os caminhos de certas pastas da instalação padrão do WordPress. Caso queira alterar a pasta que contém os plugins, defina a constante WP_PLUGIN_DIR para o caminho completo do diretório e WP_PLUGIN_URL para o endereço completo; ambos os valores sem a barra final.

define( 'WP_PLUGIN_DIR', dirname(__FILE__) . '/wp-plugins' );
define( 'WP_PLUGIN_URL', 'http://dominio.com.br/wp-plugins' );

Para evitar problemas de compatibilidade com os plugins, defina PLUGINDIR para o caminho completo do diretório, também sem a barra ao final do endereço.

define( 'PLUGINDIR', dirname(__FILE__) . '/wp-plugins' );

Infelizmente não podemos manipular a pasta themes do mesmo modo. No entanto você pode registrar um novo diretório para receber seus temas, para isso utilize a função register_theme_directory.

register_theme_directory( 'templates' );
// registra /wp-content/templates
register_theme_directory( dirname( __FILE__ ) . '/templates' );
// a partir de um plugin, registra /wp-content/plugins/plugin/templates
register_theme_directory( ABSPATH . 'templates' );
// registra /templates

A pasta que armazena as mídias enviadas ao site (/wp-content/upload), também pode ser alterada. Essa é um prática recomendada principalmente se você deseja trabalhar com um CDN atrelado a seu conteúdo estático. A modificação por sua vez deve ocorrer em sua base de dados, altere as seguintes opções:

upload_path – Caminho da pasta escolhida a ser percorrido pelo WordPress para manipular as mídias enviadas;

upload_path_url – URL de acesso a referida pasta.

Recomenda-se realizar essa mudança de diretório antes de iniciar o trabalho com o conteúdo do site propriamente dito; do contrário você precisará alterar as URL’s já inseridas em seu banco de dados (post_content, guid, etc), redirecionar os links indexados por buscadores (eventualmente com o uso de .htaccess) e checar eventuais endereços conflitantes; o que possivelmente lhe dará muito trabalho.

Cookies

Definir o domínio de atuação de seus cookies pode ser interessante para quem utiliza uma configuração de domínio diferenciada; por exemplo (como mostrado no tópico anterior), adotar sub-domínios para servir conteúdo estático, as mídias enviadas ao WordPress. Para evitar que os Cookies sejam enviados a cada solicitação do sub-domínio, defina o cookie domain apenas para o domínio principal.

define( 'COOKIE_DOMAIN', 'dominio.com.br' );

Resolvendo o problema de memória

A definição do limite de memória para a sua aplicação pode causar um problema muito comum de ser visto entre os utilizadores finais do WordPress, o estouro da memória alocada. Por alguma razão (plugins, tema em uso, mídias enviadas, etc) a capacidade de memória disponível configurada a partir do PHP, está sendo insuficiente. Uma solução para esse problema é aumentar o limite de memória no wp-config.php.

define('WP_MEMORY_LIMIT', '64M'); // Quantidade em Megabytes

Trabalhando com Cache

Habilite o cache do CMS para melhorar o desempenho do site em questão.

define( 'WP_CACHE', true );

Feito isso o trabalho de controle de cache estará ativo, porém para executá-lo é preciso que você defina por conta própria as rotinas responsáveis para isso em um arquivo drop-in do WordPress. Crie um arquivo com o nome advanced-cache.php e o coloque dentro de /wp-content. A partir desse arquivo você poderá executar suas instruções a fim de gerenciar o cache de seu projeto.

Análise de consultas MySQL

Através do arquivo de configuração, é possível informar ao WordPress que armazene as queries a serem executadas pelo MySQL. As informações das consultas, origem da chamada e o tempo de execução de cada query é armazenada em um array; possibilitando assim que posteriormente você analise essa matriz e consiga otimizar o seu banco de dados.

define( 'SAVEQUERIES', true );

As consultas ficam salvas dentro do objeto global $wpdb, na propriedade queries.

<?php
if ( current_user_can( 'administrator' ) ) {
    global $wpdb;
    echo "<pre>";
    print_r( $wpdb->queries );
    echo "</pre>";
} ?>

Fique atento a esse tipo de verificação de consultas, pois o mesmo afeta o desempenho do seu sistema. Ative esse comportamento apenas em ambiente de desenvolvimento, a fim de aprimorar seu código, reduzir chamadas; mas evite deixá-lo ativo em produção.

Boas práticas

Como você pode verificar existem muitas variações de constantes que podem ser aplicados a depender de cada projeto no qual está sendo feito o trabalho. Os itens descritos acima demonstram como configurar de fato sua aplicação em busca de melhores resultados. A seguir o próximo parágrafo você verá como personalizar e otimizar o uso do WordPress pelos usuários (administradores, editores, autores, contribuidores, assinantes e todas as demais permissões personalizadas) e manter o WordPress em pleno funcionamento.

WordPress Upgrade Constants

Conheça agora as constantes que gerenciam as atualizações e instalações de temas e plugins através da Dashboard. Para corrigir problemas de atualização, você pode adotar algumas constantes que podem ser necessárias.

  • FS_METHOD – Método pelo qual será feita a manipulação dos arquivos, pode ser definido como direct, ssh2, ftpext e ftpsockets. Recomenda-se alterar o modo padrão do sistema de arquivos através dessa constante, apenas se estiver com problemas ao realizar atualizações;
  • FTP_BASE – Raiz da instalação do WordPress;
  • FTP_CONTENT_DIR – Pasta wp-content da sua instalação o WordPress;
  • FTP_PLUGIN_DIR – Pasta que contém os plugins do seu WordPress;
  • FTP_PUBKEY – Chave pública SSH;
  • FTP_PRIKEY – Chave privada SSH;
  • FTP_USER – Nome de um usuário FTP ou SSH;
  • FTP_PASS – Senha para o usuário definido em FTP_USER. Se você estiver usando autenticação de chave pública SSH poderá omitir essa constante;
  • FTP_HOST – Nome da máquina combinado a porta para o seu servidor SSH / FTP. A porta FTP padrão é 21 e a porta SSH padrão é 22. Estes não precisam ser mencionados;
  • FTP_SSL – Valor boleano para definir o uso de SSL.

Definir o uso do WP Cron

Diferentemente do cron nativo dos servidores, o WP Cron é executado via requisições de HTTP e somente mediante acesso ao site; isso quer dizer que mesmo se existir um evento agendado para ser executado uma vez ao dia, caso o site não tenha acessos durante esse dia, nada acontecerá. Conhecido tal comportamento você pode optar por não utilizar o cron do WordPress e partir para uma solução própria:

define( 'DISABLE_WP_CRON', true );

Saiba no entanto que o agendamento de posts e outras rotinas nativas do WordPress deixarão de funcionar como esperado, a menos que você configure-os para rodar em intervalos regulares (recomenda-se 15 minutos em geral).

wget -q -O - http://yourwebsite.com/wp-cron.php?doing_wp_cron >/dev/null 2>&1

Desabilite o Editor

A configuração abaixo impossibilita que os códigos do Tema, assim como os de plugins; sejam alterados por meio do Editor (via Dashboard). Desse modo você garante que ninguém sem o conhecimento necessário irá afetar negativamente o seu projeto

define( 'DISALLOW_FILE_EDIT', true );

Instalação e atualização automática para Plugins e Themes

Em algumas circunstâncias é possível que você tenha alterado o código-fonte de algum plugin ou de um tema que tenha obtido via repositório oficial. Com a atualização automática dos recursos você pode ter sua customização perdida; por isso e a fim de evitar transtornos, desabilite a atualização automática.

define( 'DISALLOW_FILE_MODS', true );

Atualização do WordPress

Impeça que o WordPress seja atualizado automaticamente quando houver mudança/diferença entre a versão instalada e a última disponível.

define( 'AUTOMATIC_UPDATER_DISABLED', true );

Atualização silenciosa do core

Com o objetivo de melhorar a segurança e experiência geral dentro do CMS, diversos updates do core do WordPress são realizadas sem que você note. Essa atualização pode ser controlada e permitida de forma consciente.

// desabilita as atualizações
define( 'WP_AUTO_UPDATE_CORE', false );
// permite todo tipo de atualização, 'minor' e 'major'
define( 'WP_AUTO_UPDATE_CORE', true );
// especifica o tipo de atualização permitida
define( 'WP_AUTO_UPDATE_CORE', 'minor' );