Admin-post.php的真正目的是什么?

时间:2016-03-08 作者:Krzysztof Przygoda

在用户插件(前端)中寻找适当的表单提交处理时,我偶然发现了这篇文章Handling POST Requests the WordPress Way, 鼓励使用admin-post.php 为此目的。查看页眉,我们可以找到某种确认:

 /**
 * WordPress Generic Request (POST/GET) Handler
 *
 * Intended for form submission handling in themes and plugins.
 *
 * @package WordPress
 * @subpackage Administration
 */
我主要担心的是,此方法来自WP代码的管理部分,在非管理任务中使用它会产生一些歧义。

是否有人(尤其是WP作者)可以确认,这种方法的目的是真正的整体或管理,正如我所想的那样?

2 个回复
SO网友:Adam

admin-post.php 就像一个处理请求的穷人控制器。

它很有用,因为您不需要在其他钩子上处理您的请求,例如init 并检查超全局上是否存在特殊键,如:

function handle_request() {

    if ( !empty($_POST[\'action\']) && $_POST[\'action\'] === \'xyz\' ) {
        //do business logic
    }

}

add_action(\'init\', \'handle_request\');
而是使用admin post。php允许您指定一个回调函数,该函数将始终在任何提供与提供给动作的后缀匹配的动作值的请求上调用。

function handle_request() {

    //do business logic here...

}

add_action( \'admin_post_handle_request\', \'handle_request\' );
add_action( \'admin_post_nopriv_handle_request\', \'handle_request\' );
在上面的示例中,我们可以放弃检查!empty($_POST[\'action\']) && $_POST[\'action\'] === \'xyz\' 因为在这一点上,我们已经处理好了。

这是指定操作参数和值并将所述值过帐到admin-post.php URL。

此外,有益的是admin-post.php 处理两个$_POST$_GET 因此,当然,除非您想进行更复杂的处理,否则没有必要检查请求是哪种方法。

底线:

它使用起来很安全,只是名字让你很反感。

顺便说一下,你还应该记住wp_redirect() 用户根据请求返回到可接受的位置admin-post.php 将只返回一个白色屏幕作为其响应。

SO网友:majick

从使用nopriv 处理(针对未登录用户)admin-post.php 这确实适用于前端和后端表单处理,非常类似于admin-ajax.php 可以使用。

相关推荐

WP-ADMIN:“对不起,您不能访问此页面。”

两周后不使用我们的WP站点,登录/wp-admin/ 出现白屏错误:抱歉,不允许您访问此页面。我有:重命名plugins 到plugins.temp.通过phpMyAdmin创建了一个新的管理员用户。新用户已user_meta 的作用a:1:{s:13:"administrator";s:1:"1";}.</已重命名themes 到themes.temp.</删除核心WordPress文件,并替换为新上载的文件</已替换.htaccess 使用默认