Yazı içeriğini, başlığı ve yazarı farklılaştırın
Bir ay önce ilgili bir şey yapmak zorunda kaldığımız gibi, işte içerikte veya başlıkta bir değişiklik olup olmadığını veya yazarın değişip değişmediğini kontrol etmek için en kolay ve gelecekteki kanıt yolu (iyi olabilirim):
// 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'];
Senaryomu kısaca açıklamak için: Uzak bir konumdan uzak bir API yoluyla yayın alıyordum. Daha sonra global $post
, orijinal verileri veya yeni verileri içeren tek bir yazı döngüsü sırasında, döndüm . Bu şekilde, değişiklikleri kontrol etmem gerekmeyen diğer tüm posta değerlerini ayarlayarak dolaştım.
Düzenlemeyi önerme
Gönderi içeriğinin bir kopya-düzenlemesinin (geçici olarak) kaydedilebileceği bir yer ararken akılda tutulması gereken ana gerçek, içeriğin bir db girişi olmasıdır longtext
. Dolayısıyla, önerilen düzenlemeyi kaydetmek istediğiniz yer bu gereksinimi karşılamalıdır. Yorumlar bunu yapar.
Sonra onları güzel bir döngü içine yerleştirmek için bir API sundukları güzel bir gerçek var, bu yüzden sorunsuz bir şekilde entegre oluyor, son derece özelleştirilebilir ve hızlı bir şekilde kurulabilir. Son olarak, çoğu tema zaten entegre yorumlarla birlikte gelir, bu nedenle sistemde piggyback yapmak ve neredeyse mevcut herhangi bir temaya bağlanmak kolaydır.
Yorum formunu sadece (ya da) uzatmanızı ya da değiştirmenizi öneririm. Aşağıdakilerden birini kullanın veya çağrılı çağrıyla ek alanlar ekleyin 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
}
Bu yüzden sıraya ayarlamak için değeri olan bir hidden
alan ekledim . Bunun işe yarayıp yaramayacağından ya da bu (çekirdek) değerin aslında yorum meta verileri olup olmadığından ve kaydetme sırasında kullanarak eklenmesi gerekip gerekmediğinden emin değilim . Değilse, bir şey kullanabilirsiniz boyunca aşağıdaki kod satırlarınıcomment_approved
0
add_comment_meta()
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 );
}
Yorumları yönetici tarafında görüntüleme
Burada basit bir sınıf uzantısı ve özel bir yönetici sayfası ile giderdim:
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
}
Daha fazla bilgi WPEngineer'da bulunabilir .
Düzenlemeleri onaylama
Daha sonra, özel eylemler ekleyebilir ve değişiklik olup olmadığını kontrol etmek için gösterdiğim ilk kodu kullanarak önerilen düzenlemeleri işleyebilir ve daha sonra yayını güncelleyebilirsiniz. Yorumun kendisi anahtarlı bir değer içerir comment_post_ID
, bu nedenle düzenlenen yayın kimliğini tanımlamak basittir.
Son not
Son eklentiyi de görmek istiyorum. Lütfen buraya bağlayın :)