1. ¿Esto tiene un efecto en el rendimiento de WP de manera visible?
IF tendría un efecto real en algunos archivos pequeños, entonces tendría un efecto que tiene un impacto menor que WP: PHP y el rendimiento del servidor. ¿Realmente tiene un efecto? Realmente no. Pero todavía puedes simplemente comenzar a hacer pruebas de rendimiento.
2. ¿Es mejor mantenerlo todo dentro de 1 archivo (functions.php)
Ahora la pregunta es "¿Qué es mejor"? ¿Del tiempo total de carga de los archivos? ¿Desde el punto de vista de la organización de archivos? De todos modos, no hace ninguna diferencia. Hágalo de una manera que no pierda la visión general y pueda mantener el resultado de una manera que sea agradable para usted.
3. ¿cuál es la mejor manera de hacerlo?
Lo que normalmente hago es simplemente enlazar en algún lugar de ( plugins_loaded
, after_setup_theme
, etc. - depende de lo que necesites) y luego solo requiere que todos:
foreach ( glob( plugin_dir_path( __FILE__ ) ) as $file )
require_once $file;
De todos modos, también puedes hacerlo un poco más complicado y flexible. Eche un vistazo a ese ejemplo:
<?php
namespace WCM;
defined( 'ABSPATH' ) OR exit;
class FilesLoader implements \IteratorAggregate
{
private $path = '';
private $files = array();
public function __construct( $path )
{
$this->setPath( $path );
$this->setFiles();
}
public function setPath( $path )
{
if ( empty( $this->path ) )
$this->path = \plugin_dir_path( __FILE__ ).$path;
}
public function setFiles()
{
return $this->files = glob( "{$this->getPath()}/*.php" );
}
public function getPath()
{
return $this->path;
}
public function getFiles()
{
return $this->files;
}
public function getIterator()
{
$iterator = new \ArrayIterator( $this->getFiles() );
return $iterator;
}
public function loadFile( $file )
{
include_once $file;
}
}
Es una clase que básicamente hace lo mismo (necesita PHP 5.3+). El beneficio es que es un poco más detallado, por lo que puede cargar archivos de carpetas que necesita para realizar una tarea específica:
$fileLoader = new WCM\FilesLoader( 'assets/php' );
foreach ( $fileLoader as $file )
$fileLoader->loadFile( $file );
Actualizar
Como vivimos en un nuevo mundo de PHP v5.2, podemos hacer uso de \FilterIterator
. Ejemplo de la variante más corta:
$files = new \FilesystemIterator( __DIR__.'/src', \FilesystemIterator::SKIP_DOTS );
foreach ( $files as $file )
{
/** @noinspection PhpIncludeInspection */
! $files->isDir() and include $files->getRealPath();
}
Si tienes que mantenerte con PHP v5.2, entonces puedes seguir con \DirectoryIterator
y prácticamente el mismo código.