吉田 丈治
フォーラムへの返信
-
フォーラム: 使い方全般
返信が含まれるトピック: add_action ( 'profile_update' についてフォーラム: 使い方全般
返信が含まれるトピック: add_action ( 'profile_update' についてフォーラム: 使い方全般
返信が含まれるトピック: add_action ( 'profile_update' についてgblsmさん、jim912さん
上記についてですが、プラグイン側で別のhookが用意され、解決しましたのでこちらのトピックについては閉じさせていただきます。
もっと勉強が必要だということは分かりました。長々とお付き合い頂きありがとうございました。
フォーラム: 使い方全般
返信が含まれるトピック: add_action ( 'profile_update' についてそもそもの話なのですが…
profile_updateというhookは、プロフィールデータが更新され終わった後に実行されるhookではないのでしょうか?
profile_update / en
ユーザープロフィールが更新された際に実行する。
アクション関数引数: ユーザー IDフォーラム: 使い方全般
返信が含まれるトピック: add_action ( 'profile_update' についてjim912さん
アドバイスありがとうございます。
なるほど、ドロップダウンリストやラジオボタンで設定した場合と、テキストのみの場合で処理の順番が変わっているという事なのであろうという事ですか!
プラグイン側のソースを確認してみます。フォーラム: 使い方全般
返信が含まれるトピック: add_action ( 'profile_update' についてgblsmさん
確かにそうですね。
ただ、正常に動作はしてるような気がします。
このコード(プラグインを使っています:user frontend pro)でプロフィール情報をカスタムフィールド含めて更新すると、Wordpressの管理画面側から見ても、フロントエンドのフォームから見ても選択したデータが登録されています。また、普通のテキストフィールドであれば、入力したデータがそのままログ出力時にも出力されます。なぜかselectやradioボタンで選択したデータだけ、更新前のデータが取得されてしまいます。(が、実際に更新はかかっています)
フォーラム: 使い方全般
返信が含まれるトピック: add_action ( 'profile_update' について2についてですが
clean_user_cache($userid); $userdata = get_userdata( $userid ); $radiodata = $userdata->radiodata; error_log(print_r($radiodata,true),"3","/var/log/php.log");
こんな感じでログファイルにアウトプットしてみても更新前データが入っている事を確認しています。
フォーラム: 使い方全般
返信が含まれるトピック: add_action ( 'profile_update' についてgblsmさん
1についてはこんなふうになっていました
public static function update_user_meta( $meta_vars, $user_id ) { // prepare meta fields list( $meta_key_value, $multi_repeated, $files ) = self::prepare_meta_fields( $meta_vars ); // save all custom fields foreach ($meta_key_value as $meta_key => $meta_value) { update_user_meta( $user_id, $meta_key, $meta_value ); } }
—
$userdata = get_userdata( $userid );
についてですが、get_userdataがデータをキャッシュするということが以下の記事で分かりました。http://dim5.net/wordpress/get-userdata-cache.html
ということで、hookの冒頭で以下のように一度キャッシュをクリアしてからget_userdataを行えば…と思ったのですが
clean_user_cache($userid); $userdata = get_userdata( $userid ); $radiodata = $userdata->radiodata;
やはりドロップダウンリストに入っているデータ($userdata->radiodata)は、update前のものが取得されてしまいます。
この方法ではキャッシュをクリアできないということでしょうか。
フォーラム: 使い方全般
返信が含まれるトピック: add_action ( 'profile_update' についてgblsmさん
追記:私が勘違いしているみたいなので確認させてください。フロントエンドに表示するラジオボタンの(古い)値は外部のDBから取得して(WordPressのDBへ入れずに)表示していますか。それならWordPressのキャッシュ云々はまったく無関係です。すみません。
こちらですが、ラジオボタンの値はWordPressのデータを使っています。ので外部DBではありません。
フォーラム: 使い方全般
返信が含まれるトピック: add_action ( 'profile_update' について>gblsm様
[キャッシュと書いたのは WordPress 本体が持っているキャッシュ機能]
これ知りませんでした!$userdata = get_userdata( $userid ); $RadioData = $userdata->RadioData;
これで拾ってきている値がキャッシュのデータではないかというご指摘ですよね。
そこがダメなのだと思います。キャッシュではないデータを取ってくるにはどうすれば…
clean_post_cache とかはそういう意図に見えます。今回はユーザプロフィールの更新なので何を使うのが適切なのでしょうか。
フォーラム: 使い方全般
返信が含まれるトピック: add_action ( 'profile_update' についてRadioDataを保存するための別のフック関数はprofile_updateに登録されていますよね?
>む。
>RadioDataがきちんと保存されるようになっているか?という意味でしたでしょうか?
>保存ボタンを押した後に管理画面のユーザ情報を見てみるとRadioDataはラジオボタンで選択したものにきちんとなっているので保存はされていると思います。フォーラム: 使い方全般
返信が含まれるトピック: add_action ( 'profile_update' についてDaisuke Takahashi様
add_action()の$accepted_argsと実際の関数が受け取る引数の数が異なりますが、本当に正しく関数は実行されていますか?
>確かに間違ってました。修正して実行してみましたが、変化は有りませんでした。RadioDataを保存するための別のフック関数はprofile_updateに登録されていますよね?
>すみません、これっぽいです。ラジオボタンのデータを保存するにはフック関数が必要なのですか。。。フォーラム: 使い方全般
返信が含まれるトピック: add_action ( 'profile_update' についてDBから叩いているのでキャッシュは無関係だと思うのですが。
profile_updateはプロフィール情報を更新してから以下のコードが実行されるという認識は間違いでしょうか。
get_userdataで拾ってくるデータがおかしいのだと思うのですが、first_name等のテキストデータについては問題がなく更新後の情報が送信されている事が解せません。form側のバグかなと思ったのですが、そこは大丈夫です。
送信後にプロフィールデータを確認してみると、しっかり選んだ値になっていることが確認できました。
$RadioData = $userdata->RadioDataのデータをログに書き出してみると、変更前の値が格納されていることを確認しています。なぜ…add_action ( 'profile_update' , 'updateUserMetaData',20,3); function updateUserMetaData($userid){ include_once('API叩く為のライブラリをinclude'); $userdata = get_userdata( $userid ); $first_name = $userdata->first_name; $last_name = $userdata->last_name; $RadioData = $userdata->RadioData; //Radioボタンによるデータ //API向け送信データの作成 $SendData = array('firstname'=> $first_name,'lastname' => $last_name, 'radiodata' =>$RadioData); //API叩くためのコード }
フォーラム: 使い方全般
返信が含まれるトピック: hookの中にスクリプトを入れるとうまく呼び出せないjim912さん
ありがとうございます。
1:コード読んでみるのが確実。そうですね、以後はそうしてみます。2:ここのページ実行順だったのですね!!!素晴らしい助言ありがとうございます。
3:行けました!!!
何から何までアドバイスありがとうございます。今後の役に立ちそうです。助かりました!!
フォーラム: 使い方全般
返信が含まれるトピック: hookの中にスクリプトを入れるとうまく呼び出せないjim912さん
レスありがとうございます!
呼び出しの順番のせいだったんですね。
一般的な話として教えていただきたいのですが
1:タイミングを確認するには、プラグインのファイルを見てアクションフックを確認するということで良いでしょうか(ソース見てみましたら以下の行があったのでこれを指しているということだと思うのですが)
add_action('load-edit.php', array(&$this, 'custom_bulk_action'));
2:hookのアクションの実行タイミングみたいなものは、wordpressのWiki等にありそうなのですが、どこにあるのか教えて下さい
3:そして肝心な部分なのですが、こういったことをやる場合、どこのhookに引っ掛ければよいでしょうか…2が分からず連動した質問になってしまうのですが。
分からないことだらけで恐縮なのですが、お知恵をいただければ助かります。