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 complementos también.
Cómo obtener el camino correcto o URi
También eche un vistazo a las funciones 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 los archivos 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 alterar 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á recibiendo cada vez más votos positivos, pensé que podría mostrar cómo lo estoy haciendo hoy en día, en un mundo 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 ya que cada archivo se carga. Si tiene otras subcarpetas en este directorio, se ignorarán.
El \FilesystemIterator
es el PHP 5.3+ supercedor sobre el \DirectoryIterator
. Ambos son parte del PHP SPL. Si bien PHP 5.2 hizo posible desactivar la extensión SPL integrada (menos del 1% de todas las instalaciones lo hicieron), el 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, aunque todavía soportaba PHP 5.2.x, usaba la siguiente solución: A \FilterIterator
en el src/Filters
directorio para recuperar solo archivos (y no punteros de punto de carpetas) y a \DirectoryIterator
para hacer el bucle y la carga.
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 es más código y un archivo más en el juego, por lo que no hay razón para seguir con el último y admitir PHP 5.2.x.
Resumió
Un artículo aún más detallado se puede encontrar aquí en WPKrauts .
EDITAR La forma obviamente correcta es usar el namespace
código d, preparado para la carga automática de PSR-4 poniendo todo en el directorio apropiado que ya está definido a través del espacio de nombres. Luego, use Composer y a composer.json
para administrar sus dependencias y deje que cree automáticamente su autocargador PHP (que importa automáticamente un archivo simplemente llamando use \<namespace>\ClassName
). Ese es el estándar de facto en el mundo PHP, el camino más fácil y aún más pre-automatizado y simplificado por WP Starter .