플러그인을 개발할 때 플러그인 디렉토리를 다른 wp-content
디렉토리 에 심볼릭 링크하여 여러 버전의 WordPress에서 테스트합니다 . 파일을 한 번만 편집해야하기 때문에 훌륭하지만 플러그인의 리소스에 대한 참조를 생성하는 중요한 구성을 __FILE__
깨뜨 wp-content
립니다. 이 문제를 어떻게 해결해야합니까?
내 디렉토리 구조는 다음과 같습니다
/path/to/wordpress/development/dir/
plugin-development/
monkeyman-rewrite-analyzer/
monkeyman-rewrite-analyzer.php
js/
monkeyman-rewrite-analyzer.js
versions/
3.1/
wp-content/
plugins/
monkeyman-rewrite-analyzer
위 플러그인에 대한 심볼릭 링크
3.1-multi-dir/
wp-content/
plugins/
monkeyman-rewrite-analyzer
위 플러그인에 대한 심볼릭 링크
3.1-multi-domain/
wp-content/
plugins/
monkeyman-rewrite-analyzer
위 플러그인에 대한 심볼릭 링크
나는 자바 스크립트 파일을 대기열에하고 싶은 경우에, 나는 사용해야 plugins_url( 'monkeyman-rewrite-analyzer.js', [base file] )
하지만 사용하여 __FILE__
실제 파일 경로가되기 때문에, 여기 없어 일을 할 /path/to/wordpress/development/dir/plugin-development/monkeyman-rewrite-analyzer/monkeyman-rewrite-analyzer.php
수 없습니다, /path/to/wordpress/development/dir/versions/*/wp-content/plugins/monkeyman-rewrite-analyzer/monkeyman-rewrite-analyzer.php
워드 프레스는 첫 번째 부분을 제거하고, 워드 프레스 설치에 대한 상대 URL을 생성 할 수 있습니다.
답변
plugins_url
필터에 꼭 필요한 플러그인 후킹으로 문제를 부분적으로 해결할 수 있습니다 .
co plugin_basename()
와 같은 다른 모든 경우를 처리하지는 않습니다 register_activation_hook()
.
답변
나는 현재 WordPress 상대 파일 위치를 얻는 트릭을 사용합니다 : wp_get_active_and_valid_plugins()
파일 경로를 반환하고 그 경로를 wp_settings.php
반복하고 파일을 포함합니다 . 따라서 전역 $plugin
변수는 현재 플러그인을 참조합니다 (물론 플러그인이로드 될 때만 접두사가 붙은 전역 변수에 저장합니다).
$monkeyman_Rewrite_Analyzer_file = $plugin;
플러그인은 필수 플러그인 또는 네트워크 플러그인으로로드 할 수 있으며 이러한 루프는 다른 변수 이름을 사용 하므로 전체 코드는 다음과 같습니다.
$monkeyman_Rewrite_Analyzer_file = __FILE__;
if ( isset( $mu_plugin ) ) {
$monkeyman_Rewrite_Analyzer_file = $mu_plugin;
}
if ( isset( $network_plugin ) ) {
$monkeyman_Rewrite_Analyzer_file = $network_plugin;
}
if ( isset( $plugin ) ) {
$monkeyman_Rewrite_Analyzer_file = $plugin;
}
폴백은 여전히 남아 __FILE__
누군가 미래에 루프 변수 이름을 변경하면 내 코드가 여전히 모든 설치의 99 %에서 작동해야합니다. 개발 설정 만 실패하고 새 버전을 쉽게 릴리스 할 수 있습니다.
답변
버그 46260 의 의견은 $_SERVER["SCRIPT_FILENAME"]
대신에 사용하는 것이 좋습니다 __FILE__
. 이 작동합니까?
답변
$_SERVER["SCRIPT_FILENAME"]
올바르게 사용하면 작동합니다. 이를 사용하여 기본 경로를 설정 한 다음 해당 기본 경로에 상대적인 경로를 사용하여 파일을 포함시켜야합니다.
다음과 같은 것 :
$plugin_dir = dirname($_SERVER["SCRIPT_FILENAME"]);
$myFile = $plugin_dir."/includes/js/myJavascriptFile.js";
이것은 wp-blog-header.php에 아직 액세스 할 수 없을 때 (즉, 아약스 기반 양식 요청을 처리 할 때) 더 유용합니다.