플러그인에 PHP 파일을 올바른 방법으로 포함시키는 방법


59

내 문제는 기본 플러그인 파일에 다음과 같은 PHP 파일을 포함시키는 것입니다.

include(WP_PLUGIN_URL . '/wordpress-group-buying/ipn/paypal-ipn.php');
// or
include_once(WP_PLUGIN_URL . '/wordpress-group-buying/ipn/paypal-ipn.php');
// or
require(WP_PLUGIN_URL . '/wordpress-group-buying/ipn/paypal-ipn.php');
// or
require_once(WP_PLUGIN_URL . '/wordpress-group-buying/ipn/paypal-ipn.php');

그리고 그 파일에서 다음과 같은 WordPress 함수를 호출했습니다.

add_action('hook', 'callback');

그리고 나는 얻는다 :

치명적 오류 : 정의되지 않은 함수 add_action () 호출

지금 당신이 "사용 if(**function_exists**('add_action')){" 이라고 말하기 전에 그것을 사용하면 작동하지 않습니다.

질문 :

  • 올바른 방법은 무엇입니까?
  • 무엇의 차이입니다 include, include_once, require그리고 할 때 나는 마녀를 사용할 수 있습니까?

그 메시지를 받으면 뭔가 잘못하고있는 것입니다. 이 파일들에서 기능을 실행하기 전에 모든 파일을 포함
시키십시오

그게 아니에요, 전화는 내가 포함하는 파일 내에 있습니다!
Bainternet

lol, 이제 WP_PLUGIN_URL위 코드에서 볼 수 있습니다 :)
onetrickpony

3
간단히 말해서 URI가 아닌 파일 경로를 통해서만 include () 파일을 포함 할 수 있습니다.
편집자

1
(당신이 당신의 질문을 한 후에 아마 기록)이 코덱스 기사는 아주 도움이된다 : codex.wordpress.org/Determining_Plugin_and_Content_Directories
henrywright

답변:


88

이 파티에 늦게오고 있지만 여기에 "WordPress"방식이 있습니다 : use plugin_dir_path( __FILE__ ), 예 :

<?php
include( plugin_dir_path( __FILE__ ) . 'ipn/paypal-ipn.php');
?>

함수 파일 경로 의 후행 슬래시 를 리턴합니다 .


3
__FILE__이를 사용 하면 호출하는 현재 파일을 기준으로 출력되므로 include명령문이 플러그인 파일 구조 내의 서브 디렉토리에서 수행되면 서브 디렉토리도 다시 가져옵니다.
squarecandy

대안 - 당신이 경우 필요해 상대 경로입니다require_once(plugin_dir_path(__DIR__).'/myfile.inc');
FoggyDay

10

나는 플러그인 안에 여분의 파일을 포함시킨 다른 방법을보기 위해 이전에 만든 몇 가지 플러그인을 살펴 보았고 사용할 수있는 두 가지 방법이 있음을 알았습니다.

플러그인 디렉토리 정의

플러그인 내부에는 현재 플러그인 위치를 정의하기 위해 다음 정의가 있습니다.

예제 코드 :

define( 'PLUGIN_DIR', dirname(__FILE__).'/' );  

그냥 똑바로 포함하거나 요구

간단하게 사용할 수 있습니다. 아래 예제 코드와 같이 위치를 참조하여 플러그인 폴더 내부에 include_once, require 또는 require_once를 포함하십시오. 아래 예제는 플러그인 폴더 내부의 폴더 내에서 다른 파일을 포함하여 루트 플러그인 디렉토리의 파일을 기반으로합니다.

예제 코드 :

include "classes/plugin-core.php";

상대 포함은 모든 종류의 불쾌한 예상치 못한 문제를 가져올 수 있습니다.
Mark Kaplun

5

포함에 대한 WordPress 구문을 무시하고 다음을 사용합니다.

require_once(dirname(__FILE__) . '/filename.php);

나는 그것이 실제로 문제를 해결할 것이라고 생각하지 않습니다. 범위 문제 인 것처럼 보이지만, 내가 사용하는 코드입니다.

포함 요구의 차이에 관해서는 :
던져 것 포함 경고를 파일을 찾을 수없는 경우
던져 것입니다 필요 치명적인 오류 파일이 발견되지 않는 경우

include_once 및 require_once는 파일 / 코드가 이미 포함 / 필요한 경우 파일 / 코드를 다시 포함 / 요구하지 않습니다 (알 수있는 한, 이는 특정 디렉토리의 특정 파일에 대해서만 해당됨).


5

먼저, 답변 한 모든 사람에게 감사합니다.

내 문제는 전체 URL이 포함 된 파일을 WordPress를 거치지 않는 방식으로 호출하는 것이 었습니다. 문제에 대해 언급했듯이 기본 플러그인 파일에서 전화했기 때문에 발생했습니다. 그래서 수정은 다음을 사용하여 끝났습니다.

include_once('/ipn/paypal-ipn.php');

WordPress 지원 에 대해 읽었습니다 . 답장을 보내 주셔서 감사합니다!


이 답변 ( wordpress.stackexchange.com/a/32002/123092 )을 수락 된 것으로 표시하도록 다시 고려할 수 있습니까 ?
나는 가장 바보 같은 사람이다

4

포함

include () 문은 지정된 파일을 포함하고 평가합니다.

한 번 포함

include_once () 문은 스크립트 실행 중 지정된 파일을 포함하고 평가합니다. 이것은 파일의 코드가 이미 포함 된 경우 다시 포함되지 않는다는 점을 제외하고는 include () 문과 유사한 동작입니다. 이름에서 알 수 있듯이 한 번만 포함됩니다.

필요

require ()와 include ()는 실패를 처리하는 방법을 제외하고 모든면에서 동일합니다. 둘 다 경고를 생성하지만 require () 결과 치명적인 오류가 발생합니다. 다시 말해, 누락 된 파일이 페이지 처리를 중지 시키려면 require ()를 사용하는 것을 망설이지 마십시오.

한 번 요구

require_once () 문은 스크립트 실행 중 지정된 파일을 포함하고 평가합니다. 이는 require () 문과 유사한 동작이며 파일의 코드가 이미 포함 된 경우 다시 포함되지 않는다는 점만 다릅니다.

위의 정보는 PHP 문서에서 나온 것입니다. 문제가 올바른 것은 아니며 코드의 필요성에 달려 있습니다. 함수와 같은 중요한 것들에 대해서는 require ()하지만 footer 또는 루프와 같은 테마 파일에는 필자가 사용합니다 include_once 또는 include 경고를 처리하고 fatal_error 대신 오류가 발생한 사용자 / 방문자에게 말할 수 있기 때문에 include


@mtekk이 말했듯이 tis 구조를 사용하는 것이 좋습니다. require_once (dirname ( FILE ). '/filename.php);
Webord

1

안녕하세요 @ בניית אתרים :

WordPress가로드 될 때 플러그인을로드 하기 전에add_action() 함수 정의합니다 . 오류가 발생한다는 사실은 이상한 일을하고 있거나 WordPress 설치에 문제가 있음을 나타냅니다.

"플러그인" 을로드 할 사람은 누구 입니까? 당신은 사용하고 include*()또는 require*()어쩌면 당신에 그것을로드하는 wp-config.php파일?


1
include( plugin_dir_path( __FILE__ ) . 'ipn/paypal-ipn.php');

또는

define( 'PLUGIN_ROOT_DIR', plugin_dir_path( __FILE__ ) );
include( PLUGIN_ROOT_DIR . 'ipn/paypal-ipn.php');

또는

$plugin_dir_path = plugin_dir_path( __FILE__ );
include( $plugin_dir_path . 'ipn/paypal-ipn.php');

참고 : admin_enqueue_scripts플러그인 내에서 .css 및 .js 파일을 큐에 넣으 려면plugin_dir_url( __FILE__ )

$plugin_dir_uri = plugin_dir_url( __FILE__ );
wp_enqueue_style( 'plugin-style', $plugin_dir_uri . 'css/plugin-style.css');

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.