플러그인에 get_template_part ()를 사용하여 파일을 포함시키는 방법은 무엇입니까?


13

매우 간단한 질문 일지 모르지만 어려움을 겪고 있습니다. 테마 개발에서 get_template_part()여러 번 작업했으며 기본 사항을 이해합니다. 그러나 플러그인을 개발할 때 몇 가지 오류를 보여주는 플러그인을 사용하는 것이 궁금합니다.

통지 : 정의되지 않은 상수 STYLESHEETPATH ​​사용 -407 ...\wp-includes\template.php행 에서 'STYLESHEETPATH'로 가정

주의 : 정의되지 않은 상수 TEMPLATEPATH 사용 -410 ...\wp-includes\template.php번째 줄 에서 'TEMPLATEPATH'로 가정

인터넷 검색으로 지원 수정이 표시되었습니다.

그러나 그것은 큰 해결 방법 인 것 같습니다-의심합니다. 나는 그렇게 복잡해서는 안된다고 생각합니다. 이 WPSE 답변을 확인하고 다음 코드 줄을 찾았습니다.

if ( '' === locate_template( 'loop-mycustomposttype.php', true, false ) )
    include( 'loop-mycustomposttype.php' );

PHP include()함수 가있는 곳 . 내 WordPress 지식에 get_template_part()따라 PHP보다 선호하는 법을 배웠습니다 include(). 그런 다음 get_template_part()플러그인에서 간단하게 사용할 수있는 방법 .

나는 루프 나 무언가를 사용하지 않고 플러그인 코드를 다른 파일로 분리 (또는 구성 할 수 있음)하여 필요에 따라 생략 할 수 있도록 주석 처리 할 것입니다. 나는 시도했다 :

get_template_part( 'my', 'special-admin' );

그런 다음 오류가 발생하면 다음과 같이 변경하십시오.

get_template_part( 'my', 'specialadmin' );

그러나 당신은 그것이 문제가 아니라는 것을 알고 있습니다. WAMP를 사용하여 로컬 서버에 있습니다.

답변:


11

get_template_partA는 테마 기능. 해당 기능으로 플러그인 파일을로드 할 수 없습니다. 출처를 살펴보면 작업이에 의해 수행되었음을 알 수 locate_template있습니다. 해당 소스 를 보면 항상 테마 디렉토리 에서로드되는 것을 볼 수 있습니다 .

그러나 당신이 get_template_part그것을 사용 하고 싶을 수도 있는 것은 잘못된 기능입니다.

include파일 이 필요 합니다.

그 이유 get_template_part는 나에게도 보인다. 왜냐하면 테마를 확장하여 아이 테마를 쉽게 만들 수 있기 때문이다. 플러그인은 이러한 방식으로 확장되도록 설계되지 않았으므로 get_template_part동등한 플러그인이 필요하지 않습니다 .


6

@s_ha_dum은 get_template_part테마 함수 인 것이 맞지만 플러그인이 이런 식으로 확장되도록 의도 된 것은 아닙니다. 더 복잡합니다.

Pippin 의이 포스트 는 사용자가 테마 내에서 플러그인 템플리트를 대체 할 수 있도록하는 동시에 플러그인 템플리트로드 작업을 수행하는 기능을 사용하는 방법을 설명합니다.

기본적으로 테마의 특수 폴더를 찾은 다음 찾을 수없는 경우 템플리트 폴더에서 플러그인을 찾습니다.


4

앞에서 언급했듯이 get_template_part플러그인에서는 사용할 수 없지만 Github (Gary Jones가 만든) 에는 플러그인 의 기능 을 모방 하여 플러그인을 폴백 (자식 테마> 부모 테마> 플러그인)에 추가 하는 편리한 클래스get_template_part 가 있습니다.

이런 식으로 하위 테마 또는 상위 테마 내에서 플러그인의 "템플릿 부분"을 재정의 할 수 있습니다.

사용법 (Github repo 지침에서 가져옴) :

  1. class-gamajo-template-loader.php플러그인으로 복사 하십시오. 플러그인 루트의 파일에 있거나 포함 디렉토리에있을 수 있습니다.
  2. class-your-plugin-template-loader.php같은 디렉토리에 와 같은 새 파일을 작성하십시오 .
  3. class해당 파일에서 확장되는을 만듭니다 Gamajo_Template_Loader.
  4. 플러그인에 맞게 클래스 속성을 재정의하십시오. get_templates_dir()자신에게 적합하지 않은 경우 메소드를 대체 할 수도 있습니다 .
  5. 이제 사용자 정의 템플리트 로더 클래스를 인스턴스화하고이를 사용하여 get_template_part()메소드 를 호출 할 수 있습니다. 이것은 짧은 코드 콜백 또는 테마 개발자가 파일에 포함시키려는 것입니다.

예제 코드 :

// Template loader instantiated elsewhere, such as the main plugin file.
$meal_planner_template_loader = new Meal_Planner_Template_Loader;

// Use it to call the get_template_part() method. This could be within 
// a shortcode callback, or something you want theme developers 
// to include in their files.
$meal_planner_template_loader->get_template_part( 'recipe' );

// If you want to pass data to the template, call the set_template_data() 
// method with an array before calling get_template_part().        
// set_template_data() returns the loader object to allow for method chaining.
$data = array( 'foo' => 'bar', 'baz' => 'boom' );

$meal_planner_template_loader
    ->set_template_data( $data );
    ->get_template_part( 'recipe' );

// The value of bar is now available inside the recipe template as $data->foo.
// If you wish to use a different variable name, add a second parameter 
// to set_template_data():
$data = array( 'foo' => 'bar', 'baz' => 'boom' );

$meal_planner_template_loader
    ->set_template_data( $data, 'context' )
    ->get_template_part( 'recipe', 'ingredients' );

// The value of bar is now available inside the recipe template as $context->foo.
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.