в wordpress, Я устанавливаю переменную в header.php
<?php
$var= 'anything'
?>
но в footer.php, когда я повторяю его
<?php
echo $var;
?>
Я ничего не напечатал... почему! >
в wordpress, Я устанавливаю переменную в header.php
<?php
$var= 'anything'
?>
но в footer.php, когда я повторяю его
<?php
echo $var;
?>
Я ничего не напечатал... почему! >
Вы не в той же области, что и файлы заголовка и нижнего колонтитула, включенные в тело функции. Таким образом, вы объявляете локальную переменную и ссылаетесь на другую локальную переменную (из другой функции).
Итак, просто объявите переменную как глобальную:
$GLOBALS[ 'var' ] = '...';
Тогда:
echo $GLOBALS[ 'var' ];
Я знаю, что вы уже приняли ответ на этот вопрос; однако я думаю, что существует гораздо лучший подход к проблеме с переменной областью, чем передача 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 для этого случая.
Я знаю, что это немного старый вопрос и решение было проголосовано, но, хотя я должен поделиться другим вариантом и просто найти лучшее решение (которое работает) без использования 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 любой шаблон Footer - это разные функции, поэтому вам нужно объявить любую переменную как глобальную переменную, после чего вы можете получить к ней доступ.
/** header.php **/
<?php
global $xyz;
$xyz="123456"; ?>
/** Template.php or Footer.php **/
<?php
echo $xyz; ///return 123456
?>