functions.php
文件?我知道当您进行AJAX调用时,会加载一部分WP以处理该调用并发送回响应。 我问的原因是因为他使用的是Meta-Box`插件中的类,并将其加载为主题的一部分。该类中有一些AJAX仅返回空响应,我认为是因为处理响应的代码未加载。 WP处理AJAX时加载的内容是否有任何文档?
#1 楼
admin-ajax.php
负载wp-load.php
:/** Load WordPress Bootstrap */
require_once( dirname( dirname( __FILE__ ) ) . '/wp-load.php' );
wp-load.php
负载wp-config.php
,并且wp-settings.php
也被加载。 br /> // Load the functions for the active theme, for both parent and child theme if applicable.
if ( ! defined( 'WP_INSTALLING' ) || 'wp-activate.php' === $pagenow ) {
if ( TEMPLATEPATH !== STYLESHEETPATH && file_exists( STYLESHEETPATH . '/functions.php' ) )
include( STYLESHEETPATH . '/functions.php' );
if ( file_exists( TEMPLATEPATH . '/functions.php' ) )
include( TEMPLATEPATH . '/functions.php' );
}
因此,是的,主题的
functions.php
已加载。wp-settings.php
中有一个例外: 将
SHORTINIT
较早地定义为TRUE
时,将不会加载主题。因此请出于某种原因检查
SHORTINIT
是否为TRUE
。 br />另一个常见的错误是is_admin()
的错误使用。这始终是TRUE
中的admin-ajax.php
,因此以下操作将失败:正在使用HTTP标头调试AJAX。这是一个简单的辅助函数:
// Stop most of WordPress from being loaded if we just want the basics.
if ( SHORTINIT )
return false;
此插件演示了如何使用它:
if ( ! is_admin() )
// register or execute AJAX stuff
它将在前端添加一个按钮,单击该按钮会触发AJAX请求。打开浏览器的网络控制台,然后查看请求的响应标头:
#2 楼
我假设您的问题AJAX在您登录后仍无法正常工作的情况下正常工作,对吧?WordPress中有一个功能可以为未登录的用户访问基于AJAX的文件:
wp_ajax_nopriv
,例如/* works for logged users */
add_action( 'wp_ajax_my_action', 'my_action_callback');
/* works for non logged users */
add_action( 'wp_ajax_nopriv_my_action', 'my_action_callback');
评论
与以往一样详细,@ toscho。当代码在您的端上运行正常但对其他人不行时,尤其难以调试。似乎无法重现问题,但您的回答可能会向我指示正确的方向。
–曼妮·弗勒蒙德(Manny Fleurmond)
13年4月20日在13:15
@MannyFleurmond我添加了一个调试助手插件。那应该有助于发现问题。
– fuxia♦
13年4月20日在13:46
伙计,你很彻底:)
–曼妮·弗勒蒙德(Manny Fleurmond)
13年4月20日在13:58
TEMPLATEPATH? ;)
– kaiser
13年7月14日在0:16