ฉันชอบแนวคิดของการเปิดใช้งานผู้ใช้เว็บไซต์ของฉันเพื่อแนะนำการแก้ไขหน้าเว็บ เหมือนกับระบบการแก้ไขใน Stack Exchange แต่ต่างกันตรงที่ทุกคนควรสามารถแก้ไขได้ไม่ใช่แค่ผู้ใช้ที่ลงทะเบียน การแก้ไขทั้งหมดจะต้องผ่านกระบวนการอนุมัติ
ฉันจะใช้สิ่งนั้นได้อย่างไร
ฉันชอบแนวคิดของการเปิดใช้งานผู้ใช้เว็บไซต์ของฉันเพื่อแนะนำการแก้ไขหน้าเว็บ เหมือนกับระบบการแก้ไขใน Stack Exchange แต่ต่างกันตรงที่ทุกคนควรสามารถแก้ไขได้ไม่ใช่แค่ผู้ใช้ที่ลงทะเบียน การแก้ไขทั้งหมดจะต้องผ่านกระบวนการอนุมัติ
ฉันจะใช้สิ่งนั้นได้อย่างไร
คำตอบ:
ดังที่ได้ทำบางสิ่งที่เกี่ยวข้องเมื่อหลายเดือนที่ผ่านมานี่เป็นวิธีการพิสูจน์ที่ง่ายและอนาคตที่สุด (ซึ่งฉันทำได้ดี) เพื่อตรวจสอบว่ามีการเปลี่ยนแปลงเนื้อหาหรือชื่อเรื่องหรือไม่หรือผู้แต่งเปลี่ยนแปลง:
// 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
ระหว่างโพสต์ลูปเดียวที่มีข้อมูลดั้งเดิมหรือข้อมูลใหม่ ด้วยวิธีนี้ฉันย้ายไปรอบ ๆ การตั้งค่าโพสต์อื่น ๆ ทั้งหมดที่ฉันไม่จำเป็นต้องตรวจสอบการเปลี่ยนแปลง
ความจริงหลักหนึ่งที่มีการเก็บไว้ในใจเมื่อค้นหาสถานที่ที่สำเนาแก้ไขเนื้อหาที่โพสต์อาจจะ (ชั่วคราว) longtext
บันทึกไว้ว่าเนื้อหาเป็นรายการที่ฐานข้อมูลของ สถานที่ที่ต้องการบันทึกการแก้ไขที่แนะนำควรเป็นไปตามข้อกำหนดนั้น ความเห็นทำอย่างนั้น
จากนั้นมีข้อเท็จจริงที่ดีที่พวกเขาเสนอ API เพื่อให้พวกเขาอยู่ในวงดังนั้นมันจึงรวมได้อย่างราบรื่นปรับแต่งสูงและสามารถติดตั้งได้อย่างรวดเร็ว สุดท้าย แต่ไม่ท้ายสุดธีมส่วนใหญ่มาพร้อมกับความคิดเห็นที่รวมเข้าด้วยกันดังนั้นมันจึงเป็นเรื่องง่ายสำหรับ piggyback บนระบบและเชื่อมต่อกับธีมที่มีอยู่เกือบทั้งหมด
ฉันขอแนะนำให้ขยายหรือแก้ไขแบบฟอร์มความคิดเห็น 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
ดังนั้นการระบุรหัสโพสต์ที่แก้ไขจึงตรงไปข้างหน้า
ฉันต้องการที่จะเห็นปลั๊กอินสุดท้ายเช่นกัน กรุณาลิงค์ได้ที่นี่ :)
wp_text_diff()
สำหรับการเปรียบเทียบจริง โหวตขึ้นสำหรับคำตอบอื่น ๆ
ความคิดของฉันเป็นสิ่งที่ง่าย
คุณสามารถสร้างEdit Suggestion
ลิงค์ที่ด้านล่างของโพสต์ที่มีเทมเพลตที่กำหนดเองซึ่งใช้เท็กซ์บ็อกซ์ (อาจมีตัวแก้ไข) ที่เชื่อมโยงกับอนุกรมวิธานที่กำหนดเองซึ่งมีค่าเริ่มต้นpost content
เป็น
การเปลี่ยนแปลงใด ๆcontent
จะถูกเมื่อเทียบกับoriginal post content
หลังจากส่ง (เป็นฉบับร่าง) และการป้อนCAPTCHA code
กับขั้นตอนวิธี Diff เช่นPHP อินไลน์ diffแพคเกจหรือ ข้อความ Diffแพคเกจลูกแพร์หรืออีกวิธีหนึ่งคือการใช้ฟังก์ชัน PHP ตามนี้สำหรับข้อความไม่ยาวเกินไปกับการรวมกันของ CSS
จากนั้นให้บันทึกค่าในกล่อง Meta ที่กำหนดเอง 3 รายการ (ในหน้า taxonomy back-end เพิ่ม / แก้ไข) ที่แสดง
และPost ID
อาจบันทึกด้วยupdate_option()
ฟังก์ชันสำหรับใช้ในภายหลัง
หลังจากอ่านรุ่นที่แก้ไขและยอมรับโดยผู้ดูแลระบบโพสต์นั้นจะถูกแทนที่ด้วยต้นฉบับในขณะที่คุณเขียนรหัสไว้ใน
นี่มันค่อนข้างซับซ้อนคำตอบที่ถูกต้องจะใช้เวลาพอสมควรในการเขียน ดังนั้นนี่ไม่ใช่คำตอบที่แท้จริงเพียงแค่ความคิดบางอย่าง ..
การใช้ WordPress บิวด์อินwp_update_post
ผ่านอาแจ็กซ์จะให้ประวัติการแก้ไขที่คุณต้องการ แต่ไม่ใช่ความสามารถที่จำเป็นในการอนุมัติการแก้ไข
การสร้างแบบร่างจากการแก้ไขเป็นไปไม่ได้โดยค่าเริ่มต้น แต่มีการพูดคุยกันที่นี่มีวิธีใดในการร่างการแก้ไขหน้าที่เผยแพร่หรือโพสต์ คุณใช้วิธีแก้ปัญหาแบบใด
คุณสามารถลองและใช้Front-end Editorแต่คุณจะไม่สามารถควบคุมการแก้ไขที่ถูกเผยแพร่ดังนั้นลองและคลุกเคล้ากับปลั๊กอินอื่นเช่นRevisionaryที่อนุญาตให้มีการแก้ไขตามสิทธิ์ฉันไม่คิดว่าพวกเขาจะทำงานร่วมกัน
หากพวกเขาไม่คุณจะต้องแฮ็คปลั๊กอินตาม 2 ปลั๊กอินข้างต้นหรือเขียนอะไรบางอย่างตั้งแต่เริ่มต้น
วิธีเริ่มต้นของฉันคือการมีปุ่มที่ไปยังหน้าอื่นที่แสดงผลเนื้อหา / ข้อมูลโพสต์โดยใช้JSONซึ่งจะใช้งานได้ง่ายขึ้นเมื่อใช้โปรแกรมแก้ไขAjaxและ WYSIWYG ปุ่มบันทึกจะโพสต์เป็นแบบร่างแทนที่จะเผยแพร่และวิธีที่คุณสามารถควบคุมการแก้ไขได้ (ดูการอภิปราย WPSE ด้านบนเกี่ยวกับวิธีการทำสิ่งนี้ให้สำเร็จมันค่อนข้างน่ากลัว)
มีภาวะแทรกซ้อนเพิ่มเติมเมื่อทำเช่นการฆ่าเชื้อ, การเข้ารหัส, สแปม, การจัดการสื่อ, ฟิลด์ที่กำหนดเอง, การประทับเวลา, หน่วยความจำ ฯลฯ ข่าวดีก็คือ wordpress มีระบบการแก้ไขที่คุณสามารถเสียบและความสามารถที่ดีในการจัดการบรรณาธิการหลาย .
PS นี่เป็นความคิดที่ดีสำหรับปลั๊กอิน