Я визначив змінну - назвемо її $ header_var, яка розміщується у файлі header.php. Я хотів би, щоб ця змінна була перенесена на мій файл шаблону (у цьому випадку taxonomy.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функції, що використовується для встановлення змінних, працює лише один раз, тому вам не доведеться турбуватися про проблеми з продуктивністю, якщо викликати функцію не один раз.