wp_validate_logged_in_cookie

时间:2017-07-25 作者:Gergely

我想了解这一职能、目的及其工作。

https://developer.wordpress.org/reference/functions/wp_validate_logged_in_cookie/

写道

如果无法验证和分析以前的身份验证cookie,请检查登录的cookie。

这不是吗

是否可以验证

?检查源代码:

function wp_validate_logged_in_cookie( $user_id ) {
    if ( $user_id ) {
        return $user_id;
    }

    if ( is_blog_admin() || is_network_admin() || empty($_COOKIE[LOGGED_IN_COOKIE] ) ) {
        return false;
    }

    return wp_validate_auth_cookie( $_COOKIE[LOGGED_IN_COOKIE], \'logged_in\' );
}
它看起来似乎主要是在用户id存在时返回用户id,而这与任何cookie无关。

我应该如何解释这个函数?

1 个回复
最合适的回答,由SO网友:hwl 整理而成

wp_validate_logged_in_cookie() 来源评论:

/**
 * Validates the logged-in cookie.
 *
 * Checks the logged-in cookie if the previous auth cookie could not be
 * validated and parsed.
 *
 * This is a callback for the {@see \'determine_current_user\'} filter, rather than API.
 *
 * @since 3.9.0
 *
 * @param int|bool $user_id The user ID (or false) as received from the
 *                       determine_current_user filter.
 * @return int|false User ID if validated, false otherwise. If a user ID from
 *                   an earlier filter callback is received, that value is returned.
 */
它是过滤器挂钩的默认回调函数determine_current_user 专用函数使用_wp_get_current_user() 还有一些插件。

其默认用法如wp中所定义,包括/默认过滤器。php第371行:

add_filter( \'determine_current_user\', \'wp_validate_logged_in_cookie\', 20 );

_wp_get_current_user()\'s过滤器的使用line 2523 of wp-includes/user.php:

     /**
     * Filters the current user.
     *
     * The default filters use this to determine the current user from the
     * request\'s cookies, if available.
     *
     * Returning a value of false will effectively short-circuit setting
     * the current user.
     *
     * @since 3.9.0
     *
     * @param int|bool $user_id User ID if one has been determined, false otherwise.
     */
    $user_id = apply_filters( \'determine_current_user\', false );
在此用法中wp_validate_logged_in_cookie() 已传递参数false, 因此会被迫逃跑wp_validate_auth_cookie() 如果有一块饼干,而我们在前端。

wp_validate_auth_cookie() 如果cookie有效,则返回用户id。

的完整来源_wp_get_current_user(), 查看上面引用的内容apply_filters() 上下文中的行。请注意,如果没有向其返回用户id,则用户id设置为无效0 并立即返回;表示没有登录用户。

function _wp_get_current_user() {
    global $current_user;

    if ( ! empty( $current_user ) ) {
        if ( $current_user instanceof WP_User ) {
            return $current_user;
        }

        // Upgrade stdClass to WP_User
        if ( is_object( $current_user ) && isset( $current_user->ID ) ) {
            $cur_id = $current_user->ID;
            $current_user = null;
            wp_set_current_user( $cur_id );
            return $current_user;
        }

        // $current_user has a junk value. Force to WP_User with ID 0.
        $current_user = null;
        wp_set_current_user( 0 );
        return $current_user;
    }

    if ( defined(\'XMLRPC_REQUEST\') && XMLRPC_REQUEST ) {
        wp_set_current_user( 0 );
        return $current_user;
    }

    /**
     * Filters the current user.
     *
     * The default filters use this to determine the current user from the
     * request\'s cookies, if available.
     *
     * Returning a value of false will effectively short-circuit setting
     * the current user.
     *
     * @since 3.9.0
     *
     * @param int|bool $user_id User ID if one has been determined, false otherwise.
     */
    $user_id = apply_filters( \'determine_current_user\', false );
    if ( ! $user_id ) {
        wp_set_current_user( 0 );
        return $current_user;
    }

    wp_set_current_user( $user_id );

    return $current_user;
}

结束

相关推荐

Child theme functions.php

我不知道如何改变我的孩子主题的功能。php。在woothemes文档中,它说“子主题中的functions.php应该是空的,并且不包括父主题functions.php中的任何内容。”我需要使用此功能来不显示产品类别,但我不确定如何在我的子主题中执行此操作。也许有人能给我提供一些指示?add_action( \'pre_get_posts\', \'custom_pre_get_posts_query\' ); function custom_pre_get_posts_query( $