Bedakan dengan konten, judul, dan penulis
Seperti yang harus dilakukan terkait sesuatu beberapa bulan lalu, inilah cara bukti termudah dan paling masa depan (yang saya bisa baik-baik saja) untuk memeriksa apakah ada perubahan pada konten atau judul atau jika penulis berubah:
// 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'];
Untuk menjelaskan skenario saya secara singkat: Saya mengambil posting dari lokasi terpencil melalui API jarak jauh. Kemudian saya mengembalikan global $post
, selama satu posting loop, berisi data asli atau data baru. Dengan cara ini saya berpindah pengaturan semua nilai posting lain yang saya tidak perlu memeriksa perubahan.
Mengusulkan hasil edit
Fakta utama yang harus diingat ketika mencari tempat di mana salinan-edit konten posting dapat (sementara) disimpan adalah bahwa kontennya adalah entri db longtext
. Jadi tempat di mana seseorang ingin menyimpan hasil edit yang disarankan harus memenuhi persyaratan itu. Komentar melakukan itu.
Lalu ada fakta bagus bahwa mereka menawarkan API untuk menempatkan mereka dengan baik dalam satu lingkaran, sehingga terintegrasi dengan lancar, sangat dapat dikustomisasi dan dapat dengan cepat diatur. Terakhir namun tidak kalah penting, sebagian besar tema telah hadir dengan komentar yang terintegrasi sehingga mudah untuk membonceng sistem dan menghubungkan ke hampir semua tema yang tersedia.
Saya sarankan untuk hanya memperpanjang atau mengubah formulir komentar. Gunakan salah satu dari berikut ini atau tambahkan bidang tambahan dengan panggilan balik yang dikaitkan 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
}
Jadi saya telah menambahkan hidden
bidang comment_approved
dengan nilai 0
untuk mengaturnya dalam antrian. Tidak yakin apakah ini akan berfungsi atau apakah nilai (inti) ini benar-benar mengomentari data meta dan perlu ditambahkan dengan menggunakan add_comment_meta()
saat menyimpan. Jika tidak, Anda bisa menggunakan sesuatu di sepanjang baris kode berikut
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 );
}
Menampilkan komentar di sisi admin
Di sini saya akan pergi dengan ekstensi kelas sederhana dan halaman admin khusus:
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
}
Info lebih lanjut dapat ditemukan di WPEngineer .
Menyetujui pengeditan
Anda kemudian dapat menambahkan tindakan khusus dan memproses pengeditan yang diusulkan menggunakan kode pertama yang saya tunjukkan untuk memeriksa apakah ada perubahan dan kemudian cukup memperbarui kiriman. Komentar itu sendiri memegang nilai dengan kunci comment_post_ID
, jadi mengidentifikasi ID tulisan yang diedit adalah lurus ke depan.
Catatan akhir
Saya juga ingin melihat plugin terakhir. Tolong tautkan di sini :)