सुझाए गए संपादन कैसे सक्षम करें?


19

मुझे अपनी वेबसाइट के किसी भी उपयोगकर्ता को पेज पर संपादन करने के लिए सुझाव देने में सक्षम बनाने का विचार पसंद है। स्टाॅक एक्सचेंज पर एडिट सिस्टम बहुत पसंद है लेकिन इसमें अलग है कि किसी को भी पंजीकृत उपयोगकर्ताओं को संपादित करने में सक्षम होना चाहिए। सभी संपादन अनुमोदन प्रक्रिया से गुजरेंगे।

मैं इसे कैसे लागू कर सकता हूं?


1
मुझे नहीं पता कि यह कैसे करना है, लेकिन मुझे लगता है कि यह वास्तव में समस्याग्रस्त हो सकता है। मुझे लगता है कि आपको बहुत सारे स्पैम मिलेंगे।
मार्टिन थोमा

3
क्या आप सकारात्मक हैं कि आपको अपनी वेबसाइट के लिए वर्डप्रेस इंस्टॉलेशन की आवश्यकता है? आप जिस कार्यक्षमता की इच्छा रखते हैं, वह MediaWiki इंस्टॉलेशन की तरह लगती है । आपको दोनों प्रतिष्ठानों के पेशेवरों और विपक्षों का वजन करना चाहिए। मीडियाविकि एक अच्छा विकल्प है।
मार्क डिंगेना

मैं थोड़ी देर पहले इस विचार के साथ चारों ओर उछल रहा था। उपलब्ध समाधान के सबसे नजदीक यह प्लगइन था: wordpress.org/support/plugin/post-forking यह अभी बहुत प्रारंभिक अवस्था में है। प्लगइन पंजीकृत उपयोगकर्ताओं के लिए प्रतिबंधित है।
क्रिस्टीन कूपर

हम कुछ इस तरह से काम कर रहे हैं। हमने पदों के लिए विकिपीडिया-शैली का संपादन "इतिहास" विजेट के साथ किया है: github.com/publishpress/Revisionary/issues/13 हम अभी तक वहाँ नहीं हैं, लेकिन लगभग सारी संरचना यथावत है।
स्टीवेबर्गे

जवाबों:


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'];

अपने परिदृश्य को संक्षेप में समझाने के लिए: मैं दूरस्थ स्थान से दूरस्थ एपीआई के माध्यम से पोस्ट ला रहा था। फिर मैंने global $postएक पोस्ट लूप के दौरान, मूल डेटा या नए डेटा वाले को लौटा दिया । इस तरह मैं अन्य सभी पोस्ट मानों को सेट करने के लिए इधर-उधर हो गया, जिन्हें मुझे परिवर्तनों की जाँच करने की आवश्यकता नहीं थी।

संपादन का प्रस्ताव

मुख्य तथ्य यह है कि किसी स्थान की खोज करते समय ध्यान रखना चाहिए कि पोस्ट कंटेंट का कॉपी-एडिट (अस्थायी रूप से) बचाया जा सकता है, यह कंटेंट डीबी प्रविष्टि है longtext। तो जिस जगह पर सुझाए गए संपादन को सहेजना है, उस जगह को उस आवश्यकता को पूरा करना चाहिए। टिप्पणियाँ करते हैं।

फिर एक अच्छा तथ्य यह है कि वे एक लूप में उन्हें अच्छी तरह से रखने के लिए एपीआई की पेशकश करते हैं, इसलिए यह आसानी से एकीकृत होता है, अत्यधिक अनुकूलन योग्य है और जल्दी से सेटअप हो सकता है। अंतिम लेकिन कम से कम अधिकांश विषय पहले से ही एकीकृत टिप्पणियों के साथ नहीं आते हैं इसलिए यह सिस्टम पर रंजकता के लिए आसान है और लगभग किसी भी उपलब्ध विषय में हुक करता है।

मैं सिर्फ (या तो) टिप्पणी फ़ॉर्म का विस्तार या परिवर्तन करने का सुझाव दूंगा। निम्नलिखित का उपयोग करें या कॉलबैक हुक के साथ अतिरिक्त फ़ील्ड जोड़ें 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_approved0add_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
मैं सुझाव संपादित करने और wp_text_diff()वास्तविक तुलना के लिए स्टोर करने के लिए टिप्पणी मेटा का उपयोग करने के लिए इस सवाल का इनाम देता हूं । अन्य उत्तरों के लिए अद्यतन।
FUXIA

8

मेरा विचार कुछ सरल है।

  • आप उन Edit Suggestionपोस्टों के नीचे एक लिंक बना सकते हैं , जिनमें एक कस्टम डिफाइन्ड टेम्प्लेट होता है, जिसमें एक टेक्स्टबॉक्स (शायद एक संपादक के साथ) का उपयोग करें जो कि डिफ़ॉल्ट मान के साथ कस्टम टैक्सोनॉमी से जुड़ा हुआ है post content

  • कोई भी परिवर्तन contentकरने के लिए तुलना में किया जाएगा original post content(ड्राफ्ट के रूप में) प्रविष्ट करने और प्रवेश करने के बाद CAPTCHA codeकी तरह Diff एल्गोरिदम के साथ पीएचपी इनलाइन diff पैकेज या पाठ Diff नाशपाती पैकेज या वैकल्पिक रूप से के अनुसार एक PHP समारोह का उपयोग कर इस सीएसएस के संयोजन के साथ नहीं भी लंबी ग्रंथों के लिए।

  • फिर उस शो में 3 कस्टम मेटा बॉक्स (उस टैक्सोनॉमी बैक-एंड ऐड / एडिट पेज) में वैल्यू सेव करके

    1. मूल सामग्री
    2. सम्पादित रूप
    3. उपयोगकर्ता उपनाम और उसका ईमेल

    और बाद में उपयोग के लिए Post IDएक update_option()समारोह के साथ शायद बचत ।

  • व्यवस्थापक द्वारा संपादित संस्करण और स्वीकृति पढ़ने के बाद, उस पोस्ट को मूल रूप से बदल दिया जाएगा जैसा कि आप functions.php में कोडित किया गया था।


कुछ नोट्स: (ए) "के रूप में आप functions.php में कोडित" - इस एक के साथ सहमत नहीं हैं। यह प्लगइन सामग्री है। (बी) "पोस्ट सामग्री के डिफ़ॉल्ट मूल्य के साथ एक कस्टम टैक्सोनॉमी से जुड़ा हुआ" - एक टैक्सोनॉमी शब्द / टैक्सन का केवल एक संभावित मूल्य है जहां सामग्री किसी भी मामले में फिट होगी: विवरण। और फिर आपको पोस्ट आईडी स्टोर करने के लिए जगह की आवश्यकता होगी। यह कहां होगा? चूंकि WPs कर प्रणाली की सीमाओं के कारण इसके लिए कोई जगह नहीं है, आप केवल टर्म आईडी को ही बचा सकते हैं। फिर यह एक (सीमित) वन वे सिस्टम है: पोस्ट> टर्म डेटा।
केसर

4

खैर यह बल्कि जटिल है, एक उचित उत्तर लिखने में काफी समय लगेगा। तो यह एक असली जवाब नहीं है बस कुछ विचार ..

Ajax केwp_update_post माध्यम से वर्डप्रेस बिल्ड का उपयोग करने से आपको आवश्यक संशोधन इतिहास मिलेगा, लेकिन संपादन को अनुमोदित करने के लिए आवश्यक क्षमता नहीं।

संपादन से ड्राफ्ट बनाना डिफ़ॉल्ट रूप से संभव नहीं है, लेकिन यहां चर्चा की गई है, क्या किसी प्रकाशित पृष्ठ या पोस्ट के संशोधन का मसौदा तैयार करने का कोई तरीका है? आपने कौन से वर्कअराउंड का उपयोग किया है?

आप कोशिश कर सकते हैं और प्रयोग सामने के अंत संपादक लेकिन तब आप ऐसा पर कोई नियंत्रण नहीं प्रकाशित किया जा रहा है, इसलिए कोशिश करते हैं और जैसे एक और प्लगइन के साथ साथ यह मैश Revisionary जो आधारित संपादन अनुमतियों के लिए अनुमति देता है, मुझे पता नहीं है, तो वे एक साथ काम करेंगे।

यदि वे नहीं करते हैं, तो आपको 2 से ऊपर प्लगइन्स के आधार पर एक प्लगइन को हैक करना होगा या स्क्रैच से कुछ लिखना होगा।

मेरे स्क्रैच अप्रोच में एक बटन होगा जो दूसरे पेज पर जाता है जो JSON का उपयोग करके पोस्ट कंटेंट / डेटा को आउटपुट करता है , जो कि अजाक्स और WYSIWYG संपादकों का उपयोग करते समय काम करना आसान होता है । सेव बटन पब्लिश होने के बजाय ड्राफ्ट के रूप में पोस्ट होता है और इस तरह से आपको एडिट पर नियंत्रण होता है (इसे पूरा करने के लिए डब्ल्यूपीएसई चर्चा के ऊपर देखें, बल्कि यह चुनौतीपूर्ण है)।

इसे करते समय अतिरिक्त जटिलताएं होती हैं जैसे कि स्वच्छता, एन्कोडिंग, स्पैम, मीडिया हैंडलिंग, कस्टम फ़ील्ड, टाइमस्टैम्प, मेमोरी, आदि। अच्छी खबर यह है कि वर्डप्रेस में पहले से ही एक संशोधन प्रणाली है जिसे आप प्लग कर सकते हैं और कई संपादकों को संभालने की एक सभ्य क्षमता है। ।

ps। यह एक प्लगइन के लिए एक अच्छा विचार है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.