1. Questo ha effetto sulle prestazioni del WP in modo visibile?
Se avrebbe un effetto reale su alcuni file di piccole dimensioni, avrebbe un effetto che ha un impatto inferiore a WP: PHP e le prestazioni del server. Ha davvero un effetto? Non proprio. Ma puoi semplicemente iniziare a fare test di performance da solo.
2. È meglio tenerlo tutto all'interno di 1 file (Functions.php)
Ora la domanda è "Cosa c'è di meglio"? Dal tempo complessivo di caricamento dei file? Dal punto di vista dell'organizzazione dei file? Comunque, non fa alcuna differenza. Fallo in modo da non perdere la visione d'insieme e mantenere il risultato in modo piacevole per te.
3. qual è il modo migliore per farlo?
Quello che faccio di solito è semplicemente agganciando da qualche parte in ( plugins_loaded
, after_setup_theme
, ecc - dipende da quello che ti serve) e poi semplicemente li richiedono:
foreach ( glob( plugin_dir_path( __FILE__ ) ) as $file )
require_once $file;
Ad ogni modo, puoi renderlo un po 'più complicato e flessibile. Dai un'occhiata a questo esempio:
<?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;
}
}
È una classe che fa praticamente la stessa cosa (ha bisogno di PHP 5.3+). Il vantaggio è che è un po 'più fine, quindi puoi semplicemente caricare file da cartelle che ti servono per eseguire un'attività specifica:
$fileLoader = new WCM\FilesLoader( 'assets/php' );
foreach ( $fileLoader as $file )
$fileLoader->loadFile( $file );
Aggiornare
Mentre viviamo in un nuovo mondo post PHP v5.2, possiamo fare uso di \FilterIterator
. Esempio della variante più breve:
$files = new \FilesystemIterator( __DIR__.'/src', \FilesystemIterator::SKIP_DOTS );
foreach ( $files as $file )
{
/** @noinspection PhpIncludeInspection */
! $files->isDir() and include $files->getRealPath();
}
Se devi rimanere con PHP v5.2, puoi comunque usare \DirectoryIterator
lo stesso codice e praticamente.