functions.php:
// We add the action twice, once for logged in users and once for non logged in users.
add_action( 'wp_ajax_my_action', 'my_action_callback' );
add_action( 'wp_ajax_nopriv_my_action', 'my_action_callback' );
// Enqueue the script on the front end.
add_action( 'wp_enqueue_scripts', 'enqueue_my_action_script' );
// Enqueue the script on the back end (wp-admin)
add_action( 'admin_enqueue_scripts', 'enqueue_my_action_script' );
function my_action_callback() {
$json = array();
if ( isset( $_REQUEST['field2'] ) ) {
$json['message'] = 'Success!';
wp_send_json_success( $json );
} else {
$json['message'] = 'Field 2 was not set!';
wp_send_json_error( $json );
}
}
function enqueue_my_action_script() {
wp_enqueue_script( 'my-action-script', 'path/to/my-action-script.js', array( 'jquery' ), null, true );
wp_localize_script( 'my-action-script', 'my_action_data', array(
'ajaxurl' => admin_url( 'admin-ajax.php' ),
) );
}
my-action-script.js:
(function( $ ) {
'use strict';
$( document ).on( 'ready', function() {
var data = {
action: 'my_action',
field2: 'Hello World',
field3: 3
};
$.getJSON( my_action_data.ajaxurl, data, function( json ) {
if ( json.success ) {
alert( 'yes!' );
} else {
alert( json.data.message );
}
} );
} );
})( jQuery );