Resposta atrasada
Como incluir seus arquivos da maneira certa:
function wpse1403_bootstrap()
{
// Here we load from our includes directory
// This considers parent and child themes as well
locate_template( array( 'inc/foo.class.php' ), true, true );
}
add_action( 'after_setup_theme', 'wpse1403_bootstrap' );
O mesmo funciona em plugins também.
Como obter o caminho certo ou URi
Veja também as funções da API do sistema de arquivos, como:
home_url()
plugin_dir_url()
plugin_dir_path()
admin_url()
get_template_directory()
get_template_directory_uri()
get_stylesheet_directory()
get_stylesheet_directory_uri()
- etc.
Como reduzir o número de include/require
Se você precisar buscar todos os arquivos de um diretório, vá com
foreach ( glob( 'path/to/folder/*.php' ) as $file )
include $file;
Lembre-se de que isso ignora falhas (talvez boas para uso em produção) / arquivos não carregáveis.
Para alterar esse comportamento, convém usar uma configuração diferente durante o desenvolvimento:
$files = ( defined( 'WP_DEBUG' ) AND WP_DEBUG )
? glob( 'path/to/folder/*.php', GLOB_ERR )
: glob( 'path/to/folder/*.php' )
foreach ( $files as $file )
include $file;
Editar: Abordagem OOP / SPL
Como acabei de voltar e vi que essa resposta está ficando cada vez mais positiva, pensei em mostrar como estou fazendo isso hoje em dia - em um mundo PHP 5.3+. O exemplo a seguir carrega todos os arquivos de uma subpasta de temas denominada src/
. É aqui que tenho minhas bibliotecas que lidam com certas tarefas, como menus, imagens etc. Você nem precisa se preocupar com o nome, pois cada arquivo é carregado. Se você tiver outras subpastas nesse diretório, elas serão ignoradas.
O \FilesystemIterator
é o supercedor do PHP 5.3+ sobre o \DirectoryIterator
. Ambos fazem parte do PHP SPL. Enquanto o PHP 5.2 tornou possível desativar a extensão SPL integrada (abaixo de 1% de todas as instalações), o SPL agora faz parte do núcleo do PHP.
<?php
namespace Theme;
$files = new \FilesystemIterator( __DIR__.'/src', \FilesystemIterator::SKIP_DOTS );
foreach ( $files as $file )
{
/** @noinspection PhpIncludeInspection */
! $files->isDir() and include $files->getRealPath();
}
Anteriormente, enquanto eu ainda suportava o PHP 5.2.x, usei a seguinte solução: A \FilterIterator
no src/Filters
diretório para recuperar apenas arquivos (e não apontar pontos das pastas) e a \DirectoryIterator
para executar o loop e o carregamento.
namespace Theme;
use Theme\Filters\IncludesFilter;
$files = new IncludesFilter( new \DirectoryIterator( __DIR__.'/src' ) );
foreach ( $files as $file )
{
include_once $files->current()->getRealPath();
}
O \FilterIterator
foi tão fácil como isso:
<?php
namespace Theme\Filters;
class IncludesFilter extends \FilterIterator
{
public function accept()
{
return
! $this->current()->isDot()
and $this->current()->isFile()
and $this->current()->isReadable();
}
}
Além do PHP 5.2 estar morto / EOL até agora (e 5.3), há o fato de que há mais código e mais um arquivo no jogo, então não há razão para usar o posterior e dar suporte ao PHP 5.2.x.
Resumido
Um artigo ainda mais detalhado pode ser encontrado aqui no WPKrauts .
EDIT A maneira obviamente correta é usar o namespace
código d, preparado para o carregamento automático do PSR-4 , colocando tudo no diretório apropriado que já está definido através do namespace. Em seguida, basta usar o Composer e a composer.json
para gerenciar suas dependências e deixá-lo construir automaticamente o seu carregador automático de PHP (que importa automaticamente um arquivo apenas chamando use \<namespace>\ClassName
). Esse é o padrão de fato no mundo PHP, o caminho mais fácil e ainda mais pré-automatizado e simplificado pelo WP Starter .