Risposta in ritardo
Come includere i tuoi file nel modo giusto:
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' );
Lo stesso vale anche per i plugin.
Come ottenere la strada giusta o URi
Dai un'occhiata anche alle funzioni API del file system come:
home_url()
plugin_dir_url()
plugin_dir_path()
admin_url()
get_template_directory()
get_template_directory_uri()
get_stylesheet_directory()
get_stylesheet_directory_uri()
- eccetera.
Come ridurre il numero di include/require
Se devi recuperare tutti i file da una directory vai con
foreach ( glob( 'path/to/folder/*.php' ) as $file )
include $file;
Tieni presente che ciò ignora i guasti (forse buono per l'uso in produzione) / i file non caricabili.
Per modificare questo comportamento potresti voler usare una configurazione diversa durante lo sviluppo:
$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;
Modifica: approccio OOP / SPL
Appena sono tornato e ho visto che questa risposta sta ottenendo sempre più voti, ho pensato di poter mostrare come sto andando al giorno d'oggi - in un mondo PHP 5.3+. L'esempio seguente carica tutti i file da una sottocartella temi denominata src/
. È qui che ho le mie librerie che gestiscono determinate attività come menu, immagini, ecc. Non devi nemmeno preoccuparti del nome quando viene caricato ogni singolo file. Se hai altre sottocartelle in questa directory, vengono ignorate.
Il \FilesystemIterator
è il PHP 5.3+ supercedor sopra il \DirectoryIterator
. Entrambi fanno parte di PHP SPL. Mentre PHP 5.2 ha reso possibile disattivare l'estensione SPL integrata (meno dell'1% di tutte le installazioni lo ha fatto), SPL ora fa parte del core PHP.
<?php
namespace Theme;
$files = new \FilesystemIterator( __DIR__.'/src', \FilesystemIterator::SKIP_DOTS );
foreach ( $files as $file )
{
/** @noinspection PhpIncludeInspection */
! $files->isDir() and include $files->getRealPath();
}
In precedenza, mentre supportavo ancora PHP 5.2.x, utilizzavo la seguente soluzione: A \FilterIterator
nella src/Filters
directory per recuperare solo i file (e non puntatori di cartelle) e a \DirectoryIterator
per eseguire il loop e il caricamento.
namespace Theme;
use Theme\Filters\IncludesFilter;
$files = new IncludesFilter( new \DirectoryIterator( __DIR__.'/src' ) );
foreach ( $files as $file )
{
include_once $files->current()->getRealPath();
}
È \FilterIterator
stato facile come quello:
<?php
namespace Theme\Filters;
class IncludesFilter extends \FilterIterator
{
public function accept()
{
return
! $this->current()->isDot()
and $this->current()->isFile()
and $this->current()->isReadable();
}
}
A parte PHP 5.2 ormai morto / EOL (e anche 5.3), c'è il fatto che c'è più codice e un altro file nel gioco, quindi non c'è motivo di andare con il successivo e supportare PHP 5.2.x.
Riassunto
Un articolo ancora più approfondito è disponibile qui su WPKrauts .
MODIFICA Il modo ovviamente corretto è usare il namespace
codice d, preparato per il caricamento automatico di PSR-4 mettendo tutto nella directory appropriata che è già definita tramite lo spazio dei nomi. Quindi usa Composer e a composer.json
per gestire le tue dipendenze e lascia che costruisca automaticamente il tuo caricatore automatico PHP (che importa automaticamente un file semplicemente chiamando use \<namespace>\ClassName
). Questo è lo standard di fatto nel mondo PHP, il modo più semplice di procedere e ancora più pre-automatizzato e semplificato da WP Starter .