🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
WordPress

WordPressは、PHPで開発されているオープンソースのブログソフトウェアです。データベース管理システムにはMySQLを用いています。フリーのブログソフトウェアの中では最も人気が高く、PHPとHTMLを使って簡単にテンプレートをカスタマイズすることができます。

Q&A

解決済

1回答

1038閲覧

Wordpress プロフィール編集画面にテキストフィールドを追加して見出しの設定(文字サイズ設定)もできるようにしたい

t-yknow

総合スコア4

WordPress

WordPressは、PHPで開発されているオープンソースのブログソフトウェアです。データベース管理システムにはMySQLを用いています。フリーのブログソフトウェアの中では最も人気が高く、PHPとHTMLを使って簡単にテンプレートをカスタマイズすることができます。

0グッド

0クリップ

投稿2020/12/08 07:04

編集2020/12/08 07:16

Wordpress プロフィール編集画面に見出しが設定できるテキストフィールドを追加したい

表題の通り、wordpressのユーザー登録画面に、投稿ページのようなプローフィールの内容に見出しが設定できるツールバー付きのテキストフィールドを追加したいと考えており方法を探しております。記事の量は多くなっても問題内容にしたいです。参考画像を添付します。
自分でも探しましたが、functions.phpに書いて項目を増やす方法ではやり方が見つからず、Cimy User Extra Fieldsというプラグインがあることはわかりましたが最近はアップデートされていないようで使うのを躊躇しております。

WordPress 5.5.3に実装予定です。
自分の知識では方法が思い付かないためご存知の方、どうぞよろしくお願い致します。

イメージ説明

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

edit_user_profileのフィルタフックでwp_editorを使ってユーザープロファイルページにtinymceの入力項目を追加
profile_updateで送信された値を受け取ってupdate_user_meta

php

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

とりあえず動くものレベルではこんな感じ

あとはnonceつけてCSRF対策とか
scriptタグstyleタグon〜属性style属性を除去してXSS対策とか

投稿2020/12/08 07:32

編集2020/12/08 12:42
KazuhiroHatano

総合スコア7819

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

t-yknow

2020/12/08 10:00

貴重な回答を大変ありがとうございます。 申し訳ありません、初心者のため理解が難しいです。 検証しながら実装を行っているのでサンプルコードなどございましたらご教授お願い致します。
t-yknow

2020/12/08 11:42

ありがとうございます。早速使ってみました。 表示されました、ありがとうございます。 「プロフィール」などの項目名を入たい場合はどのようにすれば良いでしょうか。 もう1つ質問させてください。 ユーザのプロフィール一覧と詳細ページを作成するのですが元々ある項目は以下のコードで取得します。 今回追加したエディタの内容はどのように取得できますでしょうか。 どうぞよろしくお願い致します。 <!--投稿者一覧を表示--> <?php $users =get_users( array('orderby'=>ID,'order'=>ASC) ); echo '<div class="writers">'; foreach($users as $user): $uid = $user->ID; $userData = get_userdata($uid); echo '<div class="writer-profile">'; echo '<figure class="eyecatch">'; echo get_avatar( $uid ,300 ); echo '</figure>'; echo '<div class="profiletxt">'; echo '<p class="name">'.$user->display_name.'</p>'; echo '<div class="description">'.$userData->user_description.'</div>'; echo '<div class="button"><a href="'.get_bloginfo(url).'/?author='.$uid.'">'.$user->display_name.'の記事一覧</a></div>'; echo '</div>'; echo '</div>'; endforeach; echo '</div>'; ?>
KazuhiroHatano

2020/12/08 12:35

回答のコードに既に答えがあるようなものです ?:とか??とか初心者には見慣れない部分もあるかもしれないですが さほど難しいコードではありません WordPressをカスタマイズして使っていくなら add_actionなどは基礎知識になります とりあえずコードにコメントだけつけときます 見出しの付け方などはブラウザでプロフィール画面の要素詳細を表示すれば どういうhtml書けばどういうスタイルが当たるようになってるかわかるので それを見ながら出力するhtmlを書いてみてください
t-yknow

2020/12/08 14:25

ありがとうございます。 試行錯誤やってみたいと思います。
t-yknow

2020/12/10 14:14

試行錯誤で解決できました、ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.36%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問