source

설정 변수를 지정합니다.php 단, 바닥글에는 표시되지 않습니다.php

bestscript 2023. 3. 21. 22:15

설정 변수를 지정합니다.php 단, 바닥글에는 표시되지 않습니다.php

wordpress에서, 나는 헤더에 변수를 설정합니다.php

<?php
$var= 'anything'
?>

바닥글자에요.에코할 때 php

<?php
echo $var;
?>

인쇄한 게 없는데...왜!>

헤더 파일과 바닥글 파일이 함수 본문에 포함되어 있으므로 동일한 범위에 속하지 않습니다.따라서 로컬 변수를 선언하고 (다른 함수에서) 다른 로컬 변수를 참조합니다.

따라서 변수를 글로벌하게 선언합니다.

$GLOBALS[ 'var' ] = '...';

그 후, 다음과 같이 입력합니다.

echo $GLOBALS[ 'var' ];

나는 당신이 이 질문에 대한 답을 이미 받아들인 것을 알고 있습니다; 하지만 가변 범위 문제에 대한 훨씬 더 나은 접근법이 있다고 생각합니다.$GLOBALS어레이를 설정합니다.

를 사용하다functions.php예를 들어, 테마에 파일을 입력합니다.이 파일은 의 범위 밖에 있습니다.get_header()그리고.get_footer()기능들.사실 이것은 당신이 당신의 테마에서 하고 있는 다른 어떤 작업보다 우선합니다(그리고 저는 플러그인 범위도 믿고 있습니다--그것도 확인해야 합니다).

헤더/풋더 파일에서 사용할 변수를 설정하려면 함수에서 해당 변수를 설정해야 합니다.$GLOBALS 어레이를 오염시키지 않고 php 파일을 만듭니다.확인할 변수가 더 있는 경우 getters/setters와 함께 기본 레지스트리 개체를 사용하는 것을 고려해 보십시오.이렇게 하면 변수를 제어할 수 있는 범위에서 더 잘 캡슐화할 수 있습니다.

레지스트리

여기 샘플이 있습니다.Registry다음 경우에 시작하는 클래스:

<?php
/**
 * Registry
 *
 * @author Made By Me
 * @version v0.0.1
 */
class Registry
{
    # +------------------------------------------------------------------------+
    # MEMBERS
    # +------------------------------------------------------------------------+
    private $properties = array();

    # +------------------------------------------------------------------------+
    # ACCESSORS
    # +------------------------------------------------------------------------+
    /**
     * @set     mixed   Objects
     * @param   string  $index  A unique index
     * @param   mixed   $value  Objects to be stored in the registry
     * @return  void
     */
    public function __set($index, $value)
    {
        $this->properties[ $index ] = $value;
    }

    /**
     * @get     mixed   Objects stored in the registry
     * @param   string  $index  A unique ID for the object
     * @return  object  Returns a object used by the core application.
     */
    public function __get($index)
    {
        return $this->properties[ $index ];
    }

    # +------------------------------------------------------------------------+
    # CONSTRUCTOR
    # +------------------------------------------------------------------------+
    public function __construct()
    {
    }


}

이 클래스를 테마에 저장하십시오(예:/classes/registry.class.php파일 맨 위에 포함functions.php파일: include( get_directory() . '/syslog/syslog.class.syslog' );

사용 예

변수 저장:

$registry = new Registry();
$registry->my_variable_name = "hello world";

변수 검색 중:

echo '<h1>' .  $registry->my_variable_name . '</h1>'

레지스트리는 모든 변수 유형을 받아들입니다.

주의: 보통 내부 데이터스토어로 SplObjectStorage를 사용하지만 이 경우 일반 ole 어레이로 교체했습니다.

좀 오래된 질문이라는 것을 알고 있습니다.솔루션 투표로 다른 옵션을 공유해야겠다고 생각하고 Globals를 사용하지 않고 더 좋은 솔루션을 찾았습니다.

function fn_your_var_storage( $var = NULL )
{
    static $internal;

    if ( NULL !== $var )
    {
        $internal = $var;
    }

    return $internal;
}

// store the value
fn_your_var_storage( 'my_value' );

// retrieve value
echo fn_your_var_storage(); // print my_value

이 코드를 사용해 보세요.

먼저 초기 변수 정의

  $var="something";

$_GLOBALS를 사용합니다.

  $_GLOBALS['myvar']=$var;

마지막으로 글로벌 변수를 원하는 장소에서 사용할 수 있습니다.

  global $myvar;

$_GLOBALS 내부의 문자열을 글로벌 변수 이름으로 정의하거나 글로벌을 사용하지 않고 $_GLOBALS['myvar']를 코드에 직접 사용합니다.

wordpress Header, any template에서는 Footer는 다른 함수이기 때문에 모든 변수를 글로벌 변수로 선언해야 액세스 할 수 있습니다.

/** header.php **/
<?php
global $xyz;
$xyz="123456"; ?>

/** Template.php or Footer.php **/
<?php 
echo $xyz; ///return 123456
?>

언급URL : https://stackoverflow.com/questions/2434725/setting-variable-in-header-php-but-not-seen-in-footer-php