遅い答え
ファイルを正しい方法で含める方法:
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' );
同じことがプラグインでも機能します。
正しいパスまたはURiを取得する方法
次のようなファイルシステムAPI関数もご覧ください。
home_url()
plugin_dir_url()
plugin_dir_path()
admin_url()
get_template_directory()
get_template_directory_uri()
get_stylesheet_directory()
get_stylesheet_directory_uri()
- 等
の数を減らす方法 include/require
ディレクトリからすべてのファイルを取得する必要がある場合は、
foreach ( glob( 'path/to/folder/*.php' ) as $file )
include $file;
これは障害(本番環境での使用に適している可能性がある)/ロード不可のファイルを無視することに注意してください。
この動作を変更するには、開発中に別の設定を使用することをお勧めします。
$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;
編集:OOP / SPLアプローチ
私が戻ってきて、この答えがますます多くの賛成票を得ているのを見たとき、私は最近、PHP 5.3+の世界でそれをどのようにやっているかを示すかもしれないと思いました。次の例では、という名前のテーマサブフォルダーからすべてのファイルをロードしますsrc/
。ここには、メニューや画像などの特定のタスクを処理するライブラリがあります。すべてのファイルがロードされるので、名前を気にする必要さえありません。このディレクトリに他のサブフォルダがある場合、それらは無視されます。
\FilesystemIterator
PHP 5.3+あるsupercedorオーバー\DirectoryIterator
。どちらもPHP SPLの一部です。PHP 5.2では、組み込みのSPL拡張機能をオフにすることができましたが(すべてのインストールの1%未満でした)、SPLはPHPコアの一部になりました。
<?php
namespace Theme;
$files = new \FilesystemIterator( __DIR__.'/src', \FilesystemIterator::SKIP_DOTS );
foreach ( $files as $file )
{
/** @noinspection PhpIncludeInspection */
! $files->isDir() and include $files->getRealPath();
}
以前はPHP 5.2.xをサポートしていましたが、次のソリューションを使用し\FilterIterator
ました。src/Filters
ディレクトリ内のA (フォルダーのドットポインターではなく)のみを取得\DirectoryIterator
し、ループとロードを実行します。
namespace Theme;
use Theme\Filters\IncludesFilter;
$files = new IncludesFilter( new \DirectoryIterator( __DIR__.'/src' ) );
foreach ( $files as $file )
{
include_once $files->current()->getRealPath();
}
それ\FilterIterator
はそれと同じくらい簡単でした:
<?php
namespace Theme\Filters;
class IncludesFilter extends \FilterIterator
{
public function accept()
{
return
! $this->current()->isDot()
and $this->current()->isFile()
and $this->current()->isReadable();
}
}
PHP 5.2がもう死んでいる(EOLが5.3である)ことを除けば、ゲーム内にはコードとファイルがもう1つあるという事実があるため、PHP 5.2.xをサポートする理由はありません。
要約する
さらに詳細な記事は、WPKrautsにあります。
編集明らかに正しい方法は、ネームスペースを介してすでに定義されている適切なディレクトリにすべてを置くことによりnamespace
、PSR-4オートロード用に準備されたdコードを使用することです。次に、Composerとa composer.json
を使用して依存関係を管理し、PHPオートローダー(を呼び出すだけでファイルを自動的にインポートします)を自動ビルドしますuse \<namespace>\ClassName
。これは、PHPの世界の事実上の標準であり、最も簡単な方法であり、WP Starterによって事前に自動化および簡素化されています。