Mam niestandardowy typ posta (CPT) o nazwie event
. Mam meta box dla typu z kilkoma polami. Chciałbym zweryfikować niektóre pola przed opublikowaniem wydarzenia. Na przykład, jeśli data wydarzenia nie jest określona, chciałbym wyświetlić informacyjny komunikat o błędzie, zapisz to zdarzenie do przyszłej edycji, ale zapobiegaj jego opublikowaniu. Czy status „w toku” dla posta CPT bez wszystkich niezbędnych informacji jest właściwym sposobem na jego potraktowanie?
Jaka jest najlepsza praktyka do sprawdzania poprawności pól CPT i zapobiegania publikowaniu postów, ale zachowaj je do późniejszej edycji.
Wielkie dzięki, Dasha
Odpowiedzi:
Możesz zatrzymać zapisywanie posta razem z drobnymi hackami JQuery i zweryfikować pola przed zapisaniem po stronie klienta lub serwera za pomocą ajax:
najpierw dodajemy JavaScript, aby przechwycić zdarzenie wysyłania / publikowania i używamy go do przesłania własnej funkcji ajax przed faktycznym przesłaniem:
następnie tworzymy funkcję do faktycznej weryfikacji:
zawsze możesz to trochę zmienić, aby wykonać walidację tylko dla swojego typu postu, dodając warunkową kontrolę
my_publish_admin_hook
działania dla twojego typu postu i sprawdzania poprawności po stronie klienta, ale ja wolę po stronie serwera.źródło
pre_submit_validation
pasuje.my_publish_admin_hook
blok przechwytuje przesyłanie po stronie po stronie klienta - ale następnie wykonuje wywołanie AJAX do serwera (przed oficjalnym przesłaniempre_submit_validation
), który wykonuje weryfikację po stronie serwera.Metoda składa się z dwóch etapów: po pierwsze, funkcja zapisywania niestandardowych danych pola metaboksu (podpięta do save_post), a po drugie, funkcja odczytywania nowego post_meta (właśnie zapisanego), sprawdzania go i modyfikowania wyniku zapisywanie w razie potrzeby (również podpięte do save_post, ale po pierwszym). Funkcja sprawdzania poprawności, jeśli sprawdzanie poprawności się nie powiedzie, faktycznie zmienia stan post_status z powrotem na „oczekujący”, skutecznie zapobiegając opublikowaniu posta.
Ponieważ funkcja save_post jest często wywoływana, każda funkcja musi sprawdzać, czy jest wykonywana tylko wtedy, gdy użytkownik chce opublikować, i tylko w przypadku niestandardowego typu postu (typ niestandardowy).
Zazwyczaj dodaję też niestandardowe komunikaty z powiadomieniami, aby pomóc użytkownikowi dowiedzieć się, dlaczego jego post nie został opublikowany, ale dodanie ich tutaj jest nieco skomplikowane ...
Nie testowałem dokładnie tego kodu, ale jest to uproszczona wersja tego, co zrobiłem w niestandardowych konfiguracjach typu post na dużą skalę.
W przypadku wielu pól metaboksu wystarczy dodać więcej znaczników ukończenia i pobrać więcej post_meta i wykonać więcej testów.
źródło
musisz sprawdzić / zweryfikować wartość pola meta na stronie ajax, tj. kiedy użytkownik naciśnie przycisk „Publikuj / Aktualizuj”. Tutaj sprawdzam poprawność produktu woocommerce o polu meta „numer_produktu” pod kątem pustej wartości.
Po tym dodaj funkcję obsługi ajax,
źródło
Chciałem tylko dodać, że aby odczytać zmienne wpisu, korzystając z rozwiązania Bainternet, będziesz musiał przeanalizować ciąg znaków przy
$_POST['form_data']
użyciuparse_str
funkcji PHP (aby zaoszczędzić trochę czasu na badania).Następnie możesz uzyskać dostęp do każdej zmiennej za pomocą
$varname
. Na przykład, jeśli masz pole meta o nazwie „my_meta”, uzyskasz do niego dostęp w następujący sposób:źródło