Mam niestandardowe pole o nazwie xxxx_url
. xxxx_url
powinno być wyjątkowe.
Przed opublikowaniem postu chcę się upewnić, że xxxx_url
jest on unikalny, czy nie? Jeśli nie jest unikalny, opublikowanie postu powinno zostać odrzucone.
Próbowałem publish_post
. Ale to nie jest poprawne, ponieważ uruchamia się, gdy publikujemy post. Chcę uruchomić mój kod tuż przed publikacją.
custom-field
filters
hooks
actions
Jestem najgłupszą osobą
źródło
źródło
132_url
gdzie132
jest identyfikator posta. Niż zawsze masz tutaj wyjątkową wartość. Poza tym: pola niestandardowe powinny zostać zapisane wsave_post
akcji. W tej akcji możesz sprawdzić niestandardowe pole (jeśli nie jest puste i ma na przykład unikalną wartość) i na podstawie tegoupdate_post_meta
lub nie. Chyba można także sprawdzić pole niestandardowe, a jeśli nie ma unikalną wartość, ustawićpost-status
nadraft
lub coś innego, do publikowania wyłączyć. W przeciwnym razie myślę, że potrzebujesz jQuery, aby to zrobić.Odpowiedzi:
Na początku
wp_insert_post
funkcji zapisującej / aktualizującej wpis znajduje się filtr o nazwiewp_insert_post_empty_content
. Domyślnie ten filtr sprawdza, czy wszystkie pola tytułu, edytora i fragmentu są puste, w takim przypadku proces zapisywania zostanie zatrzymany.Ponieważ jednak wszystkie pola, które mają zostać zapisane, są przekazywane do tego filtra, możesz go rozwinąć, aby uwzględnić każdy inny test określający, czy post należy uznać za pusty. Byłoby to coś takiego:
Uwaga: funkcja musi zwrócić „prawda”, aby zatrzymać proces zapisywania.
Jeśli niestandardowe pole nie jest unikalne, możesz także chcieć wyświetlić ostrzeżenie.
źródło
wp_insert_post_empty_content
jest semantycznie przeznaczone do pustych treści . Powiedziawszy to, nie znalazłem też żadnego haczyka, który byłby semantycznie odpowiedni do tego.wp_insert_post_valid_content
aby to wyrazić, ale dla reszty jest on dokładnie we właściwym miejscu.wp_insert_post_empty_content
filtr?Co powiesz na użycie AJAX-a do sprawdzenia niepowtarzalności przed wysłaniem postu do publikacji?
Chociaż kod nie jest testowany, ale powinien działać. Być może będziesz musiał z nim zagrać, aby uzyskać pożądany rezultat.
źródło
Chciałbym podłączyć się do filtru wp_insert_post_data i zająć się tym w jak najmniej ingerujący sposób, ponieważ rozumiem, że nie chcesz blokować wstawiania postu, po prostu chcesz uniknąć publikowania postu ze zduplikowanymi meta wartościami.
W tym przypadku nie mogę oszczędzić zbyt wiele, ponieważ nie udostępniono żadnego kodu, ale oto pseudo-kod filtru, który działałby:
Kolejną wielką zaletą tego filtra jest to, że jest on oddzielony od jednego załącznika
wp_insert_attachment_data
.Mam nadzieję, że to pomaga, a cokolwiek robisz, brzmi niesamowicie!
źródło
$data['post_status']
jestpublish
i użytkownik go aktualizuje? Czy opublikowanie posta niedraft
stanowiłoby404
problemu dla tego postu?Czek powinien iść do
wp_insert_post
. Ten hak jest uruchamiany za każdym razem, gdy post jest publikowany lub edytowany.Tam możesz wykonać niestandardowe zapytanie, aby sprawdzić, czy którykolwiek post ma już tę samą
xxxx_url
wartość, czy nie.źródło
wp_insert_post
akcja jest uruchamiana po zapisaniu postu, nie może zablokować publikowania lub wstawiania postu.If it isn't unique it should reject publishing post.
w moim pytaniu.