I created a Theme Options page where the user can edit some of the theme settings. Now I’m trying to save this options asynchronously but it seems I have some problems integrating the handler file into WP.
The Theme Options is a simple admin page nested under Appearance.
When pressing the save button:
<a id = "save-settings" href = "#" data-nonce = "<?php wp_create_nonce("sace_settings_nonce") ?>"><?php echo _('Save Settings') ?></a>
the following JS script is called:
function(){
jQuery.ajax({
type : 'POST',
url : themeRoot + 'framework/AsyncAction.php',
data: { action : 'save_settings',
name : 'John',}
}).done(function(resp) {
alert(resp);
});
},
The handler .php
file contains:
<?php
include_once('SettingsController.php');
define ('SAVE_SETTINGS', 'save_settings');
add_action('wp_ajax_save_settings', 'save_settings');
function save_settings(){
global $controller;
$name = esc_attr($_POST['name']);
echo 'Hi, ' . $name;
}
?>
Running this code throws the following error:
Fatal error: Call to undefined function add_action()
I also tryied:
- hook the action on init -> same problem
- remove the hook completely. This caused the undefined error to be thrown for
esc_attr()
It seems that I don’t have access to any of the WP functions but I have no idea how to fix it.
Thanks!
WordPress has a native AJAX file that should do all that you want, and this will ensure that all native WP functions are included. If you require additional functionality from ‘framework/AsyncAction.php’, you can
include_once()
, as you do with ‘SettingsController.php’.See the Codex for more information and examples – AJAX in Plugins
If you wish to use AJAX on the front end of your website, you need to add the following lines to your functions.php file –