맞춤 게시물 유형과 함께 template_include 사용


11

플러그인 디렉토리의 파일로 돌아 가기 전에 테마 폴더에서 적절한 템플릿을 확인하고 싶습니다. 내 코드는 다음과 같습니다.

add_filter ( 'template_include', 'sermon_template_include');
sermon_template_include ($ template) 함수 {
    if (get_query_var ( 'post_type') == 'wpfc_sermon') {
        if (is_archive () || is_search ()) :
           if (file_exists (TEMPLATEDIR. '/archive-wpfc_sermon.php'))
              TEMPLATEDIR을 리턴하십시오. '/archive-wpfc_sermon.php';
           dirname (__ FILE__)을 리턴하십시오. '/views/archive-wpfc_sermon.php';
        다른 :
           if (file_exists (TEMPLATEDIR. '/single-wpfc_sermon.php'))
              TEMPLATEDIR을 리턴하십시오. '/single-wpfc_sermon.php';
           dirname (__ FILE__)을 리턴하십시오. '/views/single-wpfc_sermon.php';
        엔디 프;
    }
    $ template을 반환;
}

문제는 작동하지 않습니다! :-) 항상 플러그인 폴더에서 파일을 선택합니다. 어떻게해야할지 아십니까? 많은 변형을 시도했지만 아무것도 작동하지 않는 것 같습니다! 미리 감사드립니다! 잭

편집하다

테마 폴더에서 archive-wpfc_sermon.php가 반환 될 것으로 예상합니다. 그러나 플러그인의 파일은 항상 반환됩니다. 당신의 도움을 주셔서 감사합니다! 이것은 저장소에서 사용 가능한 Sermon Manager 플러그인의 것입니다.


플러그인 템플리트 파일이 리턴 될 것으로 예상 할 때 어떤 테마 템플리트 파일이 리턴됩니까?
Chip Bennett

테마 폴더에서 archive-wpfc_sermon.php가 반환 될 것으로 기대합니다. 그러나 플러그인의 파일은 항상 반환됩니다. 당신의 도움 @ChipBennett에 감사드립니다! 이것은 저장소에서 사용 가능한 Sermon Manager 플러그인의 것입니다.
Jack

답변:


6

따라서 문제의 원인을 정확히 모르지만 다음을 시도해 볼 수 있습니다.

  1. 파일 경로를 플러그인 : 교체 dirname(__FILE__)와 함께plugin_dir_path( __FILE__ )
  2. 테마 파일 경로 : 교체 TEMPLATEDIR와 함께get_stylesheet_directory()

그것은이다 가능한 문제가 직접 상수를 참조에서 온다.


0

이것이 당신에게 효과가 있는지 확실하지 않지만 한 번 가치가 있습니다. 나는 특별한 템플릿이 필요할 때 사용자 정의 게시물 유형에 항상 이것을 사용합니다.

// Template selection Defines the template for the custom post types.
function my_template_redirect()
  {
  global $wp;
  global $wp_query;
  if ($wp->query_vars["post_type"] == "your_custom_post_type")
  {
    // Let's look for the your_custom_post_type_template.php template 
   // file in the current theme
    if (have_posts())
      {
          include(TEMPLATEPATH . '/your_custom_post_type_template.php');
          die();
      }
      else
      {
          $wp_query->is_404 = true;
      }
    }
}

이 스크립트를 functions.php 파일에 추가하고 템플릿 파일을 테마 디렉토리에 추가하기 만하면됩니다.

이것은 가치가 있으며 플러그인과 충돌하지 않을 수 있습니다. 그러나 나는 그것을 확신하지 못한다.

잊어 버렸습니다 ... 액션을 추가하는 것을 잊지 마십시오. :)

add_action("template_redirect", 'my_template_redirect');

감사합니다 @Nicole, 게시 한 코드는 템플릿 파일을 호출하는 데 효과적입니다. 그러나 플러그인 폴더에로드하기 전에 현재 테마 폴더에서 동일한 이름의 파일을 스캔하고 싶습니다.
Jack

@ 잭, 기본적으로 현재 테마 디렉토리의 템플릿 전에 플러그인 디렉토리에서 파일을 호출합니까? 흠, 이것에 대해 다시 한 번 생각해야 할 것입니다. : DI는 좋은 도전을 좋아합니다!
Nicole

맞습니다! 그것은 정말로 저를 비틀 거리게했다.
Jack

@ 잭, 이것은 바보 같은 질문처럼 들릴 수 있으므로 그렇다면 용서하십시오. :) 게시 한 코드는 플러그인에 있거나 코드가 functions.php 파일에 있습니까?
Nicole

@Jack 위의 코드는 테마 디렉토리에서 템플릿 파일을 검색합니다. if 문을 사용하여 'include'가 작동했는지 확인하고, 그렇지 않은 경우 플러그인 디렉토리에서 템플리트를 검색하십시오.
Stephen Harris
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.