programing

WordPress의 plugins_url() 함수가 공유 호스팅에서 작동하지 않습니다.

oldcodes 2023. 2. 28. 23:45
반응형

WordPress의 plugins_url() 함수가 공유 호스팅에서 작동하지 않습니다.

내가 만든 사이트는 고급 사용자 지정 필드 플러그인을 사용하며, 내 웹 호스트의 localhost에서 모든 것이 제대로 작동합니다.유감스럽게도 사이트를 클라이언트가 구입한 호스팅(GoDaddy 공유 호스팅)으로 이동했을 때 Advanced Custom Fields 플러그인용 JavaScript 파일과 CSS 파일이 제대로 로드되지 않았습니다.소스를 확인하면 문제가 해결됩니다.이러한 문제는 다음 경로를 가리키고 있습니다.

http://www.clientsamazingwebsite.com/wp-content/plugins/home/content/06/10145906/html/wp-content/plugins/advanced-custom-fields/js/input-actions.js?ver=3.5.7.2

(자세히 보면 URL이 아닌 서버상의 파일의 실제 경로에 대한 참조가 있음을 알 수 있습니다.)

플러그인의 다음 행까지 문제를 추적했습니다.

$this->dir = plugins_url('',__FILE__);

그것은 돌아올 것이다./wp-content/plugins/advanced-custom-fields

대신 다시 돌아오고 있다./wp-content/plugins/home/content/06/10145906/html/wp-content/plugins/advanced-custom-fields

올바른 경로를 가리키도록 플러그인 파일을 편집했지만 플러그인이 업데이트될 때마다 변경 내용이 복구되기 때문에 장기적인 해결책은 아닙니다.

나는 몇몇 사람들이 불평하는 것을 봐왔다.__FILE__심볼링크에서는 매직 상수가 예상대로 작동하지 않지만 심볼링크는 확실히 작성하지 않았습니다.이게 GoDaddy 사용에 대한 제한인가요?

갱신하다

눈치 챘다__FILE__GoDaddy에서 로컬머신이나 다른 웹 서버와는 다른 것을 반환합니다.동작하고 있는 2대의 머신 중 1대는, 파일 시스템의 루트에서 풀 패스를 반환합니다(즉,/srv/www/sitename/public_html/file.phpGoDaddy에서 반환되는 경로는 홈디렉토리에서 시작됩니다( )./home/content/06/10145906/html/file.php).

그게 문제일까요?

Wordpress Codex에 따르면

You can either specify the $path argument as a hardcoded path relative to the
plugins directory, or conveniently pass __FILE__ as the second argument to make
the $path relative to the parent directory of the current PHP script file.

그래서 사용하다

plugins_url( basename( __DIR__ ) . '/path/to/plugin/asset.js' );

대신

plugins_url( '/path/to/plugin/asset.js', __FILE__ );

적절한 회피책입니다.특정 기술만큼 민첩하지 않을 수 있습니다.__FILE__그래도.

다음 작업을 수행할 수 있습니다.

$this->dir = dirname(__FILE__);

새로운 버전의 PHP 를 실행하고 있는 경우는,

$this->dir = __DIR__;

서버 이동으로 인해 이 문제가 갑자기 발생한 것 같습니다.

WordPress 설정 페이지를 확인하여 이동 후 WordPress URL이 새 URL을 반영하는지 확인합니다.

WordPress의 상수 중 하나(WP_PLUGin_URL 또는 WP_PLUGIN_URL)가 모두 맞다면 WordPress의 상수 중 하나 또는 WP_PLUGIN_URL을 설정하는 데 사용되는 전구체 상수 중 하나)를 덮어쓰고 있는 것입니다.그것을 찾는 장소는 wp-config.php 파일에 있습니다.

현재 이 있을 이 있습니다(버전에서는 ).는 "인 "PHP" 를 반환합니다항상 다음의 "물리적" 주소를 반환합니다.__FILE__에 이 알 수 , 반환하는 변경하고 합니다.왜 PHP에 이 동작을 변화시키기 위한 셋업이 없는지(그리고 PHP 개발자)는 알고 있지만, WP는 그 경로를 URL과 비교하면서 URL의 "나머지"를 반환하는 정상적인 동작을 변경하고 대신 전체 경로를 반환합니다.

에게 Codex 사용을 하는 한 는 잘 합니다.__FILE__디스크 수준에서 수행된 심볼 링크를 끊지 않는 다른 방법이 있을 때 라이브러리를 로드하기 위한 URL 경로를 생성합니다.

이것으로 문제가 해결됩니다.

define('WP_CONTENT_DIR', realpath($_SERVER['DOCUMENT_ROOT'] . '/wp-content'));

언급URL : https://stackoverflow.com/questions/14391522/wordpresss-plugins-url-function-not-working-on-shared-hosting

반응형