‘wp_ajax’和‘wp_ajax_nopriv’是否仅供经过身份验证和未经过身份验证的用户使用?

时间:2019-01-22 作者:Swen

基本上我想问的是wp_ajax_nopriv 非登录用户专用?

将awp_ajax_nopriv 如果用户登录,是否触发操作?

2 个回复
最合适的回答,由SO网友:Pat J 整理而成

正在查看the WordPress source code, 我可以这么说wp_ajax_nopriv_* 仅在您未登录时激发,并且wp_ajax_* 否则会引发火灾。

以下是相关位,在admin-ajax.php, 版本5.0.3中的第85-115行:

if ( is_user_logged_in() ) {
    // If no action is registered, return a Bad Request response.
    if ( ! has_action( \'wp_ajax_\' . $_REQUEST[\'action\'] ) ) {
        wp_die( \'0\', 400 );
    }

    /**
     * Fires authenticated Ajax actions for logged-in users.
     *
     * The dynamic portion of the hook name, `$_REQUEST[\'action\']`,
     * refers to the name of the Ajax action callback being fired.
     *
     * @since 2.1.0
     */
    do_action( \'wp_ajax_\' . $_REQUEST[\'action\'] );
} else {
    // If no action is registered, return a Bad Request response.
    if ( ! has_action( \'wp_ajax_nopriv_\' . $_REQUEST[\'action\'] ) ) {
        wp_die( \'0\', 400 );
    }

    /**
     * Fires non-authenticated Ajax actions for logged-out users.
     *
     * The dynamic portion of the hook name, `$_REQUEST[\'action\']`,
     * refers to the name of the Ajax action callback being fired.
     *
     * @since 2.8.0
     */
    do_action( \'wp_ajax_nopriv_\' . $_REQUEST[\'action\'] );
}
因此,如果您登录(即,is_user_logged_in()true), 它运行wp_ajax_* 操作,否则将运行wp_ajax_nopriv_* 行动。

如果无论用户是否登录,都希望运行相同的操作,我建议您both wp_ajax_*wp_ajax_nopriv_*.

SO网友:Kashif Rafique

根据wp_ajax_(action) codex:

此挂钩的功能与wp_ajax_(action), 除了“nopriv”变体用于处理来自未经身份验证用户的AJAX请求之外,即当is_user_logged_in() 返回false。

is_user_logged_in() 确定当前访问者是否为登录用户。它会回来的true 如果用户已登录,false 如果未登录。

相关推荐

Select2 AJAX和WP查询返回全部,不筛选

所以我在这里有点困惑。我经常使用Select2/AJAX/WP\\u查询来搜索和检索默认的WP帖子类型和我自己的自定义帖子类型。在过去几年中,我构建的几乎每个站点都至少包含一个实现。但是,我目前正在一个网站上搜索自定义帖子类型的结果,它只是返回所有内容。没有发生过滤。这是一个计划工具,管理员正在为一年中的每个月制定一个计划(自定义帖子类型)。时间表的标题为“月-年”,即。\'January 2022\'.问题是,如果您搜索“一月”,例如,您将得到返回的每个存在的时间表。包括2022年2月、2021 6月等