在小部件表单内单击时的DELETE_TRANSPENT

时间:2019-02-14 作者:Nick

我想使用transient 对于我的小部件。用户可以选择数据的缓存时间(1、2、10小时)。我还想添加一个按钮Refresh now 在小部件表单中。

我不知道怎么打电话delete_transient 单击。

我在考虑创建一些隐藏的输入(<input type="hidden" name="refresh-data" value="0" />). 设置1 如果单击按钮。检查内部function widget() 和电话delete_transient 如果需要。但我想我不能0refresh-data 在…内widget 作用

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

我假设小部件和“立即刷新”按钮显示在前端,是吗?删除瞬态的一个选项是使用ajax来完成。

这是一个相当粗糙的例子,但我希望它能让你知道该怎么做。您可以在WordPress中从codex.

// In your php file
add_action( \'wp_ajax_my_delete_transient_action\', \'my_delete_transient_action\' );
add_action( \'wp_ajax_nopriv_my_delete_transient_action\', \'my_delete_transient_action\' ); // for users that are not logged in

function my_delete_transient_action() {

    // Check nonce and other stuff here as needed
    // If and when everything is ok, then use the delete_transient function
    $deleted = delete_transient(\'my_user_specific_transient\'); // returns bool

    // Option 1 to send custom text response back to front-end
    if ($deleted) {
        echo \'Transient deleted\';
    } else {
        echo \'Transient deletion failed\';
    } 
    die();

    // Option 2
    if ($deleted) {
        wp_send_json_success(\'Transient deleted\');
    } else {
        wp_send_json_error(\'Transient deletion failed\');
    }

}

// In your js file
jQuery(document).ready(function($) {
    $(\'.my-reset-button\').on(\'click\',function(event){
        event.preventDefault();
        var data = {
            \'action\': \'my_delete_transient_action\',
        };

        // You can use wp_localize_script in php file to have admin_url( \'admin-ajax.php\' ) available in front-end
        jQuery.post(ajax_object.ajax_url, data, function(response) {
            alert(\'Got this from the server: \' + response); // do something with the response
        });
    });
});

相关推荐

Transients API conditional

我有以下瞬态,但如果用户更改$url的值,则不应使用瞬态。我想知道在瞬态中使用这个变量最合适的方法是什么。我是否应该使用Options API保存$url的值以将其与新值进行比较?if ( false === ( $videos_result = get_transient( \'html\' ) )){ //HTTP API $videos_result = wp_remote_get( $url ); $response_code = wp_r