Jika ragu, lihat kode sumbernya.
Menggali get_option()
, Anda akan melihat (disingkat):
$value = wp_cache_get( $option, 'options' );
if ( false === $value ) {
$row = $wpdb->get_row( $wpdb->prepare( "SELECT option_value FROM $wpdb->options WHERE option_name = %s LIMIT 1", $option ) );
// Has to be get_row instead of get_var because of funkiness with 0, false, null values
if ( is_object( $row ) ) {
$value = $row->option_value;
wp_cache_add( $option, $value, 'options' );
} else { // option does not exist, so we must cache its non-existence
$notoptions[$option] = true;
wp_cache_set( 'notoptions', $notoptions, 'options' );
return apply_filters( 'default_option_' . $option, $default );
}
}
Pertama, WordPress memeriksa untuk melihat apakah sudah ada opsi di memori. Secara default, wp_cache_get()
akan mengambil nilai dari penyimpanan data dalam memori (biasanya hanya variabel PHP). Tetapi beberapa instalasi menggunakan cache objek yang lebih canggih yang menyimpan data di tempat lain.
Dalam kedua kasus, wp_cache_get()
akan mengembalikan nilai opsi Anda jika WordPress sudah mengetahuinya.
Jika tidak, maka WordPress akan mencoba mengambilnya dari database. Jika opsi ada di DB, maka WordPress akan menyimpannya dalam memori dan mengembalikannya - membuat pencarian berikutnya lebih cepat.
Jika opsi tidak ada dalam database, maka WordPress menandainya dalam array internal "opsi ini tidak ada" sehingga tidak mencoba untuk mencarinya nanti dan mengembalikan beberapa nilai default sebagai gantinya.
Jadi, untuk menjawab pertanyaan awal Anda:
Jika saya menggunakan ini 10 kali dalam berbagai fungsi plugin saya, apakah WordPress membuat 10 pertanyaan ke database, atau apakah itu hanya membuat 1 panggilan database per permintaan HTTP dan menyimpan hasilnya?
WordPress akan membuat 1 panggilan basis data per permintaan HTTP dan menyimpan hasilnya.