Kiedy dzwonię switch_to_blog()
z identyfikatorem bloga, nie wiem, czy ten blog rzeczywiście istnieje. Funkcja zawsze zwraca TRUE
.
Przypadek testowy:
switch_to_blog( PHP_INT_MAX );
$post = get_post( 1 );
restore_current_blog();
Spowoduje to błędy bazy danych, które zostaną ujawnione użytkownikowi. Jak mogę temu zapobiec?
Przypadek użycia w świecie rzeczywistym
Byłem głównym programistą Multilingual Press . Gdy użytkownik tłumaczy post, dostaje taki ekran:
Teraz mogą się zdarzyć:
- Zapisuje post z powodzeniem i kontynuuje jego tłumaczenie.
- Inny użytkownik, administrator sieci, usuwa niemiecki blog podczas pisania.
- Uderza ponownie zapisz i dostaje błędy bazy danych.
Chcę uniknąć tego scenariusza. Jak mogę szybko sprawdzić, czy blog docelowy istnieje? Dzwonię switch_to_blog()
bardzo często w wielu różnych klasach, więc musi być szybko.
get_post()
to tylko czytanie. Pomiędzy ostatnim zapisaniem a ponownym załadowaniem ekranu edycji może być długa przerwa.
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()
, ale pomaga tylko przy trwałej pamięci podręcznej, a nie domyślnej stronie WP. W każdym razie, dla mnie nie jest do końca jasne, gdzie chcesz sprawdzić istnienie bloga: Kiedy ktoś usuwa blog lub gdy ktoś próbuje napisać przetłumaczony post wskazujący na innego bloga (zasilający tę samą treść w innym języku)?
$wpdb->blogid;
na hakwp_insert_post_data
?