web-dev-qa-db-ja.com

functions.phpでwp_localize_scriptを使用して現在のユーザー情報を取得する

wp_get_current_user()からの情報を、それを使用するスクリプトのフロントエンドに渡す必要があります。これを実現するために、wp_localize_script()を使用して情報を渡します。コードをfunctions.phpファイルの先頭に配置しましたが、機能しません。

ここにあります。考えは、ログインイベントでadd_to_login()関数がトリガーされ、その機能はadd_to_enqueue()と呼ばれるwp_enqueue_scriptsに関数を追加することです。最後に、add_to_enqueue()で、情報をローカライズされたスクリプトに渡します。私はすでにwp_enqeue_scriptsのみを使用してこれを試しましたので、wp_loginをさらに使用しませんでした。問題は、wp_enqueue_scriptsが発生するまで現在のユーザーが取得できないことであると思われました。

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

あなたがこの行動について読んだなら ここ

このフックが$user->user_login (string)$user ( WP_Userの2つのパラメータへのアクセスを提供することがわかります。

このように使うと、アクセスできるすべての情報が表示されます。

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

しかし、ちょっとしたテストの後、ユーザーがこのアクションの後すぐにリダイレクトされるため、この情報をJSでどのように使用できるかわかりません。あなたのスクリプトは何もする時間がないでしょう。

1
ngearing