Respuesta tardía
Cómo incluir sus archivos de la manera correcta:
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 mismo funciona en los complementos también.
Cómo obtener el camino correcto o URi
También eche un vistazo a las funciones de la API del sistema de archivos 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.
Cómo reducir el número de include/require
Si necesita recuperar todos de un directorio, vaya con
foreach ( glob( 'path/to/folder/*.php' ) as $file )
include $file;
Tenga en cuenta que esto ignora las fallas (quizás buenas para uso de producción) / archivos no cargables.
Para modificar este comportamiento, es posible que desee utilizar una configuración diferente durante el desarrollo:
$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: enfoque OOP / SPL
Cuando acabo de regresar y vi que esta respuesta está ganando cada vez más votos, pensé que podría mostrar cómo lo estoy haciendo hoy en día, en un mundo con PHP 5.3+. El siguiente ejemplo carga todos los archivos de una subcarpeta de temas llamada src/
. Aquí es donde tengo mis bibliotecas que manejan ciertas tareas como menús, imágenes, etc. Ni siquiera tiene que preocuparse por el nombre a medida que se carga cada archivo. Si tiene otras subcarpetas en este directorio, se ignorarán.
El \FilesystemIterator
es el supercedor supercedor de PHP 5.3+ sobre el \DirectoryIterator
. Ambos son parte del PHP SPL. Aunque PHP 5.2 hizo posible desactivar la extensión SPL incorporada (menos del 1% de todas las instalaciones lo hicieron), la SPL ahora es parte del núcleo de 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, mientras aún era compatible con PHP 5.2.x, utilicé la siguiente solución: un \FilterIterator
en el directorio src/Filters
para recuperar solo archivos (y no puntos de carpetas) y un \DirectoryIterator
para hacer el bucle y cargando.
namespace Theme;
use Theme\Filters\IncludesFilter;
$files = new IncludesFilter( new \DirectoryIterator( __DIR__.'/src' ) );
foreach ( $files as $file )
{
include_once $files->current()->getRealPath();
}
El \FilterIterator
fue tan fácil como eso:
<?php
namespace Theme\Filters;
class IncludesFilter extends \FilterIterator
{
public function accept()
{
return
! $this->current()->isDot()
and $this->current()->isFile()
and $this->current()->isReadable();
}
}
Además de que PHP 5.2 está muerto / EOL por ahora (y 5.3 también), existe el hecho de que hay más código y un archivo más en el juego, por lo que no hay razón para seguir adelante con PHP 5.2.x .
Resumido
Se puede encontrar un artículo aún más detallado en aquí en WPKrauts .
EDIT La forma obviamente correcta es usar el código namespace
d, preparado para PSR-4 carga automática colocando todo en el directorio apropiado que ya está definido a través del espacio de nombres. Luego solo use Compositor y un composer.json
para administrar sus dependencias y dejar que genere automáticamente su cargador automático de PHP (que importa automáticamente un archivo simplemente llamando %código%). Ese es el estándar de facto en el mundo de PHP, la forma más fácil de ir y aún más pre-automatizado y simplificado por WP Starter .