Khi nghi ngờ, hãy nhìn vào mã nguồn.
Đi sâu vào get_option()
, bạn sẽ thấy (viết tắt):
$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 );
}
}
Đầu tiên, WordPress kiểm tra xem nó đã có tùy chọn trong bộ nhớ chưa. Theo mặc định, wp_cache_get()
sẽ truy xuất các giá trị từ kho lưu trữ dữ liệu trong bộ nhớ (thường chỉ là biến PHP). Nhưng một số cài đặt sử dụng bộ đệm đối tượng nâng cao hơn lưu trữ dữ liệu ở nơi khác.
Trong cả hai trường hợp, wp_cache_get()
sẽ trả về giá trị tùy chọn của bạn nếu WordPress đã biết.
Nếu không, thì WordPress sẽ cố lấy nó từ cơ sở dữ liệu. Nếu tùy chọn tồn tại trong DB, thì WordPress sẽ lưu nó vào bộ nhớ và sau đó trả lại - làm cho việc tra cứu tiếp theo nhanh hơn.
Nếu tùy chọn không tồn tại trong cơ sở dữ liệu, thì WordPress sẽ gắn cờ nó trong một mảng "các tùy chọn này không tồn tại" bên trong để nó không cố gắng tìm kiếm nó sau đó và trả về một số giá trị mặc định.
Vì vậy, để trả lời câu hỏi ban đầu của bạn:
Nếu tôi sử dụng 10 lần này trong các chức năng khác nhau của plugin, WordPress có thực hiện 10 truy vấn vào cơ sở dữ liệu không, hoặc nó chỉ thực hiện 1 cuộc gọi cơ sở dữ liệu cho mỗi yêu cầu HTTP và lưu trữ kết quả?
WordPress sẽ thực hiện 1 cuộc gọi cơ sở dữ liệu cho mỗi yêu cầu HTTP và lưu trữ kết quả.