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