Я пишу плагин для WordPress, в процедурном PHP.
Во всяком случае, в плагине, я хочу обновить пользователей WordPress Session Token
, который хранится в usermeta
Таблица.
Покопавшись, я нашел класс, который имеет некоторые методы который, я думаю, поможет мне достичь моей цели.
Я написал функцию, которая содержит правильные данные, обновляет время истечения, и я просто пытаюсь передать обновление через 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);
Возможно ли получить доступ к классу с помощью такой функции? Если так, то очевидно, что я делаю не так?
Ваш вопрос немного широк, поскольку проблема, с которой вы сталкиваетесь, на самом деле не связана с проблемой, которую вы пытаетесь решить (и ее решение не обязательно даст вам решение того, что вы пытаетесь сделать).
Но в любом случае: вы получаете эту ошибку, потому что вы вызываете метод статически, и вы должны сначала создать экземпляр WP_Session_Tokens
и сделать звонок динамично.
Это базовые концепции ООП, которые вы должны знать, прежде чем пытаться использовать объекты, и они не намного сложнее, чем обычный синтаксис PHP.
Что-то вроде:
$wp_session_token = WP_Session_Tokens::get_instance($user->ID);
$wp_session_token->update( $verifier, $sessions[$verifier]);
Слово мудрому: я не на 100% уверен, что вышесказанное сработает, и у меня нет удобной установки WP, чтобы протестировать ее, но она, по крайней мере, синтаксически / семантически правильна и не даст вам ошибки, с которой вы столкнулись выше ,
Других решений пока нет …