在程序化 WordPress 插件中使用 WP_Session_Tokens class

Using WP_Session_Tokens class in a procedural WordPress Plugin

我正在为 WordPress 写一个程序化的插件 PHP。

无论如何,在插件中,我想更新一个用户 WordPress Session Token,它存储在 usermeta table 中。

四处挖掘,我发现了一个 class,其中包含一些 methods,我认为这将帮助我实现我的目标。

我写了一个函数,它有正确的数据,更新到期时间,我只是想通过 WP_Session_Tokens 传递更新。

但我收到错误:

Using $this when not in object context in .../wp-includes/class-wp-session-tokens.php on line 166

我的功能是这样的:

function update_auth_cookie($user_login, $user) {

    $options = get_option('options_premium');
    $cookieTime = $options['cookieTime'];

    $sessionToken = wp_get_session_token();
    $verifier = hash('sha256', $sessionToken);

    $sessions = get_user_meta($user->ID, 'session_tokens', true);
    $sessions[$verifier]['expiration'] = $cookieTime;

    WP_Session_Tokens::update( $verifier, $sessions[$verifier]);

}
add_action('auth_cookie_valid', 'update_auth_cookie', 10, 2);

是否可以通过这样的函数访问 class?如果是这样,我做错了什么很明显吗?

你的问题有点宽泛,因为你遇到的问题与你试图解决的问题并没有真正的关系(解决它不一定能为你尝试做的事情提供解决方案)。

但无论如何:您收到此错误是因为您正在静态调用方法,您应该首先实例化 WP_Session_Tokens 并进行调用 动态.

这是您在尝试使用对象之前应该了解的基本 OOP 概念,并不比常规 PHP 语法难多少。

大致如下:

$wp_session_token = WP_Session_Tokens::get_instance($user->ID);
$wp_session_token->update( $verifier, $sessions[$verifier]);

明智的话:我不是 100% 相信上面的方法会起作用,而且我没有方便的 WP 安装来测试它,但它至少 syntactically/semantically 是正确的,不会给出你就是上面遇到的错误。