Como descobrir o caminho onde o WordPress foi instalado para include e require

Rate this post

A casos onde precisamos incluir algum arquivo do CMS WordPress em nosso próprio script PHP. Por exemplo, você pode precisar incluir o wp-blog-header.php para ter acesso a várias informações, constantes, funções e recursos do WP. A ideia aqui refere-se para os casos onde você esteja criando um script separado do WordPress, pois como bem sabemos, quando se está criando plugins ou funções no arquivo functions.php, não faz-se necessário incluir o cabeçalho do CMS.

Para ilustrar melhor, suponhamos que você crie um script php que inclua o cabeçalho do WordPress para poder criar posts e que tal script esteja dentro de uma pasta chamada /scripts/. Neste caso, vejamos algumas idéias de Como descobrir o caminho onde o WordPress foi instalado para include e require.

Como descobrir o caminho onde o WordPress foi instalado para include e require

Como descobrir o caminho onde o WordPress foi instalado para include e require

Creio que a maioria dos programadores vai logo pensar em utilizar os dois pontos (..) no include ou require. O código ficaria assim:

require("../wp-blog-header.php");

A priori, isso funciona normal, mas caso você mova o teu script para outro subdiretório, o código irá falhar. Por exemplo, se tu colocar o script dentro de uma subpasta, ficando com o caminho ‘/scripts/faz-algo/’, deverá inserir mais dois pontos (../..) para ter acesso ao wp-blog-header.php.

Como Descobrir o Caminho Absoluto do WordPress: Ideia 02

A ideia 01, vista anteriormente, pode se tornar bastante tediosa, uma vez que você deverá sempre estar atualizando os dois pontos caso mova o teu script. Creio que boa parte dos programadores PHP já esteja pensando em utilizar o $_SERVER[‘DOCUMENT_ROOT’]. Ficaria assim:

require($_SERVER['DOCUMENT_ROOT'] . "wp-blog-header.php");

Isso funciona perfeitamente, mas há um porém… Isto só funciona quando o WordPress foi instalado no diretório público principal, que geralmente é o WWW ou PUBLIC_HMTL. Se o WordPress tiver sido instalado em um subdiretório, como por exemplo: /blog ou /blog/meu-blog/, o require não o encontrará.

Como Descobrir o Caminho Absoluto do WordPress: Ideia 03

Como as duas ideias anteriores possuem falhas, resolvi criar uma função para obter o caminho absoluto da instalação do WordPress. Veja o código abaixo, comento depois:

function anderson_get_wordpress_path(){
	
	$file = 'wp-blog-header.php';

	$_SERVER['DOCUMENT_ROOT'] = substr($_SERVER['DOCUMENT_ROOT'],-1,1) !='/'?$_SERVER['DOCUMENT_ROOT'] . '/':$_SERVER['DOCUMENT_ROOT'];

	if(is_file($_SERVER['DOCUMENT_ROOT'] . $file)) return $_SERVER['DOCUMENT_ROOT'];
	
	//Tenta encontrar em todos os subdiretórios
	$paths = explode('/',$_SERVER['PHP_SELF']);

	array_shift($paths);
	array_pop($paths);
	
	$rel_path = '';
	
	foreach($paths as $path){
			
		$rel_path .= $path . '/';
		
		if(is_file($_SERVER['DOCUMENT_ROOT'] . $rel_path . $file)) return $_SERVER['DOCUMENT_ROOT'] . $rel_path;
	
	}

	return null;
	
}

$wp_path = anderson_get_wordpress_path();

require($wp_path .  'wp-blog-header.php');

Creio que a função é de fácil entendimento, mas vamos dar uma pequena explanada nela:

  1. Primeiro de tudo, verifico se o arquivo wp-blog-header.php exite no diretório principal com if(is_file($_SERVER[‘DOCUMENT_ROOT’] . $file)), caso exista, significa que o WordPress foi instalado no diretório principal e então retorno este diretório, evitando perca de tempo com o resto da função.
  2. Caso o script continue, significa que o WordPress foi instalado em um subdiretório. A partir daí, coloco todos os subdiretórios até o arquivo que está executando a função, dentro de um array com o código $paths = explode(‘/’,$_SERVER[‘PHP_SELF’]);
  3. Por fim, percorro todos os subdiretórios até o diretório onde está o arquivo que chamou a função, sempre procurando por wp-blog-header.php em cada um deles, com foreach($paths as $path). Quando o arquivo é encontrado, monto o caminho absoluto e retorno-o na função.
    1. Vantagens deste Script:

      A) Se você mover o script para qualquer nível de subdiretório, ele funcionará sem precisar fazer nenhuma modificação
      B) Se o WordPress tiver sido instalado em qualquer nível de subdiretório, o script funcionará sem precisar fazer nenhuma modificação

      Conclusão

      Não te esqueça que esta função é útil nos casos onde você quer incluir algum arquivo do WordPress que esteja no diretório de instalação principal em um script separado. Para quem vai criar um plugin ou função no arquivo functions.php do Tema, o WordPress já oferece a constante ABSPATH que contém exatamente o caminho absoluto da instalação.

      Veja uma breve lista de Constantes que representam diretórios importantes:

      ABSPATH: Diretório absoluto onde o WP foi instalado
      WPINC: Define o nome da pasta de inclusão
      WP_CONTENT_DIR: Caminho Absoluto do diretório de conteúdo
      WP_PLUGIN_DIR: Caminho absoluto do diretório de plugins
      TEMPLATEPATH: Caminho absoluto do diretório de temas do CMS.

      Veja uma lista de constantes mais completa neste url: Constantes do WordPress

      Então não queira reinventar a roda, okay?

      Até o próximo artigo aqui no blog Fazer Site.

2 respostas a Como descobrir o caminho onde o WordPress foi instalado para include e require

Deixe uma resposta

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *