Lorsque j'appelle switch_to_blog()
avec un identifiant de blog, je ne sais pas si ce blog existe réellement. La fonction retourne toujours TRUE
.
Cas de test:
switch_to_blog( PHP_INT_MAX );
$post = get_post( 1 );
restore_current_blog();
Cela entraînera des erreurs de base de données qui sont exposées à l'utilisateur. Comment puis-je empêcher cela?
Cas d'utilisation du monde réel
J'étais le développeur principal de Multilingual Press . Lorsqu'un utilisateur traduit un message, il obtient un écran comme celui-ci:
Maintenant, les événements suivants peuvent se produire:
- Elle enregistre le message avec succès et continue de traduire le message.
- Un autre utilisateur, un administrateur réseau, supprime le blog allemand pendant qu'elle écrit.
- Elle clique à nouveau sur Enregistrer et obtient des erreurs de base de données.
Je veux éviter ce scénario. Comment puis-je vérifier rapidement si le blog cible existe? J'appelle switch_to_blog()
très souvent dans plusieurs classes différentes, donc ça doit être rapide.
get_post()
n'est qu'une lecture. Il peut y avoir une longue pause entre la dernière sauvegarde et le prochain rechargement de l'écran d'édition.
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()
, mais cela n'aide qu'avec le cache persistant, pas la chose par défaut sur la page WP. Quoi qu'il en soit, pour moi, ce n'est pas vraiment clair où vous voulez vérifier l'existence du blog: quand quelqu'un supprime un blog ou quand quelqu'un essaie d'écrire le message traduit qui pointe vers un blog différent (alimenter le même contenu dans une autre langue)?
$wpdb->blogid;
et le crochetwp_insert_post_data
?