如何在restapi插件中使用动作响应



这一定很简单,但我无法理解。

一个主题有一个ajax操作函数,用于更新用户配置文件。这是代码:

add_action( 'wp_ajax_nopriv_update_profile', 'update_profile' );
add_action( 'wp_ajax_update_profile', 'update_profile' );
if( !function_exists('update_profile') ):
function update_profile(){
//update profile discipline
......    
echo json_encode( array( 'success' => true) );
die();
}
endif;

我正在开发一个插件,它将主题的功能扩展到rest api。现在我想在我的插件中使用上面的操作,并在它返回后做一些事情。但由于它最后有die(),我无法在行动后继续执行。以下是我在插件中的调用方式:

add_action( 'rest_api_init', function () {
register_rest_route( 'mobile-api/v1', '/update-profile', array(
'methods' => 'POST',
'callback' => 'editProfile',
));
});
function editProfile() {
do_action("wp_ajax_update_profile");
$response = array(); //<---- this and next doesn't get executed
$response["works"] = "Voila!";
wp_send_json($response, 200);
}

我试过ob_get_contents(),但它无法通过模具方法。

编辑主题不是一个选项。

如何避免主题动作中的die()并返回自己的响应?

或者在PHP代码中模拟ajax请求的最佳方式是什么。

原因:原始操作中有一个错误。我想通过撤销一件在行动中完成的事情来纠正。

重用函数(如果不能重用,则使其可重用(。不要模仿来自REST API端点处理程序的常规WP-AJAX调用。你只是把事情搞得太复杂了。

最新更新