Last active
July 21, 2024 08:53
-
-
Save devinsays/69a305053e35a10584f94d6011bba2d6 to your computer and use it in GitHub Desktop.
Simple WordPress Ajax Example
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?php | |
function example_ajax_enqueue() { | |
// Enqueue javascript on the frontend. | |
wp_enqueue_script( | |
'example-ajax-script', | |
get_template_directory_uri() . '/js/simple-ajax-example.js', | |
array( 'jquery' ) | |
); | |
// The wp_localize_script allows us to output the ajax_url path for our script to use. | |
wp_localize_script( | |
'example-ajax-script', | |
'example_ajax_obj', | |
array( | |
'ajaxurl' => admin_url( 'admin-ajax.php' ), | |
'nonce' => wp_create_nonce( 'example-nonce' ) | |
) | |
); | |
} | |
add_action( 'wp_enqueue_scripts', 'example_ajax_enqueue' ); |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
jQuery(document).ready(function($) { | |
// We'll pass this variable to the PHP function example_ajax_request | |
var fruit = 'Banana'; | |
// This does the ajax request | |
$.ajax({ | |
url: example_ajax_obj.ajaxurl, | |
data: { | |
'action': 'example_ajax_request', | |
'fruit' : fruit, | |
'nonce' : example_ajax_obj.nonce | |
}, | |
success:function(data) { | |
// This outputs the result of the ajax request | |
console.log(data); | |
}, | |
error: function(errorThrown){ | |
console.log(errorThrown); | |
} | |
}); | |
}); |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?php | |
function example_ajax_request() { | |
$nonce = $_POST['nonce']; | |
if ( ! wp_verify_nonce( $nonce, 'example-nonce' ) ) { | |
die( 'Nonce value cannot be verified.' ); | |
} | |
// The $_REQUEST contains all the data sent via ajax | |
if ( isset( $_REQUEST ) ) { | |
$fruit = $_REQUEST['fruit']; | |
// Let's take the data that was sent and do something with it | |
if ( $fruit == 'Banana' ) { | |
$fruit = 'Apple'; | |
} | |
// Now we'll return it to the javascript function | |
// Anything outputted will be returned in the response | |
echo $fruit; | |
// If you're debugging, it might be useful to see what was sent in the $_REQUEST | |
// print_r( $_REQUEST ); | |
} | |
// Always die in functions echoing ajax content | |
die(); | |
} | |
add_action( 'wp_ajax_example_ajax_request', 'example_ajax_request' ); | |
// If you wanted to also use the function for non-logged in users (in a theme for example) | |
add_action( 'wp_ajax_nopriv_example_ajax_request', 'example_ajax_request' ); |
wp_verify_nonce( $nonce, 'example-ajax-script' )
should be wp_verify_nonce( $nonce, 'ajax-nonce' )
And your ajax request is missing method/type as post e.g method: "POST"
wp_verify_nonce( $nonce, 'example-ajax-script' )
should bewp_verify_nonce( $nonce, 'ajax-nonce' )
And your ajax request is missing method/type as post e.gmethod: "POST"
He's right!
Sorry about that. Updated the gist to create example-nonce
and then verify example-nonce
.
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
I can't get it to work. It's always returning Error 400 Bad Request.
Error:
jquery.js?ver=1.12.4-wp:4 GET wp-admin/admin-ajax.php?action=example_ajax_request&fruit=Banana&nonce=ae030e8819 400 (Bad Request)
Wordpress: 5.5.3
Theme: Directory2 (AIT-Themes)