En caso de duda, mire el código fuente.
Profundizando en get_option()
, verá (abreviado):
$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 );
}
}
Primero, WordPress verifica si ya tiene la opción en la memoria. Por defecto, wp_cache_get()
recuperará valores de un almacén de datos en memoria (generalmente solo una variable PHP). Pero algunas instalaciones utilizan un caché de objetos más avanzado que almacena los datos en otro lugar.
En cualquier caso, wp_cache_get()
devolverá el valor de su opción si WordPress ya lo sabe.
De lo contrario, WordPress intentará obtenerlo de la base de datos. Si la opción existe en la base de datos, WordPress la almacenará en la memoria caché y luego la devolverá, haciendo que las búsquedas posteriores sean más rápidas.
Si la opción no existe en la base de datos, WordPress la marca en una matriz interna "estas opciones no existen" para que no intente buscarla más tarde y devuelva algún valor predeterminado.
Entonces, para responder a su pregunta original:
Si uso esto 10 veces en varias funciones de mi complemento, ¿WordPress realiza 10 consultas a la base de datos, o solo realiza 1 llamada a la base de datos por solicitud HTTP y almacena en caché los resultados?
WordPress realizará 1 llamada a la base de datos por solicitud HTTP y almacenará en caché los resultados.