I got this to work after many hours...and trials and errors. So, I do share how to make ajax work in wordpress with an example (started with https://www.tweaking4all.com/web-development/wordpress/wordpress-ajax-example/#comment-562814 and adapted the example)
--use chrome developer tools and take off cache from network tab
--look to console if you get any errors, first goal is to get to console "ready!" when you click the button and if all works you get some nice output too!
--add to wordpress website as custom html block:
<div id="receiving_div_id">
<p>Nothing loaded yet</p>
</div>
<button id="button_to_load_data">Get Ajax Content</button>
--add to theme/js/button.js (create js folder):
jQuery("#button_to_load_data").click(function() {
console.log( "ready!" );
var data = {
'action' : 't4a_ajax_call', // the name of your PHP function!
'function' : 'show_files', // a random value we'd like to pass
'fileid' : '7' // another random value we'd like to pass
};
jQuery.post(my_ajax_object.ajax_url, data, function(response) {
jQuery("#receiving_div_id").html(response);
});
});
--add to theme functions.php:
/* custom script in theme functions.php */
/* read button.js (->my-script) and localize admin-ajax.php for my-script */
function add_my_script() {
wp_enqueue_script( 'my-script',
get_template_directory_uri() . '/js/button.js',
array ( 'jquery' ),
false,
true
);
wp_localize_script( 'my-script', 'my_ajax_object',
array( 'ajax_url' => admin_url( 'admin-ajax.php' ) ) );
}
add_action( 'wp_enqueue_scripts', 'add_my_script' );
/*ajax result */
add_action('wp_ajax_t4a_ajax_call', 't4a_ajax_call'); // for logged in users only
add_action('wp_ajax_nopriv_t4a_ajax_call', 't4a_ajax_call'); // for ALL users
function t4a_ajax_call(){
echo 'Ajax call output:';
echo '<pre>';
var_dump($_POST);
echo '</pre>';
wp_die();// this is required to terminate immediately and return a proper response
}