In caso di dubbi, guarda il codice sorgente.
Scavando in get_option()
, vedrai (abbreviato):
$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 );
}
}
Innanzitutto, WordPress controlla se ha già l'opzione in memoria. Per impostazione predefinita, wp_cache_get()
recupererà i valori da un archivio di dati in memoria (di solito solo una variabile PHP). Ma alcune installazioni utilizzano una cache di oggetti più avanzata che archivia i dati altrove.
In entrambi i casi, wp_cache_get()
restituirà il valore dell'opzione se WordPress lo sa già.
Altrimenti, WordPress proverà a catturarlo dal database. Se l'opzione esiste nel DB, WordPress la memorizzerà nella cache e la restituirà, rendendo più veloci le ricerche successive.
Se l'opzione non esiste nel database, WordPress la contrassegna in un array interno "queste opzioni non esistono", quindi non cerca di cercarla in seguito e restituisce invece un valore predefinito.
Quindi, per rispondere alla tua domanda originale:
Se lo utilizzo 10 volte in varie funzioni del mio plug-in, WordPress effettua 10 query nel database o effettua solo 1 chiamata al database per richiesta HTTP e memorizza nella cache i risultati?
WordPress effettuerà 1 chiamata al database per richiesta HTTP e memorizzerà nella cache i risultati.