Put this function in your theme’s functions.php (or even better, in an ajax.php file in the theme that is require’d in):
/* The function ajax_read_more() will be called when the following URL is requested
* from WordPress:
*
* http://www.yoursite.com/wp-admin/admin-ajax.php?action=read_more&limit=5
*/
function ajax_read_more() {
// Take in a few input parameters from $_GET or $_POST (depending on how you're passing the values) about
// what data to retrieve and display.
$num_limit = (int) $_POST['limit'];
$str_category_name = filter_var($_POST['category_name'], FILTER_SANITIZE_STRING);
// Call some built-in WordPress functions just to demonstrate that we can.
$user_id = get_current_user_id();
// Now let's return some JSON data to whatever called this URL (we can return HTML, XML or whatever else too,
// just make sure to set the appropriate Content-Type header).
$arr_sample_data = array('key' => 'value');
echo json_encode($arr_sample_data);
exit; // You must use exit to end an AJAX function in WordPress, or it'll append a 0 to the output.
}
add_action( 'wp_ajax_read_more', 'ajax_read_more' ); // This action exposes the AJAX action "read_more" to logged-in WordPress users.
add_action( 'wp_ajax_nopriv_read_more', 'ajax_read_more' ); // This action exposes the AJAX action "read_more" to anonymous (not logged in) WordPress users.
Then all you need to do is write a jQuery or even just a regular HTML form that submits a request to your new AJAX URL:
jQuery.ajax({
type: 'get',
url: '/wp-admin/admin-ajax.php?action=read_more&limit=5',
dataType: 'json'
})
.done( function( response ) {
console.log(response);
});
One last thing – visit your WordPress site’s Permalinks page in order to rebuild the list of URLs WordPress will respond to. This will make your new URL (for the AJAX function) active.