안녕하세요. 린치핀소프트 한광희입니다.

 

“template_include” 필터란 ? 워드프레스 페이지의 템플릿을 지정할 수 있는 필터 훅(Filter Hook) 함수입니다.

 

일반적으로 워드프레스 페이지의 “템플릿”을 지정하기 위해서는 관리자 페이지 “페이지의 세부 편집”에서 “템플릿”을 별도로 지정해주는것이  방법입니다. 이때에 지정 될 수 있는 “템플릿”은 보통 테마에서 등록하고 있는 템플릿을 대상으로 지정 할 수 있습니다. 하지만, 이는 워드프레스 관리자가 직접 페이지 편집화면에서 “템플릿”을 지정해 주는 방법입니다. 이렇게 템플릿을 지정하는 것도 방법이겠지만, 이후에도 관리자가 편집의 실수로 템플릿을 재지정하는 등의 실수가 발생할 수 있는 가능성이 있습니다.  테마나 플러그인 개발자가 선호하는 방법으로 사이트 관리자가 지정하지 않아도 특정 페이지의 템플릿을 지정할 수 있는 방법을 소개해드립니다.

오늘 소개하는 이 “template_include” 필터 훅의 경우는 관리자가 별도로 페이지의 템플릿을 지정해주는 등의 절차없이 테마/플러그인 개발자가 특정 페이지의 템플릿을 연결 시켜 줄 수 있다는 장점이 있는 필터 훅입니다.

이 훅(Hook)을 이용해 플러그인 개발을 진행할때에는 플러그인에서 필수적으로 갖추어야 하는 페이지의 생성과 해당 페이지의 템플릿을 지정하는 데 자주 응용되어집니다.

 

class menuTemplate{

 public $menuDashboard;

 public function __construct(){

  add_filter('template_include',array($this,'template_set'));

 }

 public function template_set($template){

  $testInsertTemplate = PCS_DIR . 'Template/test_insertMenu.php';
  $dashTemplate = PCS_DIR . 'Template/linchpinDashboard.php';
  $newMenuTemplate = PCS_DIR . 'Template/linchpinNewMenu.php';
  $editMenuTemplate = PCS_DIR . 'Template/linchpinEditMenu.php';

  if( is_page('t_insertMenu') ) return $testInsertTemplate;
  else if( is_page('c_newMenu') ) return $newMenuTemplate;
  else if( is_page('c_editMenu') ) return $editMenuTemplate;
  else if( is_page('c_dashboard') ) return $dashTemplate;
  else return $template;
 }

}

위의 소스코드는 ‘ template_include ‘ 필터 훅과 is_page() 워드프레스 함수를 이용하여 페이지의 슬러그(Slug)를 기준으로 특정 페이지를 판별하여 페이지별로 템플릿을 지정해주고 있는 예제입니다.

1.add_filter(‘template_include’,array($this,’template_set’)); 항목에서 template_include 필터 훅으로 menuTemplate(사용자 정의 클래스) 메서드인 ‘template_set’을 호출합니다. 클래스 메서드 ‘ template_set’ 에서 페이지별로 템플릿을 지정합니다.

2. template_set 메서드에서는 매개변수로 $template을 전달받으며 $template 변수에서는 필터훅이 활성화되는 시점에서의 페이지가 보여지는 기본 템플릿 정보(경로)가 지정되어 있습니다.

3. is_page() 함수를 통해 페이지를 식별합니다. is_page()는 현재 이용자에게 보여지고 있는 페이지를 ID(wp_posts.ID), 슬러그(Slug),제목(페이지 타이틀) 등을 기준으로 해당 정보와 일치한 페이지면 True / 불일치 False의 Boolean 값을 반환합니다.

4. 이후 각 페이지별로 참조되어야 하는 템플릿의 파일명과 절대경로를 return 합니다.

5. 플러그인의 경우는 “템플릿 파일의 절대경로”를 return 하며 테마의 경우는 워드프레스 함수인 locate_template 을 이용하여 자식테마/부모테마에서 템플릿을 검색하여 지정할 수 있습니다.

 

참고 포스트

워드프레스 훅 간단히 살펴보기