Khác biệt nội dung bài viết, tiêu đề và tác giả
Như đã phải làm một cái gì đó liên quan một vài tháng trước, đây là cách chứng minh dễ nhất và tương lai nhất (mà tôi có thể ổn) để kiểm tra xem có thay đổi nào đối với nội dung hoặc tiêu đề hay không nếu tác giả thay đổi:
// 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'];
Để giải thích ngắn gọn kịch bản của tôi: Tôi đã tìm nạp các bài đăng từ một vị trí từ xa thông qua API từ xa. Sau đó, tôi đã trả lại global $post
, trong một vòng lặp bài đăng, chứa dữ liệu gốc hoặc dữ liệu mới. Bằng cách này, tôi đã di chuyển xung quanh cài đặt tất cả các giá trị bài đăng khác mà tôi không cần kiểm tra thay đổi.
Đề xuất chỉnh sửa
Thực tế chính người ta phải ghi nhớ khi tìm kiếm một nơi mà bản sao chỉnh sửa nội dung bài đăng có thể được lưu (tạm thời) là nội dung là một mục nhập db longtext
. Vì vậy, nơi mà một người muốn lưu chỉnh sửa được đề xuất phải đáp ứng yêu cầu đó. Bình luận làm điều đó.
Sau đó, có một thực tế tuyệt vời là họ cung cấp API để đặt chúng một cách độc đáo vào một vòng lặp, do đó, nó tích hợp trơn tru, có khả năng tùy biến cao và có thể nhanh chóng được thiết lập. Cuối cùng nhưng không kém phần lớn các chủ đề đã đi kèm với các bình luận được tích hợp để dễ dàng cõng trên hệ thống và nối vào gần như mọi chủ đề có sẵn.
Tôi đề nghị chỉ mở rộng hoặc thay đổi hình thức bình luận. Sử dụng hoặc sau đây hoặc thêm các trường bổ sung với một cuộc gọi lại được nối vào 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
}
Vì vậy, tôi đã thêm một hidden
trường comment_approved
với giá trị 0
để đặt nó trong hàng đợi. Không chắc chắn nếu điều này sẽ hoạt động hoặc nếu giá trị (cốt lõi) này thực sự là nhận xét dữ liệu meta và cần được thêm bằng cách sử dụng add_comment_meta()
trong khi lưu. Nếu không, bạn có thể sử dụng một cái gì đó dọc theo các dòng mã sau đây
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 );
}
Hiển thị các ý kiến về phía quản trị viên
Ở đây tôi sẽ đi với một phần mở rộng lớp đơn giản và một trang quản trị tùy chỉnh:
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
}
Thông tin thêm có thể được tìm thấy trên WPEngineer .
Phê duyệt chỉnh sửa
Sau đó, bạn có thể thêm các hành động tùy chỉnh và xử lý các chỉnh sửa được đề xuất bằng mã đầu tiên tôi đã hiển thị để kiểm tra xem có thay đổi hay không và sau đó chỉ cần cập nhật bài đăng. Nhận xét tự nó giữ một giá trị với một khóa comment_post_ID
, vì vậy việc xác định ID bài đăng đã chỉnh sửa là đơn giản.
Lưu ý cuối cùng
Tôi cũng muốn xem plugin cuối cùng. Vui lòng liên kết nó ở đây :)