Wordpress file_put_contents and download from ajax

30 views Asked by At

I want to to write data to file and force it to download (wherever user default download location is). I use ajax on button click to get data from database. Following code would write to file in Wordpress uploads directory.

 //js

var postData = [
        {name: 'action', value: 'foo_export_player'},
        {name: 'player_id', value: player_id},
        {name: 'player_title', value: player_title},
    ];

    $.ajax({
        url: apvr_data.ajax_url,
        type: 'post',
        data: postData,
        dataType: 'json',
    }).done(function(response){

        

    }).fail(function(jqXHR, textStatus, errorThrown) {
        console.log(jqXHR.responseText, textStatus, errorThrown);
    });


//php

function foo_export_player(){

        $player_id = $_POST['player_id'];
        $player_title = $_POST['player_title'];

        global $wpdb;
        $wpdb->show_errors(); 

        $tour_table = $wpdb->prefix . "apvr_tours";

        //player
        $stmt = $wpdb->prepare("SELECT * FROM {$tour_table} WHERE id = %d", $player_id);
        $result = $wpdb->get_row($stmt, ARRAY_A);

        if($result){

            $options = unserialize($result['options']);

            $data = stripslashes_deep($options);

            $data['title'] = $result['title'];

            $name = 'avpr_tour_id_'.$player_id.'_title_'.$player_title;
            $path = WP_UPLOADS_DIR.$name.'_'.date('m-d-Y_hia').'.txt';

            if(!file_put_contents($path, serialize($data))){
                return esc_html__('Failed to create backup file. Please try again!', APVR_TEXTDOMAIN);
            };

            header( "Content-Type: text/html" );

            echo json_encode($path);

        }

        wp_die();
        
    }else{
        wp_die();
    }
}
       
    });

This works, but how can I make it download file instead of saving file in $path location?

0

There are 0 answers