Когда я звоню switch_to_blog()
с идентификатором блога, я не знаю, существует ли этот блог на самом деле. Функция возвращает всегда TRUE
.
Прецедент:
switch_to_blog( PHP_INT_MAX );
$post = get_post( 1 );
restore_current_blog();
Это приведет к ошибкам в базе данных, которые выставляются пользователю. Как я могу предотвратить это?
Реальный пример использования
Я был ведущим разработчиком Multilingual Press . Когда пользователь переводит сообщение, он получает такой экран:
Теперь может произойти следующее:
- Она успешно сохраняет сообщение и продолжает переводить сообщение.
- Другой пользователь, сетевой администратор, удаляет немецкий блог, пока она пишет.
- Она снова нажимает сохранить и получает ошибки базы данных.
Я хочу избежать этого сценария. Как я могу быстро проверить, существует ли целевой блог? Я звоню switch_to_blog()
очень часто в разных классах, поэтому это должно быть быстро.
get_post()
- это просто чтение. Между последним сохранением и следующей перезагрузкой экрана редактирования может быть долгая пауза.
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()
, но это помогает только с постоянным кешем, а не по умолчанию на странице WP. В любом случае, для меня не совсем понятно, где вы хотите проверить существование блога: когда кто-то удаляет блог или кто-то пытается написать переведенный пост, указывающий на другой блог (включающий тот же контент на другом языке)?
$wpdb->blogid;
и крюкwp_insert_post_data
?