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 \FilesystemIterator
est 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 \FilterIterator
dans le src/Filters
répertoire pour récupérer uniquement les fichiers (et non les pointeurs de dossiers) et a \DirectoryIterator
pour 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 namespace
code 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.json
pour 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 .