使用jQuery删除存储在wp_Options中的数据

时间:2013-04-22 作者:Tracy

我想知道是否有人能就我的问题给我进一步的建议。我的插件的一部分存储了用于调试的日志文件。我已经使用jquery和wp\\u localise\\u脚本在我的管理页面的(div#log)中成功地显示了它们。我有一个删除这些日志的按钮,但我不确定如何处理。我觉得ajax可能会在这里派上用场,但不确定从哪里开始。

以下是我的代码的相关部分:

admin_enqueue_scripts (action)

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

Admin Page

<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>

Javascript

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();
    }); 
});

Action to clear log

 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\\u log时删除它们。我知道在init上插入do\\u操作将在页面加载后立即删除它们,这使得我的javascript毫无用处,所以我想唯一的选择是ajax!是否需要添加对wp\\u localize\\u script()的另一个引用?任何帮助都将不胜感激。

1 个回复
最合适的回答,由SO网友:Andrew Bartel 整理而成

WordPress中的Ajax通过向/wp-admin/admin-Ajax发送HTTP帖子来工作。php(默认情况下),然后触发相应的挂钩。因此,将一些jquery附加到由delete按钮触发的事件,然后将其发布到admin ajax。php有一个操作,比如delete\\u my\\u options(),它实际上运行要删除的php。然后,您有一个称为回调的函数,该函数在成功完成ajax请求后运行。例如,您可以使用此选项淡出#log div。

简而言之,您有三个步骤,操作、ajax和回调。该操作由DOM事件触发,并附加到两个挂钩,即wp\\u ajax{action\\u name}和wp\\u ajax\\u nopriv{action\\u name}(仅当您不希望登录用户能够执行此操作时)。当该操作发布到wp admin/admin ajax时,这些将触发。php。ajax是与之挂钩的php(通常)函数。回调函数是一个javascript函数,在ajax成功完成时触发。

Step by step:
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或插件将此添加到javascript排队的函数中:(谢谢@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\' ), ) );
然后将其添加到函数中。php或插件:

// 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();
}

结束

相关推荐

插件中未执行jQuery AJAX调用

我一直在为我的免费插件制作一个输出“捐赠”表单的类。“No thanks”解雇链接隐藏表单并运行AJAX调用以更新跟踪解雇的WP选项。我在实际启动被调用的PHP函数时遇到了问题。我添加了“success”函数来输出一个echo,该echo是我添加到AJAX调用的PHP函数中的(通常,该函数没有输出,只有WP选项更新),但“data”始终为0,数据库中什么都没有发生。我猜WP由于某种原因实际上无法使用该函数。该函数被声明为public,这实际上起到了作用。我不确定我所做的哪些修改会破坏它。下面是我的jQue