Значение переменной в header.php, но не видно в footer.php

в wordpress,  Я устанавливаю переменную в header.php

<?php
$var= 'anything'
?>

но в footer.php, когда я повторяю его

<?php
echo $var;
?>

Я ничего не напечатал... почему! >

Ответ 1

Вы не в той же области, что и файлы заголовка и нижнего колонтитула, включенные в тело функции. Таким образом, вы объявляете локальную переменную и ссылаетесь на другую локальную переменную (из другой функции).

Итак, просто объявите переменную как глобальную:

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

Тогда:

echo $GLOBALS[ 'var' ];

Ответ 2

Я знаю, что вы уже приняли ответ на этот вопрос; однако я думаю, что существует гораздо лучший подход к проблеме с переменной областью, чем передача vars в массив $GLOBALS.

Возьмите functions.php файл в своей теме, например. Этот файл включен за пределы функций get_header() и get_footer(). На самом деле это заменяет все, что вы могли бы сделать в своей теме (и я также верю в область плагина), хотя я должен был бы это проверить.)

Если вы хотите установить переменную, которую вы хотите использовать в своих файлах header/footer, вы должны сделать это в файле functions.php, а не загрязнять массив $GLOBALS. Если у вас есть больше переменных, которые вы хотите, рассмотрите возможность использования базового объекта реестра с помощью getters/seters. Таким образом, ваши переменные будут лучше инкапсулированы в область, которую вы можете контролировать.

Реестр

Вот пример класса 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_template_directory(). '/classes/registry.class.php');

Пример использования

Сохранение переменных:

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

Извлечение переменных:

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

Реестр примет любой тип переменной.

Примечание. Я обычно использую SplObjectStorage как внутреннее хранилище данных, но я поменял его для регулярного массива ole для этого случая.

Ответ 3

Я знаю, что это немного старый вопрос и решение было проголосовано, но, хотя я должен поделиться другим вариантом и просто найти лучшее решение (которое работает) без использования 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

Ответ 4

попробуйте этот код

сначала определите начальную переменную

  $var="something";

то используйте $_GLOBALS

  $_GLOBALS['myvar']=$var;

и, наконец, использовать глобальную переменную в любом месте, которое вы хотите

  global $myvar;

определить строку внутри $_GLOBALS как принятое как глобальное имя переменной или использовать $_GLOBALS ['myvar'] прямо в код без использования глобальной

Ответ 5

В Wordpress Header любой шаблон Footer - это разные функции, поэтому вам нужно объявить любую переменную как глобальную переменную, после чего вы можете получить к ней доступ.

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

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