AJAX-SHORTINIT设置为TRUE将返回空白

时间:2014-10-04 作者:INT

我想我会this nifty shortinit trick 转一圈。然而,当我在自定义ajax处理程序中包含此内容时,我的回调没有得到任何响应。如果我对它进行评论,它的效果很好。有什么变化吗?

<?php
//mimic the actual admin-ajax
define(\'DOING_AJAX\', true);

if (!isset( $_POST[\'action\']))
    die(\'-1\');

ini_set(\'html_errors\', 0);
define(\'SHORTINIT\', true);
require_once(\'wp/wp-load.php\'); 

//Typical headers
header(\'Content-Type: text/html\');
send_nosniff_header();

//Disable caching
header(\'Cache-Control: no-cache\');
header(\'Pragma: no-cache\');


$action = esc_attr(trim($_POST[\'action\']));
$allowed_actions = array(
    \'posts\',
    \'status\',
);

if(in_array($action, $allowed_actions)){
    if(is_user_logged_in())
        do_action(\'handle_tumblr_\'.$action);
    else
        do_action(\'handle_tumblr_nopriv_\'.$action);
}
else{
    die(\'-1\');
} 

function tumblr_status() {
  echo \'whos there?\';
  exit;
}

add_action(\'handle_tumblr_status\',\'tumblr_status\');
add_action(\'handle_tumblr_nopriv_status\',\'tumblr_status\');


function tumblr_posts() {
  echo \'k\';
  exit;
}

add_action(\'handle_tumblr_posts\',\'tumblr_posts\');
add_action(\'handle_tumblr_nopriv_posts\',\'tumblr_posts\');

1 个回复
最合适的回答,由SO网友:Nicolai Grossherr 整理而成

您正在使用esc_attr(), 如果您使用define( \'SHORTINIT\', true ); , 看见source. 所以你要么加载formatting.php 手动或必须挖沟define( \'SHORTINIT\', true ); - 实际上就像你所指的线程中的示例所示。

正如评论中所说,我在第一个不能工作的功能后在心理上检查了一下,但你说得对do_action - 我不能确切地告诉你你需要什么。无论如何,你可能不应该使用SHORTINIT 而且不会有问题。请注意,就我个人而言,我只是AJAX tasks the Wordpress way.

结束