Jangan gunakan konstanta untuk itu. Jangan gunakan konstanta global sama sekali.
Ada dua jenis konstanta: konstanta kelas / antarmuka dan konstanta global.
Konstanta di kelas atau antarmuka baik-baik saja dan terkadang berguna. Contoh yang terlalu sederhana:
interface Requirements
{
const MIN_PHP_VERSION = 5.4;
public function php_is_good();
}
class Theme_Requirements implements Requirements
{
public function php_is_good()
{
return version_compare( PHP_VERSION, self::MIN_PHP_VERSION, '>=' );
}
}
Namun perlu diingat, konstanta ini selalu bersifat publik. Jika Anda mengubahnya nanti, Anda dapat memecahkan kode yang tergantung pada mereka.
Ini lebih buruk dengan konstanta global. Bayangkan yang berikut ini:
define( 'THEME_URI', get_template_directory_uri() );
Dan kemudian fungsi untuk gambar header default:
function get_default_header_image()
{
return THEME_URI . '/img/default-header.jpg';
}
Fungsi ini membuat asumsi tentang sesuatu yang di luar kendali, ia tahu terlalu banyak. Bagaimana Anda menguji fungsi itu dengan nilai yang berbeda untuk konstanta? Kamu tidak bisa
Katakanlah Anda ingin menguji apa yang terjadi ketika konstanta diset ke direktori yang tidak ada atau ke server lain yang lebih lambat. Tetapi begitu Anda telah menetapkan konstanta, Anda tidak dapat mengubah nilainya. Anda tidak dapat menjalankan semua tes dalam satu kali, ini membuat pengujian lebih sulit dari yang diperlukan.
Dan dalam tema anak yang mencoba menggunakan gambar default sendiri - bagaimana Anda menerapkannya? Konstanta diatur oleh tema induk. Anda bisa menambahkan tanda centang dengan defined()
, tetapi itu membuat lebih sulit untuk melihat di mana nilainya sebenarnya ditulis.
Akan jauh lebih baik untuk menulis ulang fungsi ke:
function get_default_header_image( $base )
{
return esc_url( $base ) '/img/default-header.jpg';
}
Saya katakan sebelumnya, konstanta adalah API. API seharusnya mudah diubah, tetapi sangat sulit untuk mencabut konstanta, karena PHP tidak mencatat akses. Jadi pesan penghentian Anda tidak akan pernah mencapai pengembang lain, kecuali ketika mereka membaca kode sumber Anda atau dokumen Anda dengan sangat hati-hati. Percayalah, mereka tidak.
Gunakan get_stylesheet_directory_uri()
di tema anak dan get_template_directory_uri()
di tema orang tua. Keduanya dapat difilter saat runtime, sehingga Anda dapat menjalankan semua pengujian sekaligus.