使用自定义WordPress API公开数据

时间:2012-08-21 作者:cmeigs

我正试图通过Wordpress创建一个API,公开一些后端数据。我得出的结论是,我不能让一个独立的页面(插件)公开这些数据,因为Wordpress总是试图调用它,而它背后一定有某种动作挂钩。

我的解决方案是创建一个AJAX调用,其中不包含触发它的事件,而是一个URL。在主题函数中。php文件我创建了两个动作挂钩:

add_action(\'wp_ajax_nopriv_do_ajax\', \'ajax_return_catalog_info\');
add_action(\'wp_ajax_do_ajax\', \'ajax_return_catalog_info\');
使用我的方法:

function ajax_return_catalog_info() {     
    switch($_REQUEST[\'fn\']) {
       case \'ajax_call_1\':
          // do ajax method 1 here      
          echo json_encode($output);
          break;
       case \'ajax_call_2\':
          // do ajax method 2 here
          echo json_encode($output);
          break;
    }
}
现在,使用以下URL通过web浏览器调用AJAX:

http://mywebsite.com/wp-admin/admin-ajax.php?action=do_ajax&fn=get_brand&id=579
这似乎返回了JSON,这正是我所期望的,但我的浏览器似乎不知道它是JSON,因为它缺少了一些通常从我省略的JavaScript返回的头信息。

我向社区提出的问题是,是否有更好的方法来做到这一点<我是不是走错了路?

非常感谢

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

你需要一个模具();在函数的}关闭之前,您可能希望添加相关的php头来告诉浏览器它的内容类型

我不担心浏览器返回错误的内容类型。

只要加载数据的代码将其视为JSON

因此,对于您的函数,请尝试以下操作

function ajax_return_catalog_info() {
    header(\'Content-type: application/json\');
    switch($_REQUEST[\'fn\']) {
       case \'ajax_call_1\':
          // do ajax method 1 here      
          echo json_encode($output);
          break;
       case \'ajax_call_2\':
          // do ajax method 2 here
          echo json_encode($output);
          break;
    }
    die();
}
如果您没有死,那么最后也会出现一个0,因为它会折叠回Ajax调用函数(返回echo 0;die();

结束