DOING_AJAX
and WP_ADMIN
(this constant is checked within is_admin()
) are defined in admin-ajax.php and set tro true. Both are not very helpfull in this situation.
Add a parameter to your ajax request if the request come from the front-end:
<?php
function my_action_javascript() {
?>
<script type="text/javascript" >
jQuery(document).ready(function($) {
var data = {
action: 'my_action',
frontend_request: true,
whatever: 1234
};
// since 2.8 ajaxurl is always defined in the admin header and points to admin-ajax.php
$.post(ajaxurl, data, function(response) {
alert('Got this from the server: ' + response);
});
});
</script>
<?php
}
In your ajax callback you can now check if the parameter is present and set to true:
$from_frontend = isset( $_REQUEST['frontend_request'] ) && ( TRUE === (bool) $_REQUEST['frontend_request'] );
$doing_ajax = defined( 'DOING_AJAX' ) && TRUE === DOING_AJAX;
$is_frontend_request = $frontend && $doing_ajax;
if( TRUE === $is_frontend_request ){
// yes, this request came from the front-end
echo 'On frontend';
} else {
// no, we are somewhere else
echo 'Somewhere else';
}