header.php에서 template로 또는 그 반대로 변수 전달


9

변수를 정의했습니다.이 변수를 $header_varheader.php 파일에 배치하십시오. 이 변수를 템플릿 파일 (이 경우 taxonomy.php)로 전달하고 싶습니다.

또한 나는 $template_vartaxonomy.php에서 header.php로 전달하는 것과 같은 다른 방법으로 똑같이 할 수 있기를 바랍니다 .

헤더가로드 된 후에 변수가 선언되지 않았기 때문에 가능합니까?

나는 $header_var행운을 잃지 않고 전역을 사용해 보았습니다 .

어떤 제안?

답변:


24

변수를 정의했습니다-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변수를 설정하는 데 사용되는 모든 함수 코드가 한 번만 실행되므로 함수를 두 번 이상 호출 할 때 성능 문제에 대해 걱정할 필요가 없습니다.


2
내가 1000 투표 할 수 있다면. 이것은 WP 템플릿 문서에 있어야합니다
Benn
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.