Andrea Cardinali
WP ASYNC 101
An Introduction to wp-ajax and REST API
Wordcamp Bari - 18 Maggio 2019 - @andreacardinali
● Entrepreneur @ Performize
● WP Dev since 2009
● Web Performance Lover
● Speaker
ANDREA CARDINALI
TABLE OF
CONTENTS
WP-AJAX & REST API
1. QUICK INTRODUCTION
2. COMPARISON (PROS & CONS)
3. AUTHENTICATION
4. PERFORMANCE
5. QUESTION TIME
Wordcamp Bari - 18 Maggio 2019 - @andreacardinali
POLL TIME
wp-ajax vs rest api
Wordcamp Bari - 18 Maggio 2019 - @andreacardinali
(wp-)AJAX
Wordcamp Bari - 18 Maggio 2019 - @andreacardinali
● wp-admin stuff
○ plugins with option panel
○ theme customizer
○ heartbeat
● Page Builder 
● Infinite scroll
● WooCommerce ajax cart
JSON REST API
Wordcamp Bari - 18 Maggio 2019 - @andreacardinali
● Gutenberg
● Many plugins (es. CF7)
● WooCommerce API
● WordPress as Backend
STOP HIT REFRESH
(ajax)
Wordcamp Bari - 18 Maggio 2019 - @andreacardinali
ASYNCRONOUS
JAVASCRIPT
AND
XML
Wordcamp Bari - 18 Maggio 2019 - @andreacardinali
ASYNCRONOUS
JAVASCRIPT
AND
XML
Wordcamp Bari - 18 Maggio 2019 - @andreacardinali
ASYNC REQUEST EXAMPLE
jQuery.ajax({
type: "POST",
url: ajaxurl,
data: { action: ‘nome_azione’,
nome: ‘WordCamp Bari’ }
}).done(function( response ) {
alert( response );
});
Wordcamp Bari - 18 Maggio 2019 - @andreacardinali
ASYNC REQUEST EXAMPLE
jQuery.ajax({
type: "POST",
url: ajaxurl,
data: { action: ‘nome_azione’,
nome: ‘WordCamp Bari’ }
}).done(function( response ) {
alert( response );
});
Wordcamp Bari - 18 Maggio 2019 - @andreacardinali
ASYNC REQUEST EXAMPLE
jQuery.ajax({
type: "POST",
url: ajaxurl,
data: { action: ‘nome_azione’,
nome: ‘WordCamp Bari’ }
}).done(function( response ) {
alert( response );
});
Wordcamp Bari - 18 Maggio 2019 - @andreacardinali
var ajaxurl=
<?php echo
admin_url('admin-ajax.php’)
?>
Wordcamp Bari - 18 Maggio 2019 - @andreacardinali
https://www.miosito.it/wp-admin/admin-ajax.php
admin-ajax.php
ASYNC REQUEST EXAMPLE
jQuery.ajax({
type: "POST",
url: ajaxurl,
data: { action: ‘nome_azione’,
nome: ‘WordCamp Bari’ }
}).done(function( response ) {
alert( response );
});
Wordcamp Bari - 18 Maggio 2019 - @andreacardinali
ASYNC REQUEST EXAMPLE
jQuery.ajax({
type: "POST",
url: ajaxurl,
data: { action: ‘nome_azione’,
nome: ‘WordCamp Bari’ }
}).done(function( response ) {
alert( response );
});
Wordcamp Bari - 18 Maggio 2019 - @andreacardinali
url: ajaxurl,
data: { action: ‘nome_azione’,
parametro: ‘parametro_aggiuntivo' }
}).done(function( response ) {
alert( response );
});
add_action("wp_ajax_$action",’my_callback’);
Wordcamp Bari - 18 Maggio 2019 - @andreacardinali
$action=‘nome_azione’;
add_action("wp_ajax_$action",’my_callback’);
function my_callback()
{
echo ‘Hello ‘.$_POST[‘nome’].’!’;
wp_die();
}
Wordcamp Bari - 18 Maggio 2019 - @andreacardinali
ACTION
ASYNC REQUEST
jQuery.ajax({
type: "POST",
url: ajaxurl,
data: { action: ‘nome_azione’,
nome: ‘WordCamp Bari’ }
}).done(function( response ) {
alert( response );
});
Wordcamp Bari - 18 Maggio 2019 - @andreacardinali
Wordcamp Bari - 18 Maggio 2019 - @andreacardinali
ASYNC REQUEST WITH JSON HANDLING
jQuery.ajax({
type: "POST",
url: ajaxurl,
dataType: ‘json’
data: { action: ‘nome_azione’,
nome: ‘WordCamp Bari’ }
}).done(function( response ) {
if(response.success===true)
alert( response.data );
});
add_action("wp_ajax_$action",’my_callback’);
function my_callback()
{
wp_send_json_success( ‘Hello ‘.$_POST[‘nome’].’!’);
}
Wordcamp Bari - 18 Maggio 2019 - @andreacardinali
ACTION WITH JSON RESPONSE
wp_send_json_success($data,$status_code=null)
wp_send_json_error($data,$status_code=null)
wp_send_json($response,$status_code=null)
Wordcamp Bari - 18 Maggio 2019 - @andreacardinali
JSON RESPONSE
//authenticated user only
add_action("wp_ajax_$action",’my_callback’);
//anonymous users
add_action("wp_ajax_nopriv_$action",’my_callback’);
Wordcamp Bari - 18 Maggio 2019 - @andreacardinali
SAME ACTION, DIFFERENT HOOK NAME
(wp-)AJAX
TAKE AWAY
1. admin_url('admin-
ajax.php’)
2. plain html or json
3. $action parameter
4. wp_ajax_{$action}
5. wp_ajax_nopriv_{$action}
Wordcamp Bari - 18 Maggio 2019 - @andreacardinali
WP JSON REST API
Wordcamp Bari - 18 Maggio 2019 - @andreacardinali
JavaScript Object Notation (data representation)
Application Programming Interface (contract)
REpresentational State Transfer (software architecture)
Wordcamp Bari - 18 Maggio 2019 - @andreacardinali
JSON + REST + API
Wordcamp Bari - 18 Maggio 2019 - @andreacardinali
https://2019.bari.wordcamp.org/wp-json/wp/v2/speakers/992
Wordcamp Bari - 18 Maggio 2019 - @andreacardinali
https://2019.bari.wordcamp.org/wp-json/wp/v2/speakers/992
Wordcamp Bari - 18 Maggio 2019 - @andreacardinali
https://www.slideshare.net/AndreaCardinali/rivoluziona-il-tuo-sito-con-le-wp-
rest-api-andrea-cardinali
https://wordpress.tv/2018/04/16/andrea-cardinali-rivoluziona-il-tuo-sito-con-le-
wp-rest-api/
JSON REST API
TAKE AWAY
● REST API
● JSON only
● default since WP 4.7
● Default endpoints
● Custom routes
Wordcamp Bari - 18 Maggio 2019 - @andreacardinali
wp-ajax
vs
REST api
Wordcamp Bari - 18 Maggio 2019 - @andreacardinali
wp-ajax
vs
REST api
● authentication
● performances
Wordcamp Bari - 18 Maggio 2019 - @andreacardinali
AUTHENTICATION
Wordcamp Bari - 18 Maggio 2019 - @andreacardinali
AUTHENTICATION
Wordcamp Bari - 18 Maggio 2019 - @andreacardinali
AUTHENTICATION
admin-ajax
TAKE AWAY
1. COOKIE BASED
2. wp_ajax_$action for
authenticated user
3. wp_ajax_nopriv_$action
for anonymous
Wordcamp Bari - 18 Maggio 2019 - @andreacardinali
AUTHENTICATION
WP REST API
TAKE AWAY
1. COOKIE BASED (by
default)
2. MUST HAVE for C.U.D.
requests
3. ALTERNATIVES
(throught plugins):
HTTP-AUTH,
JWT,
oAuth 1.0a
Wordcamp Bari - 18 Maggio 2019 - @andreacardinali
PERFORMANCES
Wordcamp Bari - 18 Maggio 2019 - @andreacardinali
AJAX REQUEST
LIFECYCLE
Wordcamp Bari - 18 Maggio 2019 - @andreacardinali
/wp-load.php
/wp-config.php
/wp-settings.php
//(plugin,themes, rest-api)
/wp-admin/admin.php
/wp-admin/includes/ajax-actions.php
//… verifica aggio core,plugin ecc
do_action(‘admin_init’)
do_action(‘wp_ajax_$action’)
REST API
REQUEST
LIFECYCLE
Wordcamp Bari - 18 Maggio 2019 - @andreacardinali
/index.php
/wp-blog-header.php
/wp-load.php
/wp-config.php
/wp-settings.php
//(plugins, themes, rest API)
AJAX REQUEST
LIFECYCLE
Wordcamp Bari - 18 Maggio 2019 - @andreacardinali
/wp-admin/admin-ajax.php
/wp-load.php
/wp-config.php
/wp-settings.php
/wp-admin/admin.php
/wp-admin/includes/ajax-actions.php
do_action(‘admin_init’)
do_action(‘wp_ajax_$action’)
/index.php
/wp-blog-header.php
/wp-load.php
/wp-config.php
/wp-settings.php
//(plugins, themes, rest API)
AJAX REQUEST REST API REQUEST
PAY ATTENTION
to
admin-ajax.php
usage
Wordcamp Bari - 18 Maggio 2019 - @andreacardinali
Wordcamp Bari - 18 Maggio 2019 - @andreacardinali
IT DEPENDS!
Wordcamp Bari - 18 Maggio 2019 - @andreacardinali
PLUGINS ● https://it.wordpress.org/plu
gins/heartbeat-control/
● https://wordpress.org/plugin
s/plugin-organizer/
● https://it.wordpress.org/plug
ins/rest-manager/
Wordcamp Bari - 18 Maggio 2019 - @andreacardinali
● WP DEV
● WOOCOMMERCE DEV
● WEB PERFORMANCE
ADDICTED
● REMOTE WORKING
Wordcamp Bari - 18 Maggio 2019 - @andreacardinali
https://www.performize.it/jobs/
THANK YOU!
Andrea Cardinali
Wordcamp Bari - 18 Maggio 2019 - @andreacardinali

WordPress Async 101 - An Introduction to wp-ajax and rest api - WordCamp Bari 2019 - Andrea Cardinali