Передача змінних від header.php до шаблону та віце-верки


9

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

Крім того, я хотів би мати можливість робити те саме навпаки, як перехід $template_varз моєї таксономії.php до header.php.

Це можливо навіть, оскільки змінна не була оголошена після завантаження заголовка?

Я намагався використовувати глобальний, $header_varале без везіння.

Будь-які пропозиції?

Відповіді:


24

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


2
Якби я міг би, я проголосував би за 1000. Це має бути в документах з шаблону WP
Benn
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.