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:
// Update Title
'' !== wp_text_diff(
$el['post_title'],
$GLOBALS['post']->post_title
)
AND $GLOBALS['post']->post_title = $el['post_title'];
// Update Content
'' !== wp_text_diff(
$el['post_content'],
$GLOBALS['post']->post_content
)
AND $GLOBALS['post']->post_content = $el['post_content'];
// Update author
$GLOBALS['post']->post_author !== $el['post_author']
AND $GLOBALS['post']->post_author = $el['post_author'];
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
.
<?php
// Add it for logged in users and guests:
add_action( 'comment_form_logged_in_after', 'wpse_proposed_edit_textarea' );
add_action( 'comment_form_after_fields', 'wpse_proposed_edit_textarea' );
function wpse_proposed_edit_textarea()
{
?>
<p class="comment-form-title">
<label for="wpse_propsed_edit">
<?php _e( 'Propose Edit', 'your_textdomain' ); ?>
</label>
<textarea name="wpse_propsed_edit" id="wpse_propsed_edit">
<?php the_content(); ?>
</textarea>
</p>
<input type="hidden" name="comment_approved" id="comment_approved" value="0" />
<?php
}
Deshalb habe ich ein hidden
Feld für comment_approved
mit dem Wert "" hinzugefügt 0
, 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, die add_comment_meta()
beim Speichern mithilfe von hinzugefügt werden müssen . Wenn nicht, könnten Sie etwas in den folgenden Codezeilen verwenden
add_filter( 'pre_comment_approved' , 'wpse_pre_suggest_edit', 100, 2 );
function wpse_pre_suggest_edit( $approved , $commentdata )
{
// You might need to inspect $commentdata
// to determine approval, disapproval, or spam status
if ( ! empty( $commentdata['wpse_propsed_edit'] ) )
{
# Now add a filter to the comment post action, so we save a meta entry
add_action( 'comment_post', 'wpse_set_proposed_edit' );
return 0;
}
return 1;
}
// This function makes it easier for us to identify the comments by their meta value
function wpse_set_proposed_edit( $comment_id );
{
// Only run once
remove_filter( current_filter(), __FUNCTION__ );
add_comment_meta( $comment_id, 'proposed_edit', true, true );
}
Anzeigen der Kommentare auf der Admin-Seite
Hier würde ich mit einer einfachen Klassenerweiterung und einer benutzerdefinierten Administrationsseite gehen:
function wpse_add_proposed_edits_admin_page()
{
add_menu_page(
'Proposed Edits',
'Suggested Edits',
'activate_plugins',
'proposed_edits',
'wpse_proposed_edits_page_cb'
);
}
add_action( 'admin_menu', 'wpse_add_proposed_edits_admin_page' );
function wpse_proposed_edits_page_cb()
{
$proposed_edits_table = new WP_Proposed_Edits_Table();
$proposed_edits_table->prepare_items();
$proposed_edits_table->display();
}
class WP_Proposed_Edits_Table extends WP_List_Table
{
// Override List table default logic in here
}
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 :)