การส่งตัวแปรจาก header.php ไปยังเทมเพลตและ verca รอง


9

ฉันได้กำหนดตัวแปร - เรียกมันว่า$header_varซึ่งวางอยู่ในไฟล์ header.php ฉันต้องการให้ตัวแปรนี้ถูกส่งผ่านไปยังไฟล์เทมเพลตของฉัน (ในกรณีนี้คือ taxonomy.php)

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


2
ถ้าฉันสามารถฉันจะลงคะแนน 1,000 นี้ควรอยู่ในเอกสาร
Benn
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.