En cas de doute, regardez le code source.
En creusant get_option()
, vous verrez (en abrégé):
$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 );
}
}
Tout d'abord, WordPress vérifie s'il a déjà l'option en mémoire. Par défaut, wp_cache_get()
récupérera les valeurs d'un magasin de données en mémoire (généralement juste une variable PHP). Mais certaines installations utilisent un cache d'objets plus avancé qui stocke les données ailleurs.
Dans les deux cas, wp_cache_get()
retournera la valeur de votre option si WordPress le sait déjà.
Sinon, WordPress essaiera de le récupérer dans la base de données. Si l'option existe dans la base de données, WordPress la mettra en cache dans la mémoire, puis la restituera, ce qui accélérera les recherches ultérieures.
Si l'option n'existe pas dans la base de données, WordPress la marque dans un tableau interne "ces options n'existent pas" afin de ne pas essayer de la rechercher plus tard et de renvoyer une valeur par défaut à la place.
Donc, pour répondre à votre question initiale:
Si j'utilise ceci 10 fois dans diverses fonctions de mon plugin, WordPress effectue-t-il 10 requêtes vers la base de données, ou ne fait-il qu'un seul appel à la base de données par requête HTTP et met-il en cache les résultats?
WordPress fera 1 appel à la base de données par requête HTTP et mettra en cache les résultats.