Podoba mi się pomysł, aby umożliwić każdemu użytkownikowi mojej witryny sugerowanie zmian na stronie. Podobnie jak system edycji na Stack Exchange, ale różni się tym, że każdy powinien móc edytować, nie tylko zarejestrowani użytkownicy. Wszystkie zmiany przechodzą proces zatwierdzania.
Jak mogę to zaimplementować?
plugins
user-access
Patrick Klug
źródło
źródło
Odpowiedzi:
Zróżnicuj treść postu, tytuł i autora
Ponieważ musiałem zrobić coś powiązanego kilka miesięcy temu, oto najłatwiejszy i najbardziej przyszłościowy sposób (który mógłbym w porządku), aby sprawdzić, czy nastąpiła zmiana w treści lub tytule lub czy autor się zmienił:
Aby krótko wyjaśnić mój scenariusz: pobierałem posty ze zdalnej lokalizacji za pośrednictwem zdalnego interfejsu API. Następnie zwróciłem
global $post
, podczas pojedynczej pętli wysyłkowej, albo oryginalne dane, albo nowe dane. W ten sposób poruszałem się, ustawiając wszystkie pozostałe wartości wpisów, których nie musiałem sprawdzać pod kątem zmian.Proponowanie zmiany
Najważniejszym faktem, o którym należy pamiętać podczas wyszukiwania miejsca, w którym można (tymczasowo) zapisać kopię edycji treści postu, jest to, że treść jest wpisem db
longtext
. Zatem miejsce, w którym chce się zapisać sugerowaną edycję, powinno spełniać ten wymóg. Komentarze tak robią.Jest też miły fakt, że oferują one interfejs API, który ładnie umieszcza je w pętli, dzięki czemu integruje się płynnie, jest wysoce konfigurowalny i można go szybko skonfigurować. I wreszcie, większość motywów ma już zintegrowane komentarze, więc łatwo jest nałożyć na system piggyback i podłączyć się do prawie dowolnego dostępnego motywu.
Proponuję po prostu (albo) rozszerzyć lub zmienić formularz komentarza. Użyj poniższych lub dodaj dodatkowe pola z połączeniem zwrotnym
comment_form_default_fields
.Dodałem więc
hidden
polecomment_approved
z wartością,0
aby ustawić je w kolejce. Nie jestem pewien, czy to zadziała, czy też ta (podstawowa) wartość faktycznie komentuje metadane i musi zostać dodana przy użyciuadd_comment_meta()
podczas zapisywania. Jeśli nie, możesz użyć czegoś zgodnie z następującymi wierszami koduWyświetlanie komentarzy po stronie administratora
Oto proste rozszerzenie klasy i niestandardowa strona administratora:
Więcej informacji można znaleźć na WPEngineer .
Zatwierdzanie zmian
Następnie możesz dodać niestandardowe akcje i przetworzyć proponowane zmiany przy użyciu pierwszego kodu, który pokazałem, aby sprawdzić, czy nastąpiła zmiana, a następnie po prostu zaktualizować wpis. Sam komentarz zawiera wartość z kluczem
comment_post_ID
, więc identyfikacja edytowanego identyfikatora postów jest prosta.Ostatnia uwaga
Chciałbym również zobaczyć ostateczną wtyczkę. Proszę link tutaj :)
źródło
wp_text_diff()
faktycznego porównania. Głosowanie za innymi odpowiedziami.Mój pomysł jest prosty.
Możesz utworzyć
Edit Suggestion
link na dole postów, który ma niestandardowo zdefiniowany szablon, w tym użyj pola tekstowego (być może z edytorem), które jest połączone z niestandardową taksonomią z domyślną wartościąpost content
.Wszelkie zmiany
content
zostaną porównane zoriginal post content
po przesłaniu (jako wersja robocza) i wprowadzeniuCAPTCHA code
algorytmów Diff, takich jak pakiet inline-diff PHP lub pakiet PEAR Text-Diff lub alternatywnie użycie funkcji PHP zgodnie z tym dla niezbyt długich tekstów z kombinacją CSS.Następnie, zapisując wartości w 3 niestandardowych Meta Boxach (na tej stronie dodawania / edycji zaplecza systematyki), które się wyświetlają
i oszczędzanie
Post ID
może dziękiupdate_option()
funkcji do późniejszego wykorzystania.Po przeczytaniu zredagowanej wersji i akceptacji przez administratora post ten zostanie zastąpiony oryginalnym w miarę kodowania w pliku functions.php.
źródło
Cóż, jest to dość skomplikowane, napisanie poprawnej odpowiedzi zajęłoby sporo czasu. To nie jest prawdziwa odpowiedź, tylko kilka myśli ...
Korzystanie z WordPress wbudowanego
wp_update_post
przez ajax zapewniłoby potrzebną historię zmian, ale nie umożliwiłoby zatwierdzania zmian.Tworzenie wersji roboczych z edycji nie jest domyślnie możliwe, ale zostało omówione tutaj. Czy jest jakiś sposób na sporządzenie wersji opublikowanej strony lub postu? Jakie obejścia zastosowałeś?
Możesz spróbować użyć Front-end Editor, ale nie będziesz mieć kontroli nad publikowanymi edycjami, więc spróbuj połączyć je z inną wtyczką, taką jak Revisionary, która pozwala na edycje oparte na uprawnieniach, nie mam pojęcia, czy będą ze sobą współpracować.
Jeśli nie, będziesz musiał zhakować wtyczkę na podstawie 2 powyższych wtyczek lub napisać coś od zera.
Moje podejście polegałoby na tym, aby mieć przycisk, który przechodzi do innej strony, która wysyła zawartość / dane postu za pomocą JSON , co jest łatwiejsze w pracy, gdy używa się edytorów Ajax i WYSIWYG. Przycisk Zapisz publikowałby jako wersję roboczą zamiast publikować, dzięki czemu miałbyś kontrolę nad zmianami (patrz powyżej dyskusja WPSE na temat tego, jak to zrobić, to raczej zniechęcające).
Są przy tym dodatkowe komplikacje, takie jak odkażanie, kodowanie, spam, obsługa multimediów, pola niestandardowe, znaczniki czasu, pamięć itp. Dobrą wiadomością jest to, że wordpress ma już system poprawek, do którego można się podłączyć i przyzwoitą zdolność obsługi wielu edytorów .
ps. To dobry pomysł na wtyczkę.
źródło