필자는 WordPress에서 사용할 PHP로 작성된 오토로더 클래스에 이상한 문제가 있습니다.PHP 자동로드 및 워드 프레스
핵심 개념은 자녀 테마, 부모 테마 또는 플러그인인지 여부에 관계없이 클래스를로드해야한다는 것입니다. 이름을 기반으로 클래스를 찾아야합니다 (폴더 구조와 관련 있음). CoreTheme_Folder_SubFolder_ClassName(){}
= CoreTheme/Folder/SubFolder/ClassName.php
하위 테마 및 상위 테마에서 잘 작동합니다. 하위 테마에는 function.php라는 상위 테마가 포함되어 있습니다. autoloader를 사용하여 자식 테마의 부모 테마 클래스를 호출 할 수 있으며 require_once()
의 무리가없는 경우
플러그인에서 동일한 개념을 수행 할 때 문제가 발생합니다. of the zend)를 테마의 루트에 포함 시키십시오. 해당 테마가 활성화되어 있고 플러그인에서 오토로더를 설정하면 "이 오토로더의 두 인스턴스가 있습니다. 뭐하시는 겁니까?"라고 말하면서 speles를 실행합니다. 비활성화하면 그때 테마로 말했다. 자동 로더를 플러그인에 넣으면, 배 명명법 표준을 사용하여 만드는 모든 클래스를 찾을 수 없습니다.
WordPress와 PHP를 모두 더 잘 이해하고있는 분에게 저의 질문입니다. 필자의 테마, 하위 테마 또는 플러그인에 상관없이 필자가 찾고있는 클래스를 항상 찾을 수 있도록 필자의 오토로더를 어떻게 만듭니 까?
아래 코드는 자동 로더 클래스입니다. 당신이 꺼낼 경우 : plugin_dir_path(__FILE__)
그러면 자동 로더가 테마와 해당 하위 테마의 모든 클래스를로드합니다.
class AisisCore_Loader_AutoLoader{
protected static $_instance;
protected static $_directories;
public function get_instance(){
if(null == self::$_instance){
self::$_instance = new self();
}
self::$_directories = array(
get_template_directory(),
get_stylesheet_directory(),
plugin_dir_path(__FILE__),
);
return self::$_instance;
}
public function reset_instance(){
self::$_instance = null;
}
public function register_auto_loader(){
spl_autoload_register(array($this, 'load_class'));
}
public function load_class($class){
$path = str_replace('_', '/', $class);
foreach(self::$_directories as $directories){
if(file_exists($directories . '/' . $path . '.php')){
require_once($directories . '/' . $path . '.php');
}
}
}
}
이 클래스를 통해 부모 functions.php에서 인스턴스화 :
// Load the autoloader.
require_once(get_template_directory() . '/AisisCore/Loader/AutoLoader.php');
// Setup the autoloader.
$auto_loader = AisisCore_Loader_AutoLoader::get_instance();
$auto_loader->register_auto_loader();
그리고 자식 테마 당신이해야 할 모든은 다음과 같습니다
require_once(TEMPLATEPATH . '/functions.php');
이 오토로더 수 있습니다 자녀와 부모 모두를 대상으로 일한다. 주된 문제는 플러그인을 만들 때 플러그인의 이름 루트 디렉토리에 프레임 워크 사본을 넣는 것입니다 : plugins/myplugin/AisisCore/
과 테마 (부모) 중 하나 Themes/MyTheme/AisisCore
그래서 나는 그것이 왜곡 될지 알 수 있습니다 , 거기에 방법이 있습니까?
'plugin_dir_path (__ FILE __)'이 틀릴 수도 있습니다. 또한 싱글 톤을 필요로하지 않고 디렉토리를 추가 할 수있게 허용하면 실행시 새 플러그인 또는 테마 디렉토리를 등록 할 수 있습니다. 대신 Wordpress에서 잘 작동하는 추상 클래스를 사용하십시오. @hakre가 [귀하의 이전 질문] (http://stackoverflow.com/q/15534211/2261774)에서 제안했습니다. –
실제로 함수가 WordPress에 명시된 바와 같이 정확합니다. 전체 앱이 충돌하지 않으면 클래스의 구현이 올바르게 작동합니다. 즉, 추상 클래스의 이점은 볼 수 없지만 그 점에 대해 감사합니다.). 여기서 문제는 액티브 한 테마가 AisisCore 라이브러리를 가지고 있다면 그것이 괴롭히는 것입니다. 여기서 문제는 : http://wordpress.stackexchange.com/questions/95742/am-i-not-understanding-plugins는 플러그인의 플러그인 디렉토리에 아무것도 표시하지 않는 자동 로더에 대한 것입니다. – TheWebs
오토로더가 플러그인 또는 테마 내부에서 초기화되면 조건부로 확인하십시오. 이 문제를 조금 해결해야합니다 (그렇게하면서 유용한 정보를 배우게됩니다). 그리고'plugin_dir_path (__ FILE __)'은 faker입니다. '__FILE__ '이 무엇인지 조심하십시오. 소스를보십시오 : http://core.trac.wordpress.org/browser/tags/3.5.1/wp-includes/plugin.php#L577 –