在开发WordPress主题或插件时,我们经常需要添加一些自定义操作,比如我们创建了一个表单,需要提交数据到后端,WordPress为我们提供了admin_post_{$action}钩子来方便我们实现这个后端。
插件说明
钩子名称的动态部分$action
指的是给定的请求操作。
使用方法和示例
这个钩子允许我们为自己的自定义 GET 和 POST 请求创建自定义处理程序。admin_post_
格式为 “admin
_
post_$action
“,其中 $action
是 GET 或 POST 请求的「操作」参数。
使用方法
如果我们需要为「add_foobar
」操作请求创建一个请求或表单处理程序,你可以创建这样的钩子:
add_action( 'admin_post_add_foobar', 'prefix_admin_add_foobar' );
function prefix_admin_add_foobar() {
// 处理请求后,使用echo生成响应或离开PHP使用HTML
}
使用上面的示例,只要向 WordPress 发送 GET 或 POST 请求,且请求的 “操作
“参数设置为「add_foobar
」,该钩子就会自动执行。例如下面的HTML中的操作,当用户点击 “提交 “时,上面的钩子将会被执行。
<a href="http://www.example.com/wp-admin/admin-post.php?action=add_foobar&data=foobarid">提交</a>
<form action="http://www.example.com/wp-admin/admin-post.php" method="post"> <input type="hidden" name="action" value="add_foobar"> <input type="hidden" name="data" value="foobarid"> <input type="submit" value="Submit"> </form>
注:数据值(foobarid
)可在钩子函数中的 $_GET
、$_POST
或 $_REQUEST
数组中可用。
使用示例
以下示例允许你钩子上述 html 中的 GET 或 POST 请求。
add_action( 'admin_post_add_foobar', 'prefix_admin_add_foobar' );
// 这个钩子允许未登录用户提交数据
add_action( 'admin_post_nopriv_add_foobar', 'prefix_admin_add_foobar' );
function prefix_admin_add_foobar() {
status_header(200);
//request handlers should exit() when they complete their task
exit("Server received '{$_REQUEST['data']}' from your browser.");
}
有了钩子,我们就可以很方便在的在后台处理表单提交过来的请求了,这个Hook 类似 wp_ajax_($action) 钩子,不同的是 wp_ajax_($action) 钩子会在我们自定义回调的基础上附加一些处理,如,设置DOING_AJAX常量等。