I am using the wp-polls plugin on my website. This plugin relies on using AJAX requests of the form http://www.myfakewebsiteurl.com/wp-admin/admin-ajax.php?action=polls&view=process&poll_id=2&poll_2=8&poll_2_nonce=420d75e659
When I log in, this request works fine: it pulls the poll results from the server, and then displays them on the desired web page.
However, when I log out, this request redirects me to the home page. Thus, instead of the poll results appearing, I get the home page loaded where the poll results are supposed to be.
Why would admin-ajax.php redirect visitors to my WordPress-powered site who are not logged in to the home page of my website?
It only redirects when accessed directly, as do all files located in
wp-admin/
. AJAX requests should work fine regardless of authentication status.Edit:
wp-admin/admin-ajax.php
should not redirect in any situation. Perhaps a plugin is redirecting all unauthenticated users to the homepage? By default, accessing files inside wp-admin/ when not logged in should redirect to the login page.Okay, so here’s the deal. Redirect plugins have to do the following to avoid this issue.
It’s that simple. Simple mistake, and easy to fix.
I just had the same issue and for me the reason wasn’t broken plugin code. To find this one, I really needed to debug the wp_redirect code in
wp-includes/pluggable.php:1246
and add the following lines at the beginning of the function:Usually, you may inject such code via a filter like
wp_redirect
but that didn’t work for me since the error occurred before my theme or plugin code was loaded by WordPress. Now, I observed the response body of my AJAX request in the developer network tools of my browser. You may also usetrigger_error(wp_debug_backtrace_summary())
and observe the stacktrace inwp-content/debug.log
(if you enable the debug log).My issue was naming a file in my theme
admin.php
and importing it withinclude_once("admin.php");
. Strangely, the requirement logic starts looking for a file with that name in the upper parent folder,s and thus, it loadawp-admin/admin.php
leading to an authentication error and finally my erroneous redirect.And here goes the solution to my particular issue:
I guess, there are many ways to have such redirect issues. Hopefully, my problem-solving method helps other people out there with their problems.
Greetings,
Thomas