Wp_options এ সঞ্চিত ডেটা মুছতে jQuery ব্যবহার করা


10

আমি ভাবছি কেউ আমার সমস্যা সম্পর্কে আমাকে আরও পরামর্শ দিতে পারে কিনা। আমার প্লাগইনের একটি অংশ ডিবাগিংয়ের উদ্দেশ্যে লগ ফাইলগুলি সঞ্চয় করে। আমি এটিকে jquery এবং wp_localise_script ব্যবহার করে আমার প্রশাসক পৃষ্ঠায় (ডিভ # লগ) সাফল্যের সাথে প্রদর্শন করেছি। এই লগগুলি মোছার জন্য আমার কাছে একটি বোতাম আছে তবে কীভাবে এটি প্রক্রিয়া করবেন তা আমি নিশ্চিত নই। আমার একটা অনুভূতি আছে যে এজ্যাক্স এখানে কার্যকর হতে পারে তবে কোথা থেকে শুরু করব তা নিশ্চিত নয়।

এখানে আমার কোড সম্পর্কিত অংশ:

অ্যাডমিন_নেকিউ_স্ক্রিপ্টস (ক্রিয়া)

 $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');

এখন পর্যন্ত এই স্ক্রিপ্টটি সমস্ত লগ ফাইলগুলি দেখানোর জন্য কাজ করছে, এখন কেবল আমার প্রয়োজন # ক্লিয়ার_লগ ক্লিক করার সময় সেগুলি মুছতে। আমি জানি থিমটিতে একটি ডগঅ্যাকশন প্লাগিং পৃষ্ঠা পৃষ্ঠাটি লোড হওয়ার সাথে সাথে এগুলি মুছে ফেলবে, আমার জাভাস্ক্রিপ্টটিকে অকেজো করে তুলবে তাই আমি অনুমান করি যে একমাত্র বিকল্পটি এজাক্স! আমার কি wp_localize_script () এ অন্য রেফারেন্স যুক্ত করতে হবে? কোন সাহায্য প্রশংসা করা হবে।


আপনার সমস্ত ইনপুট জন্য ধন্যবাদ বলছি। অপশনগুলি মোছার জন্য আমি কখনই ননস ব্যবহার করার কথা ভাবিনি। আমি এখনও এটি কাজ করতে যথেষ্ট পাইনি তবে আমি মনে করি এটি আমি কিছু করে ফেলেছি তাই আপনি বোর্ডে যা বলেছেন তা গ্রহণ করে আমার এটির পক্ষে ভাল প্রতিবাদ হবে
ট্রেসি

@ ব্রাসোফিলো আপনার ভাল মন্তব্য করার জন্য ধন্যবাদ। আমি বিশ্বাস করি বর্ণনামূলক হওয়া অন্যকে বুঝতে সাহায্য করে এবং আপনার সমস্যার সাথে আরও বেশি সহায়তা করতে সক্ষম হয়।
ট্রেসি

আরে @ ট্র্যাসি, অনুরোধটি বৈধ কিনা তা নিশ্চিত করার জন্য বাজে কথাটি একবারে একবার যাচাই করা হয়, অর্থাৎ আপনার সাইট থেকে এসেছিল এবং আপনি এটি করতে চেয়েছিলেন। আপনি যদি এখন আপনার কোডটি দিয়ে নিজের পোস্টটি সম্পাদনা করতে চান তবে আমি নিশ্চিত যে সবাই একবার দেখে খুশি হবে।
অ্যান্ড্রু বার্টেল

সে সম্পর্কে দুঃখিত, সেখানে একটি স্বর্ণকেশী মুহূর্ত ছিল! আমি যা করতে চাইছিলাম তা আমি সফলভাবে শেষ করেছি। লগগুলি লোড করতে আমি # ডিবাগ.ক্লিক () এ অজ্যাক্স ব্যবহার করেছি এবং লগগুলি সরাতে আবার # ক্লিয়ার_লগ.ক্লিক () এ আবার অ্যাজ্যাক্স ব্যবহার করেছি। সেখানে সম্ভবত আরও ভাল পদ্ধতি আছে (উদাহরণস্বরূপ 1 এজ্যাক্স কল ব্যবহার করে) তবে এখন এটি কাজ করছে আমি এই তত্ত্বগুলি পরীক্ষা করে দেখতে পারি। আপনার সমস্ত অন্তর্দৃষ্টি জন্য আবার ধন্যবাদ!
ট্রেসি

উত্তর:


7

ওয়ার্ডপ্রেসে অ্যাজাক্স /wp-admin/admin-ajax.php (ডিফল্টরূপে) HTTP পোস্ট প্রেরণে কাজ করে যা এরপরে সংশ্লিষ্ট হুককে আগুন দেয়। সুতরাং, আপনি আপনার মুছুন বোতাম দ্বারা চালিত একটি ইভেন্টের সাথে কিছু jquery সংযুক্ত করেন, যা প্রশাসক- ajax.php এ পোস্ট করে, যেখানে একটি ক্রিয়া রয়েছে, বলুন, মুছুন_আমি_পশন (), যা আসলে মুছতে পিএইচপি চালায়। তারপরে, আপনার একটি ফাংশন রয়েছে, যাকে কলব্যাক বলা হয়, এটি আজাক্স অনুরোধটির সফল সমাপ্তিতে চালিত। আপনি উদাহরণস্বরূপ আপনার # লগটি বিভক্ত করার জন্য এটি ব্যবহার করতে পারেন।

সংক্ষেপে, আপনার কাছে তিনটি পদক্ষেপ রয়েছে, ক্রিয়া, এজাক্স এবং কলব্যাক। ক্রিয়াটি একটি ডিওএম ইভেন্ট দ্বারা ট্রিগার করা হয় এবং দুটি হুক, ডাব্লুপি_জ্যাক্স_ {ক্রিয়া_নাম} এবং ডাব্লুপি_জ্যাক্স_নোপ্রিভ_ {ক্রিয়া_নাম} এর সাথে সংযুক্ত থাকে (কেবলমাত্র যদি আপনি লগ ইন ব্যবহারকারীদের এটি করতে সক্ষম না হন তবেই চান)। এই অ্যাকশনটি যখন wp-admin / admin-ajax.php এ পোস্ট করা হয়। এজ্যাক্স হ'ল পিএইচপি (সাধারণত) ফাংশন তাদের কাছে আবদ্ধ। কলব্যাক ফাংশন একটি জাভাস্ক্রিপ্ট ফাংশন যা এজাক্স সফলভাবে শেষ হওয়ার পরে বরখাস্ত করা হয়।

ধাপে ধাপে:

পদক্ষেপ 1, আপনার জেএস ফাইলের মধ্যে

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, আপনার ফাংশন.এফপি বা একটি প্লাগইনে

আপনি যেখান থেকে আপনার জাভাস্ক্রিপ্ট সজ্জিত করেছেন সেটিতে এটি যুক্ত করুন: (ধন্যবাদ @ মেলো)

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, আপনার জেএস ফাইল ফিরে

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

4
আমি এখানে যে জিনিসটি পরিবর্তন করব তা হ'ল ইউআরএল আউটপুট ব্যবহার admin_urlকরা , এটি ইনস্টল নির্দিষ্টকরণের উপর নির্ভর করে অনেক ক্ষেত্রেই হয় না । wp_localize_scriptadmin-ajax.php'/wp-admin/admin-ajax.php'
মিলো

5
আমি বাইরে চলে যেতে হবে wp_ajax_nopriv_clear_log_action। কেন কোনও দর্শনার্থীকে লগ সাফ করার অনুমতি দেওয়া উচিত? :)
ফুসিয়া

2
ঠিক আছে, আমি এটি একটি সাধারণ উদাহরণ হতে চেয়েছিলাম :) তবে, খুব বৈধ পয়েন্টগুলি, nopriv সম্পাদনা করে এবং এজ্যাকারল সেট আপ করে।
অ্যান্ড্রু বার্টেল

5
অতিরিক্তভাবে, আপনার সিএসআরএফ আক্রমণগুলি রোধ করতে একটি বাজে কথা যোগ করা উচিত। এছাড়াও, is_admin () ব্যবহারকারী কোনও প্রশাসক কিনা তা দেখার জন্য একটি বৈধ চেক নয়, এটি আপনি wp- প্রশাসনের পথে আছেন কিনা তা পরীক্ষা করে দেখায়। সুতরাং আপনার বর্তমান_ ব্যবহারকারী_কেন ('ম্যানেজ_পেশন') কিনা তা দেখতে সত্যই পরীক্ষা করা উচিত।
অটো

4
আপনি কেবল তিনটি ভারী ওজন থেকে দুর্দান্ত পরামর্শ পেয়েছেন, উত্তরটি আজাক্সের জন্য অনুকরণীয় ভূমিকা, এই কোডটি অসংখ্যবার অনুলিপি করা হবে, এবং আমার প্রথম কোনও প্রশ্ন এত ভালভাবে লেখা মনে নেই, @ সমস্ত :)
ব্রাসোফিলো
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.