web-dev-qa-db-fra.com

Obtenir les informations de l'utilisateur actuel à l'aide de wp_localize_script, dans functions.php

J'ai besoin de passer les informations de wp_get_current_user() au début pour un script qui les utilise. Pour ce faire, j'utilise wp_localize_script() pour transmettre les informations. J'ai mis le code en haut de mon fichier functions.php mais cela ne fonctionne pas.

C'est ici. L'idée est que sur l'événement de connexion, la fonction add_to_login() est déclenchée, à qui il appartient d'ajouter une fonction au wp_enqueue_scripts, appelée add_to_enqueue(). Enfin, dans add_to_enqueue(), je passe les informations au script localisé. J'ai déjà essayé cela uniquement avec wp_enqeue_scripts, donc sans utiliser wp_login en plus. Il semblait que le problème était que l'utilisateur actuel n'est pas disponible pour la récupération avant que wp_enqueue_scripts apparaisse.

function add_to_enqueue() {
    $current_user = wp_get_current_user();
    $dataToBePassed = array(
       'userId' => $current_user['user_login'],
       'userName' => $current_user['display_name'],
    );
    wp_register_script('getUserInfo', get_template_directory_uri().'/assets/js/getUserInfo.js');

    wp_localize_script('getUserInfo', 'php_vars', $dataToBePassed);
    wp_enqueue_script('getUserInfo'); 
}

function add_to_login() {
    add_action('wp_enqueue_scripts', 'add_to_enqueue');
    do_action('wp_enqueue_scripts'); 
} 
add_action('wp_login', 'add_to_login');
1
CaesarOG
function hook_javascript() {

    if(is_user_logged_in()) {
        $output="<script> var userObject = ".json_encode(wp_get_current_user())."; console.log(JSON.stringify(userObject)); </script>";
        echo $output;
    } else {
        $output="<script> var userObject; </script>";
        echo $output;
    }
}
add_action('wp_head','hook_javascript');
1
CaesarOG

Si vous lisez à propos de cette action ici .

Vous verrez que ce hook donne accès à deux paramètres, $user->user_login (string) et $user ( WP_User).

En l'utilisant comme ceci, vous verrez toutes les informations auxquelles vous avez accès:

function add_to_login($user_login, $user)
{
    echo "<pre>".print_r($user, true)."</pre>";
}
add_action('wp_login', 'add_to_login', 10, 2);

Mais après quelques essais, je ne vois pas comment vous pouvez utiliser cette information avec votre JS, car l’utilisateur est immédiatement redirigé après cette action. Votre script n'aura le temps de rien faire.

1
ngearing