Truyền các biến từ header.php sang template và vice verca


9

Tôi đã xác định một biến - hãy gọi nó $header_var, được đặt trong tệp header.php. Tôi muốn biến này được chuyển vào tệp mẫu của tôi (trong trường hợp này là taxonomy.php).

Ngoài ra, tôi muốn có thể làm điều tương tự theo cách khác, như chuyển một $template_vartừ taxonomy.php của tôi sang header.php.

Điều này thậm chí có thể xảy ra vì biến không được khai báo sau khi tiêu đề được tải?

Tôi đã thử sử dụng toàn cầu $header_varnhưng không có may mắn.

Bất kỳ đề xuất?

Câu trả lời:


23

Tôi đã xác định một biến - hãy gọi nó là $ header_var, được đặt trong tệp header.php. Tôi muốn biến này được chuyển vào tệp mẫu của tôi (trong trường hợp này là taxonomy.php).

globalkhông phải là một cách rất được khuyến khích để thực hiện thủ thuật, nhưng nó hoạt động nếu bạn sử dụng đúng cách: đặt nó trước để xác định biến trong header.php trước khi lấy biến trong taxonomy.php(sau khi đã gọi get_header () để bao gồm 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'

Tôi muốn có thể làm điều tương tự theo cách khác, như chuyển một $ template_var từ taxonomy.php của tôi sang header.php. Điều này thậm chí có thể xảy ra vì biến không được khai báo sau khi tiêu đề được tải?

Đó là PHP, không phải phép thuật hay cỗ máy thời gian: quy tắc thời gian áp dụng cho WordPress giống như phần còn lại của vũ trụ .

Vì vậy, không, bạn không thể vượt qua một biến ngược thời gian, nhưng thông thường, trong các mẫu, bạn bao gồm header.phpbằng cách gọi get_header()vì vậy nếu bạn đặt một biến trước khi gọi hàm đó, thủ thuật toàn cục cũng sẽ hoạt động:

// in header.php
global $template_var;
echo $template_var; // 'A value'

// in taxonomy.php
global $template_var;
$template_var = 'A value'
get_header();

Tuy nhiên, nếu bạn cần chia sẻ các biến trong header.phpvà các mẫu, điều tốt nhất cần làm là không khai báo chúng trong tiêu đề cũng như trong các mẫu, mà functions.phpbằng cách sử dụng các móc hành động để kiểm soát khi các biến phải được khai báo.

Một hook hữu ích là 'template_redirect'nơi bạn có quyền truy cập vào truy vấn hiện tại và nó được kích hoạt trước đó header.phpvà các mẫu được tải.

Một ví dụ sơ bộ:

// 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'

Trong mã trước đó, nhờ statictừ khóa, tất cả mã trong get_my_shared_varshàm được sử dụng để đặt biến chỉ chạy một lần, do đó bạn không phải lo lắng về các vấn đề về hiệu suất nếu gọi hàm nhiều lần.


1
Nếu tôi có thể tôi sẽ bỏ phiếu 1000. Điều này sẽ có trong tài liệu mẫu WP
Benn
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.