Khi tôi gọi switch_to_blog()
bằng id blog, tôi không biết liệu blog đó có thực sự tồn tại hay không. Hàm trả về luôn TRUE
.
Trường hợp thử nghiệm:
switch_to_blog( PHP_INT_MAX );
$post = get_post( 1 );
restore_current_blog();
Điều này sẽ dẫn đến lỗi cơ sở dữ liệu được tiếp xúc với người dùng. Làm thế nào tôi có thể ngăn chặn điều đó?
Trường hợp sử dụng trong thế giới thực
Tôi là nhà phát triển chính của Báo chí đa ngôn ngữ . Khi người dùng dịch một bài đăng, cô ấy sẽ nhận được một màn hình như thế này:
Bây giờ điều sau đây có thể xảy ra:
- Cô lưu bài thành công và tiếp tục dịch bài.
- Một người dùng khác, một quản trị viên mạng, xóa blog tiếng Đức trong khi cô ấy đang viết.
- Cô nhấn lưu lại và bị lỗi cơ sở dữ liệu.
Tôi muốn tránh kịch bản đó. Làm cách nào để kiểm tra nhanh nếu blog mục tiêu tồn tại? Tôi gọi switch_to_blog()
rất thường xuyên trong nhiều lớp khác nhau, vì vậy nó phải nhanh.
get_post()
chỉ là đọc. Có thể có một khoảng dừng dài giữa lần lưu cuối cùng và màn hình chỉnh sửa tiếp theo tải lại.
SELECT blog_id FROM {$wpdb->blogs} WHERE site_id = %d AND public = '1' AND archived = '0' AND spam = '0' AND deleted = '0'
wp_cache_switch_to_blog()
, nhưng nó chỉ giúp với bộ nhớ cache liên tục, không phải mặc định trên trang WP. Dù sao, với tôi nó không thực sự rõ ràng nơi bạn muốn kiểm tra sự tồn tại của blog: Khi ai đó xóa blog hoặc khi ai đó cố gắng viết bài dịch được trỏ đến một blog khác (cung cấp cùng một nội dung bằng ngôn ngữ khác)?
$wpdb->blogid;
và mócwp_insert_post_data
?