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).
global
khô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
và 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.php
bằ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.php
và 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.php
bằ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.php
và 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ờ static
từ khóa, tất cả mã trong get_my_shared_vars
hà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.