Späte Antwort
So fügen Sie Ihre Dateien richtig ein:
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' );
Das gleiche funktioniert auch in Plugins.
Wie man den richtigen Weg oder URi findet
Schauen Sie sich auch die Funktionen der Dateisystem-API an:
home_url()
plugin_dir_url()
plugin_dir_path()
admin_url()
get_template_directory()
get_template_directory_uri()
get_stylesheet_directory()
get_stylesheet_directory_uri()
- usw.
So reduzieren Sie die Anzahl der include/require
Wenn Sie alle Dateien aus einem Verzeichnis holen müssen, gehen Sie mit
foreach ( glob( 'path/to/folder/*.php' ) as $file )
include $file;
Beachten Sie, dass dies Fehler ignoriert (möglicherweise gut für die Produktion) / nicht ladbare Dateien.
Um dieses Verhalten zu ändern, möchten Sie möglicherweise während der Entwicklung eine andere Konfiguration verwenden:
$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;
Edit: OOP / SPL-Ansatz
Als ich gerade zurückkam und sah, dass diese Antwort immer mehr positive Stimmen erhielt, dachte ich, ich könnte zeigen, wie ich es heutzutage mache - in einer PHP 5.3+ Welt. Im folgenden Beispiel werden alle Dateien aus einem Themenunterordner mit dem Namen geladen src/
. Hier habe ich meine Bibliotheken, die bestimmte Aufgaben wie Menüs, Bilder usw. erledigen. Sie müssen sich nicht einmal um den Namen kümmern, wenn jede einzelne Datei geladen wird. Wenn Sie andere Unterordner in diesem Verzeichnis haben, werden diese ignoriert.
Das \FilesystemIterator
ist der PHP 5.3+ Supercedor über dem \DirectoryIterator
. Beide sind Teil der PHP SPL. Während PHP 5.2 es ermöglichte, die eingebaute SPL-Erweiterung zu deaktivieren (weniger als 1% aller Installationen haben dies getan), ist die SPL jetzt Teil des PHP-Kerns.
<?php
namespace Theme;
$files = new \FilesystemIterator( __DIR__.'/src', \FilesystemIterator::SKIP_DOTS );
foreach ( $files as $file )
{
/** @noinspection PhpIncludeInspection */
! $files->isDir() and include $files->getRealPath();
}
Während ich PHP 5.2.x noch unterstützte, verwendete ich die folgende Lösung: A \FilterIterator
im src/Filters
Verzeichnis, um nur Dateien (und keine Punktzeiger von Ordnern) abzurufen, und a \DirectoryIterator
, um die Schleife zu bilden und zu laden.
namespace Theme;
use Theme\Filters\IncludesFilter;
$files = new IncludesFilter( new \DirectoryIterator( __DIR__.'/src' ) );
foreach ( $files as $file )
{
include_once $files->current()->getRealPath();
}
Das \FilterIterator
war so einfach:
<?php
namespace Theme\Filters;
class IncludesFilter extends \FilterIterator
{
public function accept()
{
return
! $this->current()->isDot()
and $this->current()->isFile()
and $this->current()->isReadable();
}
}
Abgesehen davon, dass PHP 5.2 bereits tot / EOL ist (und auch 5.3), gibt es die Tatsache, dass es mehr Code und eine weitere Datei im Spiel gibt, so dass es keinen Grund gibt, sich für die spätere Version zu entscheiden und PHP 5.2.x zu unterstützen.
Zusammengefasst
Ein noch ausführlicherer Artikel ist hier auf WPKrauts zu finden .
BEARBEITEN Der offensichtlich richtige Weg ist die Verwendung von namespace
d-Code, der für das automatische Laden von PSR-4 vorbereitet ist, indem alles in das entsprechende Verzeichnis gestellt wird, das bereits über den Namespace definiert ist. Verwenden Sie dann einfach Composer und a composer.json
, um Ihre Abhängigkeiten zu verwalten, und lassen Sie Ihren PHP-Autoloader automatisch erstellen (der automatisch eine Datei importiert, indem er nur aufruft use \<namespace>\ClassName
). Dies ist der De-facto-Standard in der PHP-Welt, der einfachste Weg und noch vorautomatisierter und durch WP Starter vereinfacht .