1. Hat dies sichtbare Auswirkungen auf die WP-Leistung?
Wenn dies einen echten Einfluss auf einige kleine Dateien haben würde, hätte dies einen Einfluss, der geringer ist als der von WP: PHP und der Serverleistung. Hat es wirklich einen Einfluss? Nicht wirklich. Sie können aber trotzdem einfach anfangen, Leistungstests selbst durchzuführen.
2. Ist es besser, alles in einer Datei (functions.php) zu speichern?
Jetzt lautet die Frage "Was ist besser?" Von der gesamten Ladezeit der Datei (en)? Aus Sicht der Dateiorganisation? Auf jeden Fall macht es keinen Unterschied. Tun Sie dies so, dass Sie nicht den Überblick verlieren und das Ergebnis auf eine für Sie angenehme Weise erhalten können.
3. Wie gehe ich am besten vor?
Was ich normalerweise tun ist einfach irgendwo Einhaken ( plugins_loaded
, after_setup_theme
etc. - hängt davon ab , was Sie brauchen) und dann verlangen , daß sie einfach alle:
foreach ( glob( plugin_dir_path( __FILE__ ) ) as $file )
require_once $file;
Wie auch immer, Sie können es auch etwas komplizierter und flexibler gestalten. Schauen Sie sich dieses Beispiel an:
<?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 ist eine Klasse, die im Grunde dasselbe tut (benötigt PHP 5.3+). Der Vorteil ist, dass es etwas feiner strukturiert ist, sodass Sie ganz einfach Dateien aus Ordnern laden können, die Sie für eine bestimmte Aufgabe benötigen:
$fileLoader = new WCM\FilesLoader( 'assets/php' );
foreach ( $fileLoader as $file )
$fileLoader->loadFile( $file );
Aktualisieren
Da wir in einer neuen Welt nach PHP 5.2 leben, können wir die \FilterIterator
. Beispiel der kürzesten Variante:
$files = new \FilesystemIterator( __DIR__.'/src', \FilesystemIterator::SKIP_DOTS );
foreach ( $files as $file )
{
/** @noinspection PhpIncludeInspection */
! $files->isDir() and include $files->getRealPath();
}
Wenn Sie sich an PHP v5.2 halten müssen, können Sie immer noch mit \DirectoryIterator
und so ziemlich dem gleichen Code arbeiten.
loadFile()
oder aufrufenrequire_once
. Bieten Sie also einfach so etwas wie Themenunterstützung an, bei der der Benutzer selbstadd_theme_support()/remove_*()
nur die gewünschten Module verwenden kann. Dann verwenden Sie einfach das Ergebnis für$loadFile()
oderglob()
. Übrigens, wenn dies Ihre Lösung war, markieren Sie sie bitte als solche. Vielen Dank.Ich habe @kaiser überarbeitet und antworte ein wenig auf meine Bedürfnisse - dachte, ich teile es. Ich wollte mehr Optionen, diese werden im Code und im folgenden Verwendungsbeispiel erklärt.
Code:
Anwendungsbeispiel:
quelle