늦은 답변
올바른 방법으로 파일을 포함시키는 방법 :
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 는 폴더의 점 포인터가 아닌 파일 만 검색하고 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도), 더 많은 코드와 게임에 파일이 하나 더 있다는 사실이 있기 때문에 나중에 나아갈 필요가 없으며 PHP 5.2.x를 지원할 이유가 없습니다.
요약
더 자세한 내용은 WPKrauts에서 확인할 수 있습니다 .
편집 분명히 올바른 방법은 네임 스페이스를 통해 이미 정의 된 적절한 디렉토리에 모든 것을 넣어 PSR-4 자동로드를 namespace
위해 준비된 d 코드 를 사용 하는 것입니다. 그런 다음 Composer 와 a 를 사용하여 종속성을 관리하고 PHP 자동 로더를 자동으로 빌드하십시오 (이를 호출하여 파일을 자동으로 가져옵니다 ). WP Starter 는 PHP 세계에서 사실상의 표준이며, 가장 쉬운 방법이며 사전 자동화되고 단순화되었습니다 .composer.json
use \<namespace>\ClassName