2016-02-19 79 views
0

我已经编写了一个使用Ajax更新客户端并在生产服务器上正常工作的Wordpress插件。如果以完全管理员权限登录,本地wampserver上的相同插件仅返回正确的Ajax响应 - 所有其他用户(包括公共)都会收到只是主页的html响应!Wp ajax本地wamp除非以管理员身份登录

这显然是我的wampserver的一个设置问题,但我感到困惑的是,如果我以管理员身份登录,我可以让插件工作(仅)。

任何指针,以帮助识别问题将不胜感激。

由于几个最初的反应,我已经做了一些调查,相信是有可能发生在我注册的Ajax调用挂钩的PHP函数,除非一个以管理员身份登录重定向。我相信我遵循所有正确的Ajax设置(挂钩既注册了正常也注册了非priv,缓存设置为false,json编码返回并终止于wp_die()等)。我还在10个月前发现了一个有人遇到过类似问题的帖子('whitenoisedb',15年4月24日7:55提问),并且'已解决....在front.page.php中处理AJAX,因为它是不可能的,通过使用管理 - Ajax.php',他仍然想知道为什么它不能做'正确'的方式!

重新迭代,问题只出现在我的本地wampserver开发服务器上,并继续让我神秘。

回答

0

在您的本地服务器上,可能是从wp-admin重定向到主页的重定向,除非您是管理员?如果是这样,你应该使用DOING_AJAX const来防止重定向ajax调用。 例如:

function admin_redirect() 
{ 
    if (is_admin() && !current_user_can('administrator') && !defined('DOING_AJAX')) 
    { 
     wp_safe_redirect(home_url()); 
    } 
} 

add_action('admin_init', 'admin_redirect'); 
+0

谢谢,我试过了,但它没有帮助 - 可能是因为重定向独立于此钩子发生,正如我上面所建议的。 – joe90

+0

这只是一个例子,你可以使用'!defined('DOING_AJAX')'。找到重定向完成的位置并将'!defined('DOING_AJAX')'添加到条件。 –

0

我碰到了这一段时间。查看this section of the codex它谈论“面向查看器的Ajax面向”。有两个动作。一个用于登录的人,另一个用于其他人。具体做法是:

add_action('wp_ajax_my_action', 'my_action_callback'); 
add_action('wp_ajax_nopriv_my_action', 'my_action_callback'); 
+0

谢谢 - 我知道这一点,并已编码,但它不包括我遇到的具体问题,因为你需要登录和管理员才能获得正确的AJAX响应。 – joe90

0

编辑:尝试添加这对你的插件或主题的functions.php文件你正在使用本地:

add_action('send_headers', 'add_custom_headers'); 

function add_custom_headers() { 

    if (true !== WP_DEBUG) { 
     return; 
    } 

    header('Expires: Tue, 01 Jan 2000 00:00:00 GMT'); 
    header('Last-Modified: ' . gmdate('D, d M Y H:i:s') . ' GMT'); 
    header('Cache-Control: no-store, no-cache, must-revalidate, max-age=0'); 
    header('Cache-Control: post-check=0, pre-check=0', false); 
    header('Pragma: no-cache'); 
} 

有几件事情,你可以尝试:

  1. 确保您在AJAX调用中禁用缓存:$.ajax({ url: '...', cache: false })。您也可以使用$.ajaxSetup({ cache: false }),但我会建议您不要这样做,因为它在全球范围内应用该设置,并可能会干扰其他插件和/或主题。

  2. 使用的脚本版本一个随机字符串,以防止它被缓存。我最常做的本地开发时设置WP_DEBUG真我wp-config.php,然后检查是否WP_DEBUG入队我的脚本和样式的时候也是如此。如果是这样,我用time()替换版本字符串。例如:

    $version = (true === WP_DEBUG) ? time() : '1.0.0'; 
    wp_enqueue_script('script', '...', array(), $version, true); 
    
  3. 清除浏览器缓存。

  4. 如果您在本地安装一个缓存插件,请确保您清除缓存有作为。

如果这些都不起作用,请尝试重新启动WAMP进程或重新启动计算机。

+0

谢谢,也尝试了所有这些,所以不要认为这是一个缓存问题。至于重新启动 - 我要为世界纪录... – joe90

+0

编辑:显然你不能添加格式化的代码注释,所以我编辑我原来的帖子与一些代码,你可以添加到您的插件,看看是否修复问题给你。 –

相关问题