Использование класса WP_Session_Tokens в процедурном плагине WordPress - PullRequest
0 голосов
/ 10 сентября 2018

Я пишу плагин для 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);

Возможно ли получить доступ к классу через такую ​​функцию? Если да, то очевидно, что я делаю не так?

1 Ответ

0 голосов
/ 11 сентября 2018

Ваш вопрос немного широк, поскольку проблема, с которой вы столкнулись, на самом деле не связана с проблемой, которую вы пытаетесь решить (и ее решение не обязательно даст вам решение для того, что вы пытаетесь сделать).

Но в любом случае: вы получаете эту ошибку, потому что вы вызываете метод статически , и вы должны сначала создать экземпляр WP_Session_Tokens и выполнить вызов динамически .

Это базовые концепции ООП, которые вы должны знать, прежде чем пытаться использовать объекты, и они не намного сложнее, чем обычный синтаксис PHP.

Что-то вроде:

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

Слово мудрому: я не на 100% уверен, что вышеприведенное сработает, и у меня нет удобной установки WP для его проверкивне, но это по крайней мере синтаксически / семантически правильно и не даст вам ошибку, которую вы испытываете выше.

...