Я определил переменную - назовем ее $ header_var, которая находится в файле header.php. Я хотел бы, чтобы эта переменная была передана в мой файл шаблона (в данном случае таксономия.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'
Я хотел бы иметь возможность сделать то же самое с другой стороны, например, передать $ template_var из моего таксономии.php в header.php. Возможно ли это, поскольку переменная не была объявлена после загрузки заголовка?
Это 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
функции, используемый для установки переменных, запускается только один раз, поэтому вам не нужно беспокоиться о проблемах производительности, если вызываете функцию более одного раза.