Mir gefällt die Idee, jedem Benutzer meiner Website die Möglichkeit zu geben, Änderungen an einer Seite vorzuschlagen. Ähnlich wie das Bearbeitungssystem von Stack Exchange, aber anders, dass jeder in der Lage sein sollte, nicht nur registrierte Benutzer zu bearbeiten. Alle Änderungen würden einen Genehmigungsprozess durchlaufen.
Wie könnte ich das umsetzen?
plugins
user-access
Patrick Klug
quelle
quelle
Antworten:
Vergleichen Sie Inhalt, Titel und Autor des Beitrags
Hier ist die einfachste und zukunftssicherste Möglichkeit (die ich in Ordnung bringen kann), um zu überprüfen, ob am Inhalt oder Titel eine Änderung vorgenommen wurde oder ob sich der Autor geändert hat:
Um mein Szenario kurz zu erklären: Ich habe Beiträge von einem entfernten Standort über eine entfernte API abgerufen. Dann gab ich die
global $post
während einer einzelnen Post-Schleife zurück, die entweder die ursprünglichen Daten oder die neuen Daten enthielt. Auf diese Weise habe ich alle anderen Post-Werte festgelegt, die ich nicht auf Änderungen überprüfen musste.Die Bearbeitung vorschlagen
Die wichtigste Tatsache, die man beachten muss, wenn man einen Ort sucht, an dem eine Kopie des Beitragsinhalts (vorübergehend) gespeichert werden kann, ist, dass der Inhalt ein db-Eintrag von ist
longtext
. Der Ort, an dem die vorgeschlagene Bearbeitung gespeichert werden soll, sollte diese Anforderung erfüllen. Kommentare machen das.Hinzu kommt die nette Tatsache, dass sie eine API bieten, mit der sie sich nahtlos in eine Schleife einfügen lassen. Sie lässt sich problemlos integrieren, ist in hohem Maße anpassbar und kann schnell eingerichtet werden. Last but not least sind in den meisten Designs bereits Kommentare integriert, sodass Sie das System problemlos als Huckepack verwenden und in nahezu jedes verfügbare Design einbinden können.
Ich würde vorschlagen, das Kommentarformular nur (entweder) zu erweitern oder zu ändern. Verwenden Sie entweder die folgenden Felder oder fügen Sie zusätzliche Felder hinzu, an die ein Rückruf angehängt ist
comment_form_default_fields
.Deshalb habe ich ein
hidden
Feld fürcomment_approved
mit dem Wert "" hinzugefügt0
, um es in die Warteschlange zu stellen. Ich bin mir nicht sicher, ob dies funktioniert oder ob es sich bei diesem (Kern-) Wert tatsächlich um Kommentar-Metadaten handelt, dieadd_comment_meta()
beim Speichern mithilfe von hinzugefügt werden müssen . Wenn nicht, könnten Sie etwas in den folgenden Codezeilen verwendenAnzeigen der Kommentare auf der Admin-Seite
Hier würde ich mit einer einfachen Klassenerweiterung und einer benutzerdefinierten Administrationsseite gehen:
Weitere Informationen finden Sie auf WPEngineer .
Änderungen werden genehmigt
Sie können dann benutzerdefinierte Aktionen hinzufügen und die vorgeschlagenen Änderungen mit dem ersten angezeigten Code verarbeiten, um zu überprüfen, ob eine Änderung vorliegt, und dann einfach den Beitrag aktualisieren. Der Kommentar selbst enthält einen Wert mit einem Schlüssel von
comment_post_ID
, sodass die Identifizierung der ID des bearbeiteten Beitrags einfach ist.Schlussbemerkung
Ich würde gerne auch das letzte Plugin sehen. Bitte hier verlinken :)
quelle
wp_text_diff()
für den tatsächlichen Vergleich zu verwenden. Upvotes für die anderen Antworten.Meine Idee ist etwas Einfaches.
Sie können einen
Edit Suggestion
Link am Ende von Posts mit einer benutzerdefinierten Vorlage erstellen. Verwenden Sie dazu ein Textfeld (möglicherweise mit einem Editor), das mit einer benutzerdefinierten Taxonomie mit dem Standardwert von verknüpft istpost content
.Alle Änderungen
content
werden im Vergleich zuoriginal post content
nach (als Entwurf) einreichen und EingabeCAPTCHA code
mit Diff - Algorithmen wie PHP Inline-Diff - Paket oder Text-Diff PEAR - Paket oder alternativ mit einer PHP - Funktion nach diesem für nicht allzu lange Texte mit Kombination von CSS.Speichern Sie dann die angezeigten Werte in 3 benutzerdefinierten Meta-Feldern (in dieser Taxonomie-Back-End-Seite zum Hinzufügen / Bearbeiten)
und
Post ID
vielleicht mit einerupdate_option()
Funktion für die spätere Verwendung speichern .Nach dem Lesen der bearbeiteten Version und der Annahme durch den Administrator wird dieser Beitrag durch den ursprünglichen ersetzt, den Sie in functions.php codiert haben.
quelle
Nun, das ist ziemlich kompliziert. Das Schreiben einer richtigen Antwort würde beträchtliche Zeit in Anspruch nehmen. Das ist also keine richtige Antwort, nur ein paar Gedanken.
Wenn Sie das
wp_update_post
über Ajax eingebaute WordPress verwenden, erhalten Sie zwar den erforderlichen Versionsverlauf, jedoch nicht die erforderlichen Funktionen, um Änderungen zu genehmigen.Das Erstellen von Entwürfen aus Bearbeitungen ist standardmäßig nicht möglich, wurde jedoch hier erörtert. Gibt es eine Möglichkeit, eine Überarbeitung einer veröffentlichten Seite oder eines Posts zu erstellen? Welche Problemumgehungen haben Sie verwendet?
Sie können versuchen, den Front-End-Editor zu verwenden , haben aber keine Kontrolle über die Veröffentlichung von Änderungen. Versuchen Sie also, ihn mit einem anderen Plugin wie Revisionary zu kombinieren, das auf Berechtigungen basierende Änderungen zulässt. Ich habe keine Ahnung, ob sie zusammenarbeiten werden.
Wenn dies nicht der Fall ist, müssen Sie ein Plugin hacken, das auf den obigen 2 Plugins basiert, oder etwas von Grund auf neu schreiben.
Mein Ansatz wäre, eine Schaltfläche zu haben, die zu einer anderen Seite führt, die den Inhalt / die Daten der Posts mit JSON ausgibt. Dies ist einfacher, wenn Sie Ajax- und WYSIWYG-Editoren verwenden. Die Schaltfläche Speichern würde als Entwurf anstatt als Veröffentlichung veröffentlicht, und auf diese Weise hätten Sie die Kontrolle über die Bearbeitungen (siehe oben WPSE-Diskussion, wie dies erreicht werden kann, es ist ziemlich entmutigend).
Es gibt zusätzliche Komplikationen, wie z. B. Bereinigung, Codierung, Spam, Medienverarbeitung, benutzerdefinierte Felder, Zeitstempel, Speicher usw. Die gute Nachricht ist, dass WordPress bereits ein Revisionssystem besitzt, in das Sie einbinden können, und dass es mehrere Editoren problemlos verarbeiten kann .
ps. Dies ist eine gute Idee für ein Plugin.
quelle