回答編集履歴

2

コメント加筆

2020/12/08 12:42

投稿

KazuhiroHatano
KazuhiroHatano

スコア7819

test CHANGED
@@ -8,19 +8,29 @@
8
8
 
9
9
  ```php
10
10
 
11
+ //入力項目をプロフィール画面に追加
11
12
 
13
+ //自分のプロフィール・他人のプロフィールの両方で走るようにフックを分岐する
12
14
 
13
15
  add_action(($GLOBALS['pagenow']==='profile.php'?'show':'edit').'_user_profile',function($user){
16
+
17
+ //user_metaは$userオブジェクトのプロパティとして取得できるようになっている
18
+
19
+ //user_metaにはhtmlがエスケープされて入っているのでデコードしてからwp_editorに渡す
14
20
 
15
21
  wp_editor(html_entity_decode($user->profile_html??''),'profile_html');
16
22
 
17
23
  });
18
24
 
19
-
25
+ //プロフィール更新時にuser_metaを更新
20
26
 
21
27
  add_action('profile_update',function($user_id){
22
28
 
29
+ //複数回profile_updateが走ることがあるので2回目以降は処理をスキップする
30
+
23
31
  if(did_action('profile_update')>1){return;}
32
+
33
+ //profile_htmlが送られてきていたらuser_metaを更新
24
34
 
25
35
  if(isset($_POST['profile_html'])){
26
36
 

1

追記

2020/12/08 12:42

投稿

KazuhiroHatano
KazuhiroHatano

スコア7819

test CHANGED
@@ -1,3 +1,43 @@
1
1
  [edit_user_profile](https://developer.wordpress.org/reference/hooks/edit_user_profile/)のフィルタフックで[wp_editor](https://wpdocs.osdn.jp/関数リファレンス/wp_editor)を使ってユーザープロファイルページにtinymceの入力項目を追加
2
2
 
3
3
  [profile_update](https://developer.wordpress.org/reference/hooks/profile_update/)で送信された値を受け取って[update_user_meta](https://wpdocs.osdn.jp/関数リファレンス/update_user_meta)
4
+
5
+
6
+
7
+
8
+
9
+ ```php
10
+
11
+
12
+
13
+ add_action(($GLOBALS['pagenow']==='profile.php'?'show':'edit').'_user_profile',function($user){
14
+
15
+ wp_editor(html_entity_decode($user->profile_html??''),'profile_html');
16
+
17
+ });
18
+
19
+
20
+
21
+ add_action('profile_update',function($user_id){
22
+
23
+ if(did_action('profile_update')>1){return;}
24
+
25
+ if(isset($_POST['profile_html'])){
26
+
27
+ update_user_meta($user_id,'profile_html',$_POST['profile_html']);
28
+
29
+ }
30
+
31
+ });
32
+
33
+ ```
34
+
35
+
36
+
37
+ とりあえず動くものレベルではこんな感じ
38
+
39
+
40
+
41
+ あとはnonceつけてCSRF対策とか
42
+
43
+ scriptタグstyleタグon〜属性style属性を除去してXSS対策とか