Réponse tardive
Comment inclure vos fichiers correctement:
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' );
La même chose fonctionne aussi dans les plugins.
Comment obtenir le bon chemin ou URi
Jetez également un coup d'œil aux fonctions de l'API du système de fichiers telles que:
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.
Comment réduire le nombre de include/require
Si vous devez récupérer tous les fichiers d'un répertoire, allez avec
foreach ( glob( 'path/to/folder/*.php' ) as $file )
include $file;
Gardez à l'esprit que cela ignore les échecs (peut-être bons pour une utilisation en production) / les fichiers non chargeables.
Pour modifier ce comportement, vous pouvez utiliser une configuration différente au cours du développement:
$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;
Edit: approche OOP / SPL
Alors que je revenais juste et que je voyais que cette réponse recevait de plus en plus de votes positifs, j'ai pensé montrer comment je le fais aujourd'hui - dans un monde PHP 5.3+. L'exemple suivant charge tous les fichiers d'un sous-dossier de thèmes nommé src/. C'est là que mes bibliothèques gèrent certaines tâches telles que les menus, les images, etc. Vous n'avez même pas à vous soucier du nom car chaque fichier est chargé. Si vous avez d'autres sous-dossiers dans ce répertoire, ils sont ignorés.
Le \FilesystemIteratorest du PHP de supercedor sur \DirectoryIterator. Les deux font partie du PHP SPL. Bien que PHP 5.2 ait permis de désactiver l'extension SPL intégrée (moins de 1% de toutes les installations l'ont fait), le SPL fait maintenant partie du noyau PHP.
<?php
namespace Theme;
$files = new \FilesystemIterator( __DIR__.'/src', \FilesystemIterator::SKIP_DOTS );
foreach ( $files as $file )
{
/** @noinspection PhpIncludeInspection */
! $files->isDir() and include $files->getRealPath();
}
Auparavant, alors que je soutenais encore PHP 5.2.x, j’utilisais la solution suivante: A \FilterIteratordans le src/Filtersrépertoire pour récupérer uniquement les fichiers (et non les pointeurs de dossiers) et a \DirectoryIteratorpour effectuer la mise en boucle et le chargement.
namespace Theme;
use Theme\Filters\IncludesFilter;
$files = new IncludesFilter( new \DirectoryIterator( __DIR__.'/src' ) );
foreach ( $files as $file )
{
include_once $files->current()->getRealPath();
}
Le \FilterIteratorétait aussi simple que cela:
<?php
namespace Theme\Filters;
class IncludesFilter extends \FilterIterator
{
public function accept()
{
return
! $this->current()->isDot()
and $this->current()->isFile()
and $this->current()->isReadable();
}
}
En plus de PHP 5.2 mort / EOL maintenant (et 5.3 également), il y a plus de code et un fichier de plus dans le jeu, il n'y a donc aucune raison de continuer avec ce dernier et de supporter PHP 5.2.x.
Résumé
Un article encore plus détaillé peut être trouvé ici sur WPKrauts .
EDIT La manière évidente consiste à utiliser le namespacecode d, préparé pour le chargement automatique du PSR-4, en plaçant tout dans le répertoire approprié déjà défini via l’espace de nom. Ensuite, utilisez simplement Composer et a composer.jsonpour gérer vos dépendances et laissez-le construire automatiquement votre autochargeur PHP (qui importe automatiquement un fichier en appelant simplement use \<namespace>\ClassName). C'est le standard de facto dans le monde PHP, le moyen le plus simple et encore plus pré-automatisé et simplifié par WP Starter .