누군가이 기능이 어떻게 작동하는지 설명해 주시겠습니까? 나는 그것이 무엇을하는지 알고 있지만 twenty_ten 템플릿의 소스 코드를 보면 모든 루프가 하나의 단일 loop.php에서 수집되는 방식을 알 수 없습니다 (그 파일도 보았습니다).
예를 들어 템플릿의 특정 공통 부분을 추상화 한 다음 다른 템플릿에서 재사용하는 방법은 무엇입니까?
댓글
답변
여기에 아주 좋은 소개 답변이 있습니다.
기본적으로 get_template_part()
를 사용하면 테마 개발자가 템플릿 파일의 특정 순서를 설정할 수 있습니다. 다음과 유사하게 생각하세요. CSS 선택자에 적용되는 특이성. 무언가를 디자인 할 때 최소한의 특이성으로 시작하여 개별주의가 필요한 디자인 부분에서 쉽게 재정의 할 수 있습니다.
예를 들어 , 블로그 스타일을 지정하고 루프를 만듭니다. .php 파일은 게시물 마크 업에 적합합니다. 하지만 미리 계획하고 나중에 추가 컨텍스트 지정자를 사용하여 템플릿 파일에서 호출합니다. 예를 들어 색인 페이지에서 get_template_part( "loop", "index" );
를 호출하고 단일 템플릿에서
, 아카이브 페이지에서는 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 배열에서 각 이름을 찾은 다음 temp 늦은 디렉토리. $ load 인수로 “true”를 전달하면 발견 된 첫 번째 파일이 필요 하고 템플릿 파일이 없으면 빈 문자열이 반환됩니다. 따라서 플러그인에서 다음과 같이 할 수 있습니다.
if ( "" === locate_template( "loop-mycustomposttype.php", true, false ) ) include( "loop-mycustomposttype.php" );
… 테마 개발자가 다음을 포함하여 내 플러그인을 매우 쉽게 사용자 정의 할 수 있습니다. 테마에 loop-mycustomposttype.php 라는 파일이 있습니다.
댓글
- locate_template을 이것으로 바꾸십시오.
include(locate_template( 'loop-mycustomposttype.php'))
이 방법으로 변수를 전달할 수 있습니다. ' 링크 에서 찾았습니다. ' 매우 유용합니다! - 이렇게하면 '도 변경해야합니다. 이렇게
if ( false === include(locate_template( 'loop-mycustomposttype.php')) )
- 오, 좋은 지적입니다. 내가 준 공식을 사용하면
require
또는require_once
호출 (locate_template
에서)이 내부에 있습니다. 함수이므로 ' 현재 범위에 액세스 할 수 없습니다.
답변
모든 루프가 아닌 메인 루프. 😉 당신이 당신의 첫 페이지 나 카테고리를 보든, 누가 무엇을 알고 있든, 당신은 항상 메인 루프를 갖게 될 것입니다. 그 메인 루프의 내용은 “이전에 실행 된 쿼리에 의해 결정됩니다. 템플릿이 전혀 호출되지 않았습니다.
loop.php 템플릿은 루프의 항목에 대해 실행되고 형식을 지정합니다. 코덱스 문서 를 참조하세요.
Twenty-Ten “s loop.php를 보면 Twenty-Ten 그런 다음 해당 단일 템플릿 파일을 내에서 다양 화합니다.
get_template_part()
는 템플릿 부분을로드하고 실행합니다. loop.php의 일부를 별도의 파일로 만들고 get_template_part("loop", "category")
등의 호출로 대체합니다.
또는 각 개별 게시물에 대한 부분 템플릿을 가질 수 있습니다. 루프에서 loop.php가 while...
절 내에서 get_template_part("loop","post");
만 호출하도록합니다. 모두 귀하에게 달렸습니다.
답변
get_template_part 코덱 에서 :
<?php get_template_part( "loop", "index" ); ?>
존재하는 첫 번째 파일에 대해 PHP require ()를 수행합니다 …
다른 PHP 파일이 필요한 것처럼 효과적으로 작동합니다.
업데이트 : “require”와 약간의 차이가 있습니다.-함수 안에 래핑되어 있으므로 템플릿에서 템플릿 부분으로 변수를 전달하려면 global
해야합니다.
codex.wordpress.org/Function_Reference/get_template_part