how to use ajax in plugin admin area?
I tried ajax to get some info a php inside my plugin.but getting error-call to undefined function. Ajax
jQuery.ajax({
type: "POST",
url: "<?php echo plugins_url();?>/tester/inc/test.php",
data: { param: 'st1' }
}).done(function( msg ) {
alert( "Data Saved: " + msg );
});
Error in alert
Data Saved: <br />
<font size='1'><table class='xdebug-error xe-fatal-error' dir='ltr' border='1' cellspacing='0' cellpadding='1'>
<tr><th align='left' bgcolor='#f57900' colspan="5"><span style='background-color: #cc0000; color: #fce94f; font-size: x-large;'>( ! )</span> Fatal error: Call to undefined function add_action() in E:\wamp1\wamp\www\wp_twentythirteen\wp-content\plugins\tester\inc\test.php on line <i>7</i></th></tr>
<tr><th align='left' bgcolor='#e9b96e' colspan='5'>Call Stack</th></tr>
<tr><th align='center' bgcolor='#eeeeec'>#</th><th align='left' bgcolor='#eeeeec'>Time</th><th align='left' bgcolor='#eeeeec'>Memory</th><th align='left' bgcolor='#eeeeec'>Function</th><th align='left' bgcolor='#eeeeec'>Location</th></tr>
<tr><td bgcolor='#eeeeec' align='center'>1</td><td bgcolor='#eeeeec' align='center'>0.0007</td><td bgcolor='#eeeeec' align='right'>254944</td><td bgcolor='#eeeeec'>{main}( )</td><td title='E:\wamp1\wamp\www\wp_twentythirteen\wp-content\plugins\tester\inc\test.php' bgcolor='#eeeeec'>..\test.php<b>:</b>0</td></tr>
</table></font>
test.php
<?php
function aj()
{
echo "hello";
echo plugins_url();
}
add_action('wp_ajax_my_action','aj');
add_action('wp_ajax_nopriv_myFunction','aj');
?>
i think the error denote like am not inside wordpress. Any idea?
Answers 3
Please, avoid the use of require('../../../wp-load.php'); and things like that as suggested in other answers. You should always use the Wordpress AJAX way. It is really easy and you will have all Wordpress engine loaded in your PHP script.
Just three considerations:
Example:
In your PHP (plugin/theme):
Your backend javascript should be something like this (remember that ajaxurl is always defined by Wordpress in the admin area):
You are right, because of the way you are making your AJAX call, WordPress is not being loaded. The proper way is to use
ajaxurl
as the URL, and set your action to bemy_action
by passing that as the value of theaction
parameter in your request data:See AJAX in Plugins for more information.
You are not in a WordPress context. You've loaded the plugin file directly. That file will load, but not the rest of WordPress.
Use the AJAX API. This is what it was meant for. Don't use hacks that are no longer necessary like
require
/include
ing WordPress Core files (wp-load.php
,wp-blog-header.php
,wp-settings.php
, depending on which "tutorial" you read)If the examples in the Codex are not enough to get you started, there are numerous examples on this site including 30-something I've written-- this one, in particular, which probably qualifies as one of several "duplicate questions".