get_template_part ()를 사용하는 방법?


25

누군가이 기능이 어떻게 작동하는지 설명해 주시겠습니까? 나는 그것이 무엇을 알고 있지만 twenty_ten 템플릿에서 소스 코드를 볼 때 모든 단일 루프가 하나의 단일 loop.php에 수집되는 방법을 얻지 못합니다 (파일도 보았습니다).

예를 들어 템플릿의 특정 공통 부분을 추상화 한 다음 다른 템플릿에서 재사용하는 방법은 무엇입니까?


답변:


25

여기에 아주 좋은 입문 답변이 있습니다.

기본적으로 get_template_part()테마 개발자는 템플릿 파일의 특정 순서를 설정할 수 있습니다. CSS 선택기에 적용되므로 특정 성과 유사하게 생각하십시오. 무언가를 디자인 할 때는 최소한의 특이성으로 시작하여 개별적인주의가 필요한 디자인의 부분에서 쉽게 무시할 수 있습니다.

예를 들어, 블로그 스타일을 지정 하고 게시물 마크 업에 잘 맞는 loop.php 파일을 만듭니다 . 그러나 미리 계획하고 나중에 추가 컨텍스트 지정자를 사용하여 템플리트 파일에서이를 호출합니다 (예 : 색인 페이지, get_template_part( 'loop', 'index' );단일 템플리트, 호출 get_template_part( 'loop', 'single' );, 아카이브 페이지, 호출 get_template_part( 'loop', 'archive' );등). 이렇게하면 아카이브 페이지에서 루프를 홈 페이지와 다르게 마크 업하기로 결정할 때 매우 쉽게 진행할 수 있습니다. loop-archive.php 템플리트를 작성 하면 일반 loop.php 대신 사용됩니다 .

그러나 뒤에 숨겨진 마법 get_template_part()은 함수 locate_template()에 있으며, 먼저 테마 디렉토리를 확인한 다음 상위 디렉토리 (있는 경우)에서 이름이 지정된 파일을 확인합니다. 이것은 플러그인 개발에 매우 ​​유용합니다. 플러그인 중 하나에서 사용자 정의 게시물 유형을 정의하고 플러그인 디렉토리에 해당 사용자 정의 게시물 유형에 대한 루프 템플릿 파일을 만들었습니다. 그러나 ... 필요한 경우 플러그인을 사용하는 테마가 마크 업을 재정의하도록 허용하고 싶습니다. 이곳은 locate_template()정말 놀라운 일입니다.

locate_template($template_names, $load = false, $require_once = true )

스타일 시트 디렉토리의 $ template_names 배열에서 템플릿 디렉토리에서 각 이름을 찾습니다. $ load 인수로 'true'를 전달하면 발견 된 첫 번째 파일 이 필요 하며 템플리트 파일이없는 경우 빈 문자열을 리턴합니다. 플러그인에서 다음과 같이 할 수 있습니다.

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

... 테마 개발자가 테마에 loop-mycustomposttype.php 라는 파일을 포함 시켜서 플러그인을 사용자 정의하는 것이 매우 쉬워지기를 바랍니다 .


2
이것으로 locate_template을 바꾸십시오. include(locate_template( 'loop-mycustomposttype.php')) 이 방법으로 변수를 전달할 수 있습니다. 이 링크를 찾았습니다 . 매우 유용합니다!
Pablo SG Pacheco

1
그렇게하는 경우에도이를 변경해야합니다. 이와 같이if ( false === include(locate_template( 'loop-mycustomposttype.php')) )
Pablo SG Pacheco

1
오, 좋은 지적입니다. 내가 준 수식을 사용하여 require또는 require_once호출 (from locate_template)이 함수 안에 있으므로 현재 범위에 액세스 할 수 없습니다.
goldenapples

5

모든 루프가 아니라 메인 루프. ;-) 프론트 페이지 나 카테고리를 보거나 누가 알든지 상관없이 항상 메인 루프가 있습니다. 해당 메인 루프의 내용은 템플릿이 전혀 호출 되기 전에 실행 된 쿼리에 의해 결정됩니다 .

loop.php 템플릿은 단순히 루프의 항목을 실행하여 서식을 지정합니다. 코덱스 설명서를 참조하십시오 .

Twenty-Ten의 loop.php를 보면 Twenty-Ten 이 단일 템플릿 파일 내에서 다양 화 되는 것을 볼 수 있습니다 .

get_template_part()템플릿 부분 만로드하고 통과합니다. loop.php의 일부를 별도의 파일로 추출 get_template_part('loop', 'category')하여 호출 등으로 대체 할 수 있습니다 .

또는 루프의 각 개별 게시물에 대한 부분 템플릿을 사용 get_template_part('loop','post');하고 while...절 내에서 loop.php 만 호출 하도록 할 수 있습니다. 모두 너에게 달렸어.


3

로부터 get_template_part의 사본 :

<?php get_template_part( 'loop', 'index' ); ?>

존재하는 첫 번째 파일에 대해 PHP require ()를 수행합니다 ...

따라서 다른 PHP 파일이 필요한 것처럼 효과적으로 작동합니다.

업데이트 : '필수'와는 약간의 차이가 있습니다. 함수 안에 래핑되어 있으므로 global템플릿에서 템플릿 부분으로 변수를 전달 해야합니다 .

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