Chcę to wyłączyć tylko dla jednego typu postu, ponieważ tak naprawdę nie ma znaczenia, czy jest edytowany przez innego użytkownika (główny obszar edycji treści jest Ajaxified, a nie-administratorzy mogą to zobaczyć).
Spojrzałem na podstawowe funkcje, ale nie mogłem znaleźć punktu wejścia. Z funkcji wp_set_post_lock
domyślam się, że musiałbym przechwycić get_post_meta
, ale czy istnieje oficjalny sposób, aby to zrobić?
Jest też druga blokada , na którą filtr nie wydaje się mieć wpływu wp_check_post_lock_window
( jak pokazuje birgire , tutaj w odpowiedzi). Próbowałem remove_filter( 'heartbeat_received', 'wp_refresh_post_lock', 10, 3 );
w różnych momentach, ale wciąż bije bez szacunku remove_filter
.
wp-admin
heartbeat-api
brasofilo
źródło
źródło
post_lock
tego.Odpowiedzi:
Jako dodatek do odpowiedzi @birgire …
Wyniki
register_post_type()
pozwala zarejestrować wsparcie typu post, co równie dobrze można zrobić późniejadd_post_type_support()
. I to można sprawdzić nawet później, używając wszystkich potężnychpost_type_supports( $cpt, $feat )
.Ogólna mini wtyczka, która dodaje nową funkcję
Teraz następująca wtyczka (mu-) sprawdza, czy istnieje nowy rodzaj wsparcia typu post, który wyłącza funkcję post lock. To się nazywa
disabled_post_lock
.Jedna wtyczka na CPT
Następnie możemy łatwo dodać mini wtyczki, aby wyłączyć obsługę typu post dla wtyczek własnych lub zewnętrznych (oszczędzając nam trochę przepustowości i rozmiaru bazy danych w meta tabeli użytkownika):
Gdy tylko druga wtyczka zostanie aktywowana, nasz typ postu piwa nie ma już blokady postu. Powinno to działać dobrze i można je łatwo przywrócić na ekranie administratora wtyczek.
Wyłączanie interfejsu API pulsu
Rozszerzenie wtyczki w celu wyłączenia interfejsu API funkcjibeekbeat:
źródło
admin-ajax.php
częścią (zaktualizowano Q i dodano A)?wp.heartbeat.start();
w swoim JavaScript.post_type_supports
aby obsłużyć to dla każdego niestandardowego typu posta, chciałbym móc dać więcej głosów pozytywnych ;-)Aby usunąć wyskakujące okno blokady edycji , możesz spróbować:
Nie jestem pewien, czy tak jest, ale sprawdziłem źródło
wp_check_post_lock()
i mamy następujące linie:więc pomysł polega na zmianie,
$time_window
więcif
warunek jestfalse
.Aktualizacja:
Aby zastosować to na
edit.php
ekranie,beer
na przykład z niestandardowym typem posta :A następnie możemy dodać:
aby usunąć go również z
post.php
ekranu.Więcej kopania ...
Funkcja
_admin_notice_post_locked()
jest zdefiniowana tuż podwp_set_post_lock()
funkcją. Zawiera następujące linie:więc można również wypróbować
show_post_locked_dialog
filtr:źródło
__return_false()
zamiast tego jako pierwszego czeku$time
sumującego się jakobool TRUE
?$time
sięfalse
więc poszedłem do$time_window
zamiast ...Ostatnią kombinacją, której użyłem, jest
ale jeśli ktoś ma inne ujęcie, chciałbym usłyszeć, ponieważ tak naprawdę nie rozumiem całego obrazu dostępnych filtrów.
źródło
get_current_screen()->post_type
zamiast tego. Oto ładna wtyczka o nazwie Current Admin Info, która pomaga w wyszukiwaniu takich informacji.DOING_AJAX
czeku ... I jak rozumiem, Ajax nie maglobal $current_screen
(zwrócone przezget_current_screen()
).wp_is_autosave()
ma pewności, czy to odpowiada którejkolwiek z tych akcji.add_filter( 'show_post_locked_dialog', '__return_false' );
z funkcji_admin_notice_post_locked()
jest pomocna?wp_ajax_heartbeat()
(wp-admin / include / ajax-Actions.php) za pomocą łańcuchaload-$hook
->get_current_something()
. . . . . Ponadto w tej funkcji są 3 zaczepy, ale nie jestem w stanie zatrzymać ich używania (i mają takie$screen_id
, które pasują do typu postu.Oto ostatnie rozwiązanie, które działa dla mnie. :
źródło