심볼릭 링크 된 디렉토리의 플러그인? 해결해야합니까? 내 디렉토리 구조는 다음과 같습니다 /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 위

플러그인을 개발할 때 플러그인 디렉토리를 다른 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().

추가 정보 : http://core.trac.wordpress.org/ticket/16953


답변

나는 현재 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에 아직 액세스 할 수 없을 때 (즉, 아약스 기반 양식 요청을 처리 할 때) 더 유용합니다.