业余时间搞wordpress插件开发有一段时间了,关于添加restfull风格api之前搞过,最近改点东西发现居然忘了,折腾好久才弄明白(官网文档有坑啊)。
总的来说,添加rest api有2种方法:
1、register_rest_route方法
register_rest_route( string $namespace, string $route, array $args = array(), bool $override = false )
add_action('rest_api_init', function () {
register_rest_route('ssc_api/v1', '/test', array(
'methods' => 'GET',
'callback' => 'seekhub_localapi',
// 'callback' => function(){
// wp_send_json(['t' => $_GET['t']]);
// },
));
}
);
访问路由:/wp-json/ssc_api/v1/test 注意,需要在注册的路由命名空间前面加上/wp-json,不然访问不到,官网文档就没说啊。。。
2、do_action( “wp_ajax_{$action}” )方法
官方解释:为登录用户触发经过身份验证的 ajax操作。这个很直观吗,就不多说了,照着文档基本没问题。
const SH_Tag = 'seekhub_collector';
function seekhub_collector_menu_callback(){
wp_enqueue_media();
$TC_Nonce = wp_create_nonce(SH_Tag);
Collector::initData();
// wp_enqueue_media();
include_once(SH_Plugin_DIR.'views/home.php');
}
function seekhub_collector(){
$pdata = array_merge($_POST, $_GET);
if(!isset($pdata['_nonce']) || !wp_verify_nonce($pdata['_nonce'], SH_Tag)){
wp_send_json(['code' => 403, 'msg' => 'hack. '.json_encode($pdata)]);
}
// 解析路由
wp_send_json(Collector::parse($pdata));
}
add_action('wp_ajax_seekhub_collector', 'seekhub_collector');
访问路由:/wp-admin/admin-ajax.php?action=seekhub_collector 通过传参解析路由,并且访问时参数必须携wp_create_nonce(SH_Tag)创建的token.