จะเปิดใช้งานการแก้ไขที่แนะนำได้อย่างไร


19

ฉันชอบแนวคิดของการเปิดใช้งานผู้ใช้เว็บไซต์ของฉันเพื่อแนะนำการแก้ไขหน้าเว็บ เหมือนกับระบบการแก้ไขใน Stack Exchange แต่ต่างกันตรงที่ทุกคนควรสามารถแก้ไขได้ไม่ใช่แค่ผู้ใช้ที่ลงทะเบียน การแก้ไขทั้งหมดจะต้องผ่านกระบวนการอนุมัติ

ฉันจะใช้สิ่งนั้นได้อย่างไร


1
ฉันไม่รู้จะทำอย่างไร แต่ฉันคิดว่านี่อาจเป็นปัญหาได้ ฉันคิดว่าคุณจะได้รับจดหมายขยะจำนวนมาก
Martin Thoma

3
คุณคิดว่าคุณต้องการการติดตั้ง WordPress สำหรับเว็บไซต์ของคุณหรือไม่? ฟังก์ชั่นที่คุณต้องการฟังดูเหมือนการติดตั้งMediaWiki คุณควรคำนึงถึงข้อดีข้อเสียของการติดตั้งทั้งคู่ MediaWiki เป็นทางเลือกที่ดี
Marc Dingena

ฉันกระเด้งกลับมาพร้อมกับความคิดนี้สักพัก ที่ใกล้เคียงกับวิธีการแก้ปัญหาที่มีอยู่เป็นปลั๊กอินนี้: wordpress.org/support/plugin/post-forkingแต่มันเป็นในมากขั้นเริ่มต้น ปลั๊กอินถูก จำกัด ให้กับผู้ใช้ที่ลงทะเบียน
Christine Cooper

เราได้ทำอะไรแบบนี้ เราคาดว่าจะมีการแก้ไขสไตล์วิกิพีเดียสำหรับโพสต์พร้อมกับวิดเจ็ต "ประวัติ": github.com/publishpress/Revisionary/issues/13เรายังไม่ได้มี แต่โครงสร้างเกือบทั้งหมดอยู่ในสถานที่
steveburge

คำตอบ:


11

กระจายเนื้อหาโพสต์ชื่อเรื่องและผู้แต่ง

ดังที่ได้ทำบางสิ่งที่เกี่ยวข้องเมื่อหลายเดือนที่ผ่านมานี่เป็นวิธีการพิสูจน์ที่ง่ายและอนาคตที่สุด (ซึ่งฉันทำได้ดี) เพื่อตรวจสอบว่ามีการเปลี่ยนแปลงเนื้อหาหรือชื่อเรื่องหรือไม่หรือผู้แต่งเปลี่ยนแปลง:

// 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ดังนั้นการระบุรหัสโพสต์ที่แก้ไขจึงตรงไปข้างหน้า

หมายเหตุสุดท้าย

ฉันต้องการที่จะเห็นปลั๊กอินสุดท้ายเช่นกัน กรุณาลิงค์ได้ที่นี่ :)


1
ฉันให้รางวัลกับคำถามนี้เพื่อให้แนวคิดในการใช้ meta ความคิดเห็นเพื่อจัดเก็บการแก้ไขที่แนะนำและwp_text_diff()สำหรับการเปรียบเทียบจริง โหวตขึ้นสำหรับคำตอบอื่น ๆ
fuxia

8

ความคิดของฉันเป็นสิ่งที่ง่าย

  • คุณสามารถสร้างEdit Suggestionลิงค์ที่ด้านล่างของโพสต์ที่มีเทมเพลตที่กำหนดเองซึ่งใช้เท็กซ์บ็อกซ์ (อาจมีตัวแก้ไข) ที่เชื่อมโยงกับอนุกรมวิธานที่กำหนดเองซึ่งมีค่าเริ่มต้นpost contentเป็น

  • การเปลี่ยนแปลงใด ๆcontentจะถูกเมื่อเทียบกับoriginal post contentหลังจากส่ง (เป็นฉบับร่าง) และการป้อนCAPTCHA codeกับขั้นตอนวิธี Diff เช่นPHP อินไลน์ diffแพคเกจหรือ ข้อความ Diffแพคเกจลูกแพร์หรืออีกวิธีหนึ่งคือการใช้ฟังก์ชัน PHP ตามนี้สำหรับข้อความไม่ยาวเกินไปกับการรวมกันของ CSS

  • จากนั้นให้บันทึกค่าในกล่อง Meta ที่กำหนดเอง 3 รายการ (ในหน้า taxonomy back-end เพิ่ม / แก้ไข) ที่แสดง

    1. เนื้อหาต้นฉบับ
    2. ฉบับแก้ไข
    3. ชื่อเล่นของผู้ใช้และอีเมลของเขา

    และPost IDอาจบันทึกด้วยupdate_option()ฟังก์ชันสำหรับใช้ในภายหลัง

  • หลังจากอ่านรุ่นที่แก้ไขและยอมรับโดยผู้ดูแลระบบโพสต์นั้นจะถูกแทนที่ด้วยต้นฉบับในขณะที่คุณเขียนรหัสไว้ใน


หมายเหตุบางประการ: (A) "ในขณะที่คุณเขียนรหัสใน functions.php" - ไม่เห็นด้วยกับสิ่งนี้ นี่คือวัสดุปลั๊กอิน (B) "เชื่อมโยงกับ taxonomy แบบกำหนดเองที่มีค่าเริ่มต้นของเนื้อหาโพสต์" - คำศัพท์ taxonomy / taxonมีเพียงค่าเดียวที่เป็นไปได้ซึ่งเนื้อหาจะเหมาะสมในทุกกรณี: คำอธิบาย จากนั้นคุณต้องมีที่เก็บโพสต์ ID สิ่งนี้จะอยู่ที่ไหน เนื่องจากไม่มีสถานที่สำหรับสิ่งนี้เนื่องจากข้อ จำกัด ของระบบภาษี WP คุณสามารถบันทึกรหัสประจำตัวได้เท่านั้น จากนั้นเป็นระบบทางเดียว (จำกัด ) เท่านั้น: โพสต์> ข้อมูลคำศัพท์
ไกเซอร์

4

นี่มันค่อนข้างซับซ้อนคำตอบที่ถูกต้องจะใช้เวลาพอสมควรในการเขียน ดังนั้นนี่ไม่ใช่คำตอบที่แท้จริงเพียงแค่ความคิดบางอย่าง ..

การใช้ WordPress บิวด์อินwp_update_postผ่านอาแจ็กซ์จะให้ประวัติการแก้ไขที่คุณต้องการ แต่ไม่ใช่ความสามารถที่จำเป็นในการอนุมัติการแก้ไข

การสร้างแบบร่างจากการแก้ไขเป็นไปไม่ได้โดยค่าเริ่มต้น แต่มีการพูดคุยกันที่นี่มีวิธีใดในการร่างการแก้ไขหน้าที่เผยแพร่หรือโพสต์ คุณใช้วิธีแก้ปัญหาแบบใด

คุณสามารถลองและใช้Front-end Editorแต่คุณจะไม่สามารถควบคุมการแก้ไขที่ถูกเผยแพร่ดังนั้นลองและคลุกเคล้ากับปลั๊กอินอื่นเช่นRevisionaryที่อนุญาตให้มีการแก้ไขตามสิทธิ์ฉันไม่คิดว่าพวกเขาจะทำงานร่วมกัน

หากพวกเขาไม่คุณจะต้องแฮ็คปลั๊กอินตาม 2 ปลั๊กอินข้างต้นหรือเขียนอะไรบางอย่างตั้งแต่เริ่มต้น

วิธีเริ่มต้นของฉันคือการมีปุ่มที่ไปยังหน้าอื่นที่แสดงผลเนื้อหา / ข้อมูลโพสต์โดยใช้JSONซึ่งจะใช้งานได้ง่ายขึ้นเมื่อใช้โปรแกรมแก้ไขAjaxและ WYSIWYG ปุ่มบันทึกจะโพสต์เป็นแบบร่างแทนที่จะเผยแพร่และวิธีที่คุณสามารถควบคุมการแก้ไขได้ (ดูการอภิปราย WPSE ด้านบนเกี่ยวกับวิธีการทำสิ่งนี้ให้สำเร็จมันค่อนข้างน่ากลัว)

มีภาวะแทรกซ้อนเพิ่มเติมเมื่อทำเช่นการฆ่าเชื้อ, การเข้ารหัส, สแปม, การจัดการสื่อ, ฟิลด์ที่กำหนดเอง, การประทับเวลา, หน่วยความจำ ฯลฯ ข่าวดีก็คือ wordpress มีระบบการแก้ไขที่คุณสามารถเสียบและความสามารถที่ดีในการจัดการบรรณาธิการหลาย .

PS นี่เป็นความคิดที่ดีสำหรับปลั๊กอิน

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.