ฉันได้กำหนดตัวแปร - เรียกมันว่า $ 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 จาก taxonomy.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
ใช้action hooksเพื่อควบคุมเวลาที่ต้องประกาศตัวแปร
hook ที่มีประโยชน์'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
ฟังก์ชั่นที่ใช้ในการตั้งค่าตัวแปรทำงานเพียงครั้งเดียวดังนั้นคุณไม่ต้องกังวลเกี่ยวกับปัญหาด้านประสิทธิภาพหากเรียกใช้ฟังก์ชันมากกว่าหนึ่งครั้ง