Saya perlu membuat variabel yang dapat diakses di seluruh file templat Tema WordPress saya (index.php, header.php dll.). Saya tahu definisi fungsi masuk ke dalam functions.php
file template (di jalur tema Anda), tetapi tidak ada variabel variabel.
Misalnya saya terus-menerus perlu mengambil Kategori di Tema saya, jadi saya ingin ini dapat diakses dari mana saja di tema saya:
$categories = get_categories(); /* get_categories() is a wordpress function */
Dengan cara ini saya dapat dengan mudah mengakses data yang dialokasikan, tanpa harus mengalokasikan ulang setiap kali saya perlu mendapatkan kategori saya.
Sayangnya menambahkan potongan kode dalam functions.php
file saya , tidak berfungsi, juga tidak membuat variabel global
.
require()
pernyataan yang dibungkus dalam fungsi:get_header()
,get_footer()
, dll; yang mereka sendiri adalah pembungkus di sekitar fungsiget_template_part()
. Karena fungsi dalam PHP hanya memiliki akses ke variabel yang ditentukan di dalamnya atau diteruskan dengan referensi kepadanya, jika Anda ingin menggunakan variabel dari lingkup global (atau mendefinisikan variabel dan membuatnya dapat diakses dalam lingkup global) Anda harus mengumumkannya dengan kata kunci global terlebih dahulu.Dominic (tidak tahu bagaimana cara menambahkan catatan pada jawabannya):
define hanya menerima skalar, jadi Anda tidak bisa melakukannya
define( CATS, get_categories() );
dan bahkan tidakKalau tidak, definisikan berfungsi dengan baik, dan itu sebenarnya lebih aman untuk skalar (karena Anda dapat memastikan konstanta tidak dapat ditimpa)
sumber
Saya tahu ini benar-benar tua, tetapi ada ruang untuk perbaikan.
Anda harus mempertimbangkan menggunakan $ GLOBAL ['kategori'] bukan hanya global.
Ada dua alasan untuk ini:
global $categories;
setiap saat.Pertimbangkan kode ini:
Hanya jika kita menginisialisasi keadaan global tepat sebelum menggunakan variabel, cukup sulit untuk mengatakannya, apakah itu global atau tidak. Dan jangan lupa untuk mengulanginya di semua file template yang Anda miliki.
Dimungkinkan untuk menggunakan konvensi penamaan untuk itu, tetapi menurut saya ada cara yang lebih baik.
Pertimbangkan untuk menggunakan
$GLOBALS['categories']
.Kita hanya perlu menginisialisasi variabel kita satu kali di functions.php tanpa harus memikirkan
global $categories
lagi. Dan kita bisa melihat itu global.print_r ($GLOBALS['categories']);
Masalah kinerja bukanlah masalah sama sekali dalam situasi ini. Saya akan mengutip Sara Golemon ( tautan ):
sumber
Ini juga berfungsi:
di functions.php tambahkan
define('TEST', 'this is a test');
dan di header.php Anda atau apa pun
echo TEST;
Apakah ada keunggulan kinerja untuk satu metode di atas yang lain?
sumber