The WP Codex mengatakan untuk melakukan hal ini:
// You wish to make $my_var available to the template part at `content-part.php`
set_query_var( 'my_var', $my_var );
get_template_part( 'content', 'part' );
Tetapi bagaimana saya echo $my_var
di dalam bagian template? get_query_var($my_var)
tidak bekerja untuk saya.
Saya telah melihat banyak rekomendasi untuk digunakan locate_template
sebagai gantinya. Apakah itu cara terbaik untuk pergi?
variables
get-template-part
Florian
sumber
sumber
set_query_var
danget_query_var
, namun ini adalah untuk menggunakan nilai dari suatu$args
array dilewatkan keWP_Query
. Mungkin bermanfaat bagi orang lain yang mulai mempelajari hal ini.Jawaban:
Ketika posting mendapatkan data mereka diatur melalui
the_post()
(masing-masing melaluisetup_postdata()
) dan karenanya dapat diakses melalui API (get_the_ID()
misalnya), mari kita asumsikan bahwa kita mengulang melalui serangkaian pengguna (sepertisetup_userdata()
mengisi variabel global dari pengguna yang saat ini masuk dan tidak t berguna untuk tugas ini) dan mencoba menampilkan meta data per pengguna:Kemudian, di
wpse-theme/template-parts/user-contact_methods.php
file kami , kami perlu mengakses ID pengguna:Itu dia.
Penjelasan sebenarnya persis di atas bagian yang Anda kutip dalam pertanyaan Anda:
extract()
Fungsi PHP asli "mengekstrak" variabel (global $wp_query->query_vars
properti) dan menempatkan setiap bagian ke dalam variabelnya sendiri yang memiliki nama yang persis sama dengan kunci. Dengan kata lain:sumber
The
hm_get_template_part
fungsi dengan humanmade sangat baik ini dan saya menggunakannya sepanjang waktu.Kamu panggil
dan kemudian di dalam template Anda, Anda gunakan
untuk mengembalikan nilai. Itu caching dan segalanya, meskipun Anda bisa mengambilnya jika Anda mau.
Anda bahkan dapat mengembalikan template yang diberikan sebagai string dengan meneruskan
'return' => true
ke array kunci / nilai.sumber
Saya mencari-cari dan menemukan berbagai jawaban. Tampaknya pada tingkat asli, Wordpress memungkinkan variabel diakses di bagian Templat. Saya memang menemukan bahwa menggunakan include ditambah dengan loc_template memang memungkinkan ruang lingkup variabel dapat diakses dalam file.
sumber
include
tidak akan lulus pemeriksaan mereka .Saya sarankan untuk membaca tentang fungsi PHP Extract ().
sumber
Saya mengalami masalah yang sama pada proyek yang sedang saya kerjakan. Saya memutuskan untuk membuat plugin kecil saya sendiri yang memungkinkan Anda untuk secara eksplisit meneruskan variabel ke get_template_part dengan menggunakan fungsi baru.
Jika Anda mungkin menemukan itu berguna, inilah halaman untuk itu di GitHub: https://github.com/JolekPress/Get-Template-Part-With-Variables
Dan inilah contoh cara kerjanya:
sumber
Saya suka plugin Pods dan fungsi pods_view mereka . Ini berfungsi mirip dengan
hm_get_template_part
fungsi yang disebutkan dalam jawaban djb. Saya menggunakan fungsi tambahan (findTemplate
dalam kode di bawah ini) untuk mencari file template dalam tema saat ini terlebih dahulu, dan jika tidak ditemukan mengembalikan template dengan nama yang sama di/templates
folder plugin saya . Ini adalah gagasan kasar tentang bagaimana saya menggunakanpods_view
plugin saya:pods_view
juga mendukung caching, tetapi saya tidak membutuhkannya untuk tujuan saya. Informasi lebih lanjut tentang argumen fungsi dapat ditemukan di halaman dokumentasi Pods. Lihat halaman untuk pods_view dan Bagian Caching Bagian dan Bagian Templat Cerdas dengan Pod .sumber
Berdasarkan jawaban dari @djb menggunakan kode dari buatan manusia.
Ini adalah versi ringan dari get_template_part yang dapat menerima argumen. Variabel cara ini dicakup secara lokal ke templat itu. Tidak perlu untuk memiliki
global
,get_query_var
,set_query_var
.Misalnya di
cart.php
:Dalam
apple.php
:sumber
Bagaimana dengan ini?
Dengan menggunakan
${$key}
Anda dapat menambahkan variabel ke dalam lingkup fungsi saat ini. Bekerja untuk saya, cepat dan mudah dan tidak bocor atau disimpan dalam ruang lingkup global.sumber
Bagi yang terlihat sangat mudah untuk mengoper variabel, Anda dapat mengubah fungsi untuk memasukkan:
Dan kemudian Anda akan dapat menggunakan semua variabel yang didefinisikan sebelum Anda termasuk template tanpa BERLALU masing-masing untuk template.
Kredit diberikan ke: https://mekshq.com/passing-variables-via-get_template_part-wordpress/
sumber
Ini adalah solusi tepat dan ini bekerja dengan baik. https://developer.wordpress.org/reference/functions/set_query_var/
sumber