Potrà sembrare strano, ma spesso mi ritrovo a sviluppare siti web in WordPress senza dare troppo peso alla possibilità di sfruttare le potenzialità offerte dal meccanismo Ajax – sebbene, invece, ne faccio larghissimo uso in ambienti Enterprise.
Mi sembra quindi interessante vedere un approccio di base per poter effettuare una chiamata di questo tipo in un sito WordPress.
FRONT-END – PAGE.PHP
Nel front-end, le chiamate ajax non presentano nulla di particolare rispetto all’ambiente Enterprise, se non per lo specifico URL da richiamare:
data = {
‘action’: ‘wpse31321_action’,
‘ID’: id
};
$.ajax({
type: “POST”,
url: ‘/wp-https://www.evermind.it/wp-content/uploads/2016/04/dev_team-1.png/https://www.evermind.it/wp-content/uploads/2016/04/dev_team-1.png-ajax.php’,
data: data ,
dataType: “json”,
success: function (msg) {
},
async: false,
failure: function (msg, ajaxOptions, thrownError) {
alert(‘Error: ‘ + msg.status + ‘ ‘ + msg.statusText + ‘ ‘ + thrownError);
}
});
FUNCTIONS.PHP
add_action( ‘wp_ajax_wpse31321_action’, ‘wpse31321_ajax’ );
add_action( ‘wp_ajax_nopriv_wpse31321_action’, ‘wpse31321_ajax’ );
function wpse31321_ajax()
{
global $wp_query,$paged,$post;
if( isset ( $_POST[‘ID’] ) )
{
while ( $yourPost->have_posts() ) : $yourPost->the_post();
$custom = get_post_custom($post->ID);
endwhile;
echo json_encode($custom);
die();
}
else
{
die( ‘-2’ );
}
}
Come si vede, bisogna porre attenzione ad inserire i due hooks: wp_ajax_wpse31321_action (per gli utenti autenticati) e wp_ajax_nopriv_wpse31321_action (per gli utenti anonimi)