![](https://jezgra.online/wp-content/uploads/2022/01/image189.jpg)
Kada radimo plugin u WordPress-u i kada želimo raditi nešto kompliciranije stvari, potrebna nam je i komunikacija sa serverom. U WordPress-u to radimo preko ‘/wp-admin/admin-ajax.php’ ulazne točke/entrypointa. Ukoliko koristimo WP pod ‘podrutom’, možemo koristiti ‘admin_url’ funkciju da dobijemo URL.
admin_url( 'admin-ajax.php' );
Bitne stvari
Kada pravimo hook callback funkciju, bitno je znati da imamo dva hook eventa, ‘wp_ajax_’ i ‘wp_ajax_nopriv_’ za korisnike koji nisu prijavljeni. Isto tako, bitno je da nastavak stringa od ‘wp_ajax_’ i ‘wp_ajax_nopriv_’ bude poslan kao ‘action’ formdata ključ. Što znaći da ako imamo ‘wp_ajax_my_data’ hook naziv, moramo poslati ‘action’:’my_data’ formdata.
Fećnem ti formdatu
Podatke pakiramo u FormData objekt i šaljemo sa JS fetch funkcijom:
const postData = new FormData(); postData.append('action', 'dsijak_ajax_example'); postData.append('data', 'HELLOWORLD'); fetch('/wp-admin/admin-ajax.php', { method: 'POST', body: postData, }) .then(response => response.json()) .then(data => { console.log('Success:', data); }) .catch((error) => { console.error('Error:', error); });
Entrypoint funkcija
U povratnoj funkciji poslane podatke preuzimamo sa ‘$_POST’ array-om a možemo i odrediti tip datoteke koji želimo vratiti. Ono što moramo na kraju napraviti je zatvoriti odgovor sa ‘wp_die()’ funkcijom.
function dsijak_ajaxHandler() { header('Content-type:application/json;charset=utf-8'); $data = $_POST['data']; echo json_encode(['hello'=> $data]); wp_die(); }
Plugin
Idemo napraviti datoteku ‘wp-content/plugins/dsijak-ajax-example/dsijak-ajax-example.php’ sa sadržajem:
<?php /** * Plugin Name: dsijak-ajax-example * Plugin URI: https://blog.ioox.studio * Description: Site extras checkout * Version: 0.1 * Text Domain: dsijak-ajax-example * Author: Damir Sijakovic * Author URI: https://blog.ioox.studio */ add_action( 'wp_ajax_nopriv_dsijak_ajax_example', 'dsijak_ajaxHandler' ); add_action( 'wp_ajax_dsijak_ajax_example', 'dsijak_ajaxHandler' ); function dsijak_ajaxHandler() { header('Content-type:application/json;charset=utf-8'); $data = $_POST['data']; echo json_encode(['hello'=> $data]); wp_die(); } add_action( 'wp_footer', 'dsijak_ajaxSend' ); function dsijak_ajaxSend() { $entryPoint = admin_url('admin-ajax.php'); print " <script> const postData = new FormData(); postData.append('action', 'dsijak_ajax_example'); postData.append('data', 'HELLOWORLD'); fetch('$entryPoint', { method: 'POST', body: postData, }) .then(response => response.json()) .then(data => { console.log('Success:', data); }) .catch((error) => { console.error('Error:', error); }); </script> "; }
Odgovor možemo vidjeti u Developer Tools konzoli (F12).
![](https://jezgra.online/wp-content/uploads/2022/01/Screenshot_2022-01-28_09-49-32.png)
NAPOMENA: Ako imate problema sa duplim kosim crtama “//”, ubacite podatke u base64 pa ih dekodirajte na serveru.