Meskipun saya biasanya menggunakan include
atau require
sendiri untuk menghemat pemeliharaan kode jangka panjang, saya sudah mulai menggunakan get_template_part
dan locate_template
menggunakan hal-hal bawaan di WordPress selalu yang terbaik.
Pertanyaan saya adalah apakah Anda seharusnya bisa meneruskan variabel ke hasil salah satu get_template_part
atau locate_template
?
<?php
$var = get_option( 'my-custom-option' );
get_template_part( 'custom-template-part' );
?>
Dalam kode di atas $var
akan dicetak di dalam template khusus tetapi variabel tampaknya tidak berfungsi. Apakah saya kehilangan sesuatu atau perilaku yang diharapkan ini?
Saya telah menemukan bahwa mereka tidak lulus dalam contoh di atas atau ketika menggunakan loc_template
<?php
locate_template( 'custom-template-part.php', true );
?>
sumber
locate_template()
infact melakukan inklusi, jika parameter ditetapkan sebagaitrue
-seperti dalam pertanyaan. (standarnya adalahfalse
, jadi jangan tempel versi pertanyaan ke dalam jawaban yang diterima.) Anda juga bisa menggunakanset_query_var('var', $var);
dan menggunakanget_template_part()
seperti biasa. Kemudian Anda juga memiliki variabel Worpdress default yang dapat diakses di dalam templatfile, seperti yang disebutkan @MathSmath.Solusi rapi ditemukan dalam kodeks
Jadi, jika Anda mengulang melalui pos kustom, Anda dapat melakukan ini:
Dan dalam templat itu sendiri, Anda akan secara otomatis mendapatkan
$my_post
.sumber
wc_get_template_part
di WooCommerce yang tidak diragukan lagi memperluas WP default.Saya juga mengalami masalah dengan ini (ketika mencoba mendapatkan kueri khusus untuk bekerja dengan bagian templat). Jawaban singkatnya adalah: tidak, bagian template tidak secara otomatis mewarisi vars kustom seperti yang dilakukan oleh regular.
Baik get_template_part () dan loc_template () akhirnya menggunakan fungsi load_template () untuk benar-benar memuat file (menggunakan persyaratan). Fungsi ini mengglobal vars berikut:
$ posting, $ posting, $ wp_did_header, $ wp_did_template_redirect, $ wp_query, $ wp_rewrite, $ wpdb, $ wp_version, $ wp, $ id, $ komentar, $ user_ID
Namun, tidak ada vars lain yang tampaknya tersedia dari dalam bagian templat. Saya kira karena kebutuhan aktual dibungkus dalam suatu fungsi, cakupannya berubah atau apa?
Anyhoo, saya akan mencoba globalisasi vars tambahan yang perlu Anda lewati, kemudian memanggil global tersebut dari bagian template Anda.
sumber
Hanya dua sen saya untuk referensi di masa mendatang, solusi paling tidak di Wordpress 3.5 adalah menambahkan variabel
$wp_query->query_vars
.Saya membutuhkan global saya
_vk_errors
di dalam bagian templat dan baru saja melakukannya$wp_query->query_vars['_vk_errors'] = $_vk_errors;
sebelum meneleponget_template_part()
.sumber
Ada fungsi sederhana saya memecahkan masalah variabel. Ini melakukan hal yang sama seperti
get_template_part()
fungsi Wordpress . Cukup salin dan tempel kefunction.php
Contoh penggunaan dalam template
Dalam
content-heighlight.php
variabel diakses dengan nama$utm_source
dan nilaifooter
sumber
Anda bisa membungkus get_template_part, menyimpan objek model dalam var global, dan menghapusnya nanti. Inilah yang kami lakukan dalam proyek kami:
functions.php
Penggunaan dalam templat utama:
Mengakses model yang disediakan di bagian templat:
Dengan cara ini, Anda tidak perlu menyalin & menempelkan fungsi get_template_part asli ke fungsi Anda sendiri seandainya implementasinya nanti berubah oleh pengembang WP.
sumber