워드 프레스 테마 변수 범위


9

WordPress Theme 템플릿 파일 (index.php, header.php 등) 전체에서 액세스 할 수있는 변수를 만들어야합니다. 함수 정의가 functions.php템플릿 파일 (테마 경로)에 들어가는 것을 알고 있지만 변수에는 그런 것이 없습니다.

예를 들어 테마에서 카테고리를 지속적으로 검색해야하므로 테마의 어느 곳에서나 액세스 할 수있게하려고합니다.

$categories = get_categories(); /* get_categories() is a wordpress function */ 

이렇게하면 범주를 가져와야 할 때마다 데이터를 다시 할당하지 않고도 할당 된 데이터에 간단히 액세스 할 수 있습니다.

불행히도 내 functions.php파일 에 해당 코드 조각을 추가 해도 작동하지 않으며 변수를 만들지 않습니다 global.

답변:


5

분명히 global트릭을 수행합니다. 문제는 내 변수가이었다 $categories했어야 재정 로모그래퍼 global내가 그것을 사용하는 데 필요한 각각의 템플릿에, 그것의 앞에.


2
다른 사람이 모든 템플릿 파일에서 전역으로 재정의 해야하는 것보다 더 직관적 인 솔루션을 알고 있습니까? 내 테마를 개발할 때이 방법을 사용하며 ... 제외되었습니다.

1
대단해, 고마워! 나처럼 조금 두꺼운이 준비가 된 사람이라면 : functions.php 파일에서 : <? php $ test = "I 'm a test!"; ?> 당신의 모르겠다, header.php : <? php global $ test; 에코 $ 테스트; ?> 그리고 당신은 황금입니다!
Dominic

워드 프레스의 템플릿 파일의 모두에서 호출이 명확히하는 데 도움이 경우 require()기능에 싸여 문 : get_header(), get_footer(), 등; 이것들 자체는 함수를 감싸는 래퍼 get_template_part()입니다. PHP의 함수는 함수 내에 정의되거나 변수에 참조로 전달 된 변수에만 액세스 할 수 있으므로 전역 범위에서 변수를 사용하거나 변수를 정의하고 전역 범위에서 액세스 가능하게하려면 변수를 발표해야합니다. 와 세계 최초의 키워드.
goldenapples 2019

1

Dominic (그의 답변에 메모를 추가하는 방법을 모른다) :

정의는 스칼라 만 허용하므로 수행 할 수 define( CATS, get_categories() ); 없으며 심지어

$categories = get_categories();
define( CATS, $categories );

그렇지 않으면 정의가 잘 작동하며 스칼라에 대해 실제로 안전합니다 (상수를 덮어 쓸 수 없음을 확신 할 수 있기 때문에)


1

나는 이것이 오래되었다는 것을 알고 있지만 개선의 여지가 있습니다.

전역 대신 $ GLOBALS [ 'categories'] 사용을 고려해야합니다.

이에 대한 두 가지 이유가 있습니다.

  1. global $categories;매번 글을 쓸 필요는 없습니다 .
  2. 우리가 전역을 사용하고 있지만 사용하지 않는 것은 분명합니다.

이 코드를 고려하십시오.

global $categories;

// a lot of PHP code here

<?php print_r ($categories) ?>

변수를 사용하기 직전에 전역 상태를 초기화하는 경우에만 전역인지 아닌지 말하기가 어렵습니다. 그리고 가지고있는 템플릿 파일에서 반복하는 것을 잊지 마십시오.

이를 위해 명명 규칙을 사용할 수는 있지만 더 나은 방법은 내 의견으로는 있습니다.

사용을 고려하십시오 $GLOBALS['categories'].

global $categories다시 생각할 필요없이 functions.php에서 변수를 한 번만 초기화하면 됩니다. 그리고 우리는 그것이 세계적인 것임을 알 수 있습니다.

print_r ($GLOBALS['categories']);

이 상황에서는 성능 문제가 전혀 문제가되지 않습니다. Sara Golemon ( link )을 인용하겠습니다 .

이것이 $ GLOBALS 배열을 사용한다는 것은 무엇을 의미합니까? 맞습니다. 글로벌 키워드는 기술적으로 더 빠릅니다. 자, 여기서 한 가지에 대해 명확하게 알고 싶습니다. 전역 변수를 지역화 된 [컴파일 된 변수]로 사용함으로써 주어진 작은 속도 여유는 5 년 안에 코드를보고 유지하고 $ foo가 전역 범위에서 왔다는 것을 알고 유지하는 것에 대해 심각하게 평가되어야합니다. something_using ($ GLOBALS [ 'foo']); 글로벌 $ foo보다 항상 당신에게 분명합니다. / * 다발 코드 * / something_using ($ foo); 페니와 파운드 어리석지 마라 ..


0

이것은 또한 작동합니다 :

functions.php define('TEST', 'this is a test');
및 header.php 또는 기타echo TEST;

한 방법이 다른 방법에 비해 성능상 이점이 있습니까?

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