Wenn ich switch_to_blog()
mit einer Blog-ID anrufe, weiß ich nicht, ob das Blog tatsächlich existiert. Die Funktion kehrt immer zurück TRUE
.
Testfall:
switch_to_blog( PHP_INT_MAX );
$post = get_post( 1 );
restore_current_blog();
Dies führt zu Datenbankfehlern, die dem Benutzer angezeigt werden. Wie kann ich das verhindern?
Anwendungsfall der realen Welt
Ich war der Hauptentwickler von Multilingual Press . Wenn ein Benutzer einen Beitrag übersetzt, wird ein Bildschirm angezeigt, der wie folgt aussieht:
Nun kann folgendes passieren:
- Sie speichert den Beitrag erfolgreich und setzt die Übersetzung des Beitrags fort.
- Ein anderer Benutzer, ein Netzwerkadministrator, löscht den deutschen Blog, während er schreibt.
- Sie drückt erneut auf Speichern und erhält Datenbankfehler.
Ich möchte dieses Szenario vermeiden. Wie kann ich schnell überprüfen , ob das Zielblog vorhanden ist? Ich rufe switch_to_blog()
sehr oft in verschiedenen Klassen an, also muss es schnell gehen.
get_post()
ist nur eine Lektüre. Zwischen dem letzten Speichern und dem erneuten Laden des Bearbeitungsbildschirms kann eine lange Pause liegen.
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()
es, aber es hilft nur bei persistentem Cache, nicht bei der auf Seite WP voreingestellten Sache. Wie auch immer, für mich ist es nicht wirklich klar, wo Sie das Bestehen eines Blogs überprüfen möchten: Wenn jemand ein Blog löscht oder wenn jemand versucht, den übersetzten Beitrag zu schreiben, der auf ein anderes Blog verweist (denselben Inhalt in einer anderen Sprache bereitstellen)?
$wpdb->blogid;
und der Hakenwp_insert_post_data
?