Wp_options में संग्रहीत डेटा को हटाने के लिए jQuery का उपयोग करना


10

मुझे आश्चर्य है कि अगर कोई मेरी समस्या पर मुझे सलाह दे सकता है। डिबगिंग उद्देश्यों के लिए मेरे प्लगइन स्टोर का हिस्सा फाइलों को लॉग करता है। मैंने अपने व्यवस्थापक पृष्ठ में jquery और wp_localise_script का उपयोग करके उन्हें सफलतापूर्वक (div # log) प्रदर्शित किया है। मेरे पास इन लॉग को हटाने के लिए एक बटन है, लेकिन मैं अनिश्चित हूं कि इसे कैसे संसाधित किया जाए। मुझे लगता है कि अजाक्स यहाँ काम में आ सकता है लेकिन निश्चित नहीं है कि कहाँ से शुरू करें।

यहाँ मेरे कोड के प्रासंगिक भाग हैं:

admin_enqueue_scripts (क्रिया)

 $args = array(get_option('wow_tweets_log'));//log files fetched from wp_options table    
    wp_enqueue_script('wow_tweet');//registered earlier on with jQuery dependency
    wp_localize_script('wow_tweet', 'wow_vars', $args);

व्यवस्थापक पृष्ठ

<tr><th scope="row"><strong>Debugging</strong></th><td>
    <div id="debug" class="button-primary">Debug</div><!--debug button shows logs-->
    <div id="hide_debug" class="button-secondary">Hide</div><!--debug button hides logs-->
    <div id="clear_log" class="button-secondary">Empty Log</div><!--Press to delete logs-->
</td></tr>
<tr><th scope="row"></th><td><div id="log"><!--Logs show here--></div></td></tr>

जावास्क्रिप्ट

jQuery(document).ready(function() { 

    var debug_show = jQuery('#log').hide();//hides log by default

    jQuery('#debug').click(function(){//on click shows logs files in div#log
        for (var i = 0, l = wow_vars.length; i < l; i++) {
            var data = wow_vars[i];
        }
        jQuery('#log').show().html(data);

    });
    jQuery('#hide_debug').click(function()
    {
        debug_show.hide();
    }); 
});

लॉग को खाली करने की कार्रवाई

 function clear_log(){
    delete_option('wow_tweets_log');//am stuck on how to invoke this

    /*die();  would go at the end if ajax used*/
 }
 add_action('clear_log','clear_log');

अब तक यह स्क्रिप्ट सभी लॉग फ़ाइलों को दिखाने के लिए काम कर रही है, अब मुझे #clear_log पर क्लिक करते समय सभी को हटाना होगा। मुझे पता है कि init पर एक do_action प्‍लग करना, पेज लोड होते ही उन्‍हें डिलीट कर देगा, जिससे मेरी जावास्क्रिप्ट बेकार हो जाएगी इसलिए मुझे लगता है कि एकमात्र विकल्‍प अजाक्स है! क्या मुझे wp_localize_script () में एक और संदर्भ जोड़ने की आवश्यकता है? किसी भी सहायता की सराहना की जाएगी।


आपके सभी इनपुट के लिए धन्यवाद दोस्तों। मैंने विकल्पों को हटाने के लिए नॉन का उपयोग करने के बारे में कभी नहीं सोचा था। मुझे यह अभी तक काम करने के लिए नहीं मिला है, लेकिन मुझे लगता है कि मैंने ऐसा कुछ किया है, इसलिए मुझे इस पर एक अच्छा काम करना होगा, जो आपने बोर्ड पर कही है
ट्रेसी

@brasofilo अपनी तरह की टिप्पणी के लिए धन्यवाद। मेरा मानना ​​है कि वर्णनात्मक होने से दूसरों को समझने में मदद मिलती है और आप अपनी समस्या के बारे में अधिक मदद कर सकते हैं।
ट्रेसी

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

इसके बारे में क्षमा करें, वहाँ एक गोरा क्षण था! मैंने सफलतापूर्वक वही किया है जो मैं करने का लक्ष्य बना रहा था। मैंने लॉग को लोड करने के लिए # debug.click () पर ajax का उपयोग किया, फिर लॉग हटाने के लिए # clear_log.click () पर फिर से ajax। वहाँ शायद एक बेहतर विधि है (उदाहरण के लिए 1 अजाक्स कॉल का उपयोग करके) लेकिन अब यह काम कर रहा है मैं इन सिद्धांतों का परीक्षण कर सकता हूं। आपकी अंतर्दृष्टि के लिए फिर से धन्यवाद!
ट्रेसी

जवाबों:


7

WordPress में Ajax /wp-admin/admin-ajax.php (डिफ़ॉल्ट रूप से) के लिए एक HTTP पोस्ट भेजकर काम करता है जो तब संबंधित हुक को फायर करता है। तो, आप अपने डिलीट बटन द्वारा ट्रिगर किए गए ईवेंट के लिए कुछ jquery संलग्न करते हैं, जो तब व्यवस्थापक-ajax.php पर पोस्ट करता है, जिसमें एक्शन, कहते हैं, delete_my_options (), जो वास्तव में डिलीट करने के लिए php चलाता है। फिर, आपके पास एक फ़ंक्शन है, जिसे कॉलबैक कहा जाता है, जो कि अजाक्स अनुरोध के सफल समापन पर चलता है। आप उदाहरण के लिए अपने # लॉग आउट को फीका करने के लिए इसका उपयोग कर सकते हैं।

संक्षेप में, आपके पास तीन चरण हैं, क्रिया, अजाक्स और कॉलबैक। कार्रवाई को DOM ईवेंट द्वारा ट्रिगर किया जाता है और दो हुक, wp_ajax_ {action_name} और wp_ajax_nopriv_ {action_name} से जुड़ा होता है (केवल अगर आप चाहते हैं कि कोई लॉग इन करने में सक्षम न हो)। ये आग जब उस क्रिया को wp-admin / admin-ajax.php पर पोस्ट की जाती है। अजाक्स php है (आमतौर पर) समारोह उन्हें झुका दिया। कॉलबैक फ़ंक्शन एक जावास्क्रिप्ट फ़ंक्शन है जिसे अजाक्स के सफलतापूर्वक पूरा होने पर निकाल दिया जाता है।

क्रमशः:

चरण 1, अपनी js फ़ाइल में

jQuery('#hide_debug').click(function()
{
    var data = {};
    data.action = 'clear_log_action';
    data.options_delete_nonce = ajax_object.options_delete_nonce;
    jQuery.post(ajax_object.ajax_url, data, clear_log_callback);

}); 

चरण 2, अपने कार्यों में। Php या एक प्लगइन

इसे उस फ़ंक्शन में जोड़ें जिसे आप अपनी जावास्क्रिप्ट से जोड़ते हैं: (धन्यवाद @Milo)

wp_localize_script( 'my_js_file_name', 'ajax_object', array( 'ajaxurl' => admin_url( 'admin-ajax.php' ) ,   'options_delete_nonce' => wp_create_nonce( 'options_delete_nonce' ), ) );

फिर इसे अपने फ़ंक्शंस में जोड़ें। एफपीपी या प्लगइन:

// Edit: removed the nopriv hook (Thanks @toscho)
add_action('wp_ajax_clear_log_action','clear_log_ajax'); // attach your data.action to wp_ajax and wp_ajax_nopriv and hook your php function
function clear_log_ajax() {
    $nonce = $_POST['options_delete_nonce'];
    // Edit: Added nonces and permissions check (Thanks @Otto)
    if( wp_verify_nonce( $nonce, 'options_delete_nonce' ) && current_user_can( 'manage_options' ) ) {
        delete_option('wow_tweets_log');
        die(); // make sure to put a die() or exit() at the end of your ajax
    }
}

चरण 3, अपनी js फ़ाइल में वापस

// output will be what is echoed from your ajax, if anything
function clear_log_callback(output) 
{
    jQuery('#log').hide();
}

4
एक चीज जो मैं यहां बदलूंगा, वह है URL का उत्पादन करने के लिए उपयोग admin_urlकरना , यह कई मामलों में नहीं है, जो कि इंस्टॉल की गई बारीकियों पर निर्भर करता है। wp_localize_scriptadmin-ajax.php'/wp-admin/admin-ajax.php'
मिलो

5
मैं निकल जाता wp_ajax_nopriv_clear_log_action। किसी भी आगंतुक को लॉग को खाली करने की अनुमति क्यों दी जानी चाहिए? :)
FUXIA

2
खैर, मैं इसे एक सामान्य उदाहरण बनाना चाहता था :) लेकिन, बहुत ही मान्य बिंदुओं ने, नैप्रिव को संपादित किया और स्थापित किए गए अजाक्सुरल में डाल दिया।
एंड्रयू बार्टेल

5
इसके अतिरिक्त, आपको CSRF हमलों को रोकने के लिए एक गैर में जोड़ना चाहिए। इसके अलावा, is_admin () यह देखने के लिए वैध चेक नहीं है कि क्या उपयोगकर्ता एक व्यवस्थापक है, यह देखने के लिए जाँच करता है कि क्या आप wp-admin पथ में हैं। तो आपको वास्तव में यह देखने के लिए जांचना चाहिए कि क्या current_user_can ('manage_options') है।
ओटो

4
आपको सिर्फ तीन भारी वजन से बड़ी सलाह मिली, उत्तर अजाक्स के लिए एक अनुकरणीय परिचय है, इस कोड को कई बार चिपकाया जाएगा, और मुझे याद नहीं है कि एक पहला प्रश्न इतना अच्छा लिखा है, यश को
@all
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.