답변:
변수를 정의했습니다-header.php 파일에있는 $ header_var라고하겠습니다. 이 변수를 템플릿 파일 (이 경우 taxonomy.php)로 전달하고 싶습니다.
global
트릭을 수행하는 데 권장되는 방법은 아니지만 올바르게 사용하면 작동합니다. 변수를 정의하기 전에 header.php
다시 넣고 변수를 검색하기 전에 taxonomy.php
(get_header ()를 호출하여 포함시킨 후 header.php
)
// in header.php
global $header_var;
$header_var = 'A value';
// in taxonomy.php
get_header();
global $header_var;
echo $header_var; // 'A value'
내 taxonomy.php에서 header.php로 $ template_var를 전달하는 것과 같이 다른 방법으로 똑같이 할 수 있기를 원합니다. 헤더가로드 된 후에 변수가 선언되지 않았기 때문에 가능합니까?
그것은 마법이나 타임머신이 아닌 PHP입니다. 시간 규칙 은 다른 우주 와 마찬가지로 WordPress에 적용됩니다 .
따라서 아니요, 시간에 변수를 전달할 수 없지만 일반적으로 템플릿에서는 header.php
호출 get_header()
하여 포함 하므로 해당 함수 를 호출 하기 전에 변수를 설정 하면 전역 트릭 도 작동합니다.
// in header.php
global $template_var;
echo $template_var; // 'A value'
// in taxonomy.php
global $template_var;
$template_var = 'A value'
get_header();
그러나 변수를 header.php
템플릿 에서 공유해야하는 경우 가장 좋은 방법은 헤더 나 템플릿에서 변수를 선언하는 것이 아니라 작업 후크 를 functions.php
사용하여 변수를 선언해야하는 시기 를 제어 하는 것입니다.
유용한 훅은 'template_redirect'
현재 쿼리에 액세스 할 수있는 위치 header.php
이며 템플릿이로드 되기 전에 시작 됩니다.
대략적인 예 :
// in functions.php
add_action( 'template_redirect', 'get_my_shared_vars' );
function get_my_shared_vars() {
static $shared_vars = NULL;
if ( empty( $shared_vars ) ) {
$shared_vars = array( 'header_var' => 'An header value' );
if ( is_tax() || is_category() || is_tag() ) {
$shared_vars['taxonomy_var'] = 'A taxonomy value';
}
}
return $shared_vars;
}
// in header.php
$shared_vars = get_my_shared_vars();
echo $shared_vars['header_var']; // 'An header value'
// in taxonomy.php
$shared_vars = get_my_shared_vars();
echo $shared_vars['taxonomy_var']; // 'A taxonomy value'
이전 코드에서 static
키워드 덕분에 get_my_shared_vars
변수를 설정하는 데 사용되는 모든 함수 코드가 한 번만 실행되므로 함수를 두 번 이상 호출 할 때 성능 문제에 대해 걱정할 필요가 없습니다.