Відмінніть вміст публікації, назву та автора
Оскільки я мав зробити щось, пов’язане з цим місяць тому, ось найпростіший і найбільш перспективний спосіб підтвердження (що я можу штрафувати), щоб перевірити, чи є зміна, внесена до змісту чи назви, чи змінив автор:
// 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'];
Щоб пояснити свій сценарій коротко: я виймав публікації з віддаленого місця через віддалений API. Потім я повернув global $post
під час одного повідомлення цикл, що містив або вихідні дані, або нові дані. Таким чином я перемістив налаштування всіх інших значень публікації, які мені не потрібно було перевіряти на зміни.
Пропозиція редагування
Основний факт, про який слід пам’ятати, під час пошуку місця, де можна було (тимчасово) зберегти копію-редагування вмісту публікації, - це те, що вміст є db-записом longtext
. Тому місце, де хочеться зберегти запропоновану редакцію, повинно відповідати цій вимозі. Коментарі це роблять.
Тоді є приємний факт, що вони пропонують API, щоб вони розмістили їх у циклі, тому він інтегрується в плавно, є налаштованим і швидко налаштовується. І останнє, але не в останню чергу, більшість тем вже вбудовані з інтегрованими коментарями, тому їх легко підготувати в систему та підключити майже до будь-якої доступної теми.
Я б запропонував просто (або) розширити або змінити форму коментарів. Скористайтеся поданими нижче або додайте додаткові поля, до яких підключений зворотний дзвінок 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
}
Тож я додав hidden
поле для 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 );
}
Відображення коментарів на стороні адміністратора
Тут я хотів би просте розширення класу та користувацьку сторінку адміністратора:
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
}
Більше інформації можна знайти на WPEngineer .
Схвалення правок
Потім ви можете додати спеціальні дії та обробити запропоновані зміни за допомогою першого коду, який я показав, щоб перевірити, чи відбулися зміни, а потім просто оновити публікацію. Сам коментар має значення з ключем comment_post_ID
, тому ідентифікація відредагованих ідентифікаторів публікацій прямо вперед.
Заключна примітка
Я також хотів би бачити останній плагін. Будь ласка, зв’яжіть це тут :)