れいぶろぐゲームをプレイしたり、作ったりしてる人、LABEのブログ『れいぶろぐ』。創作のこと、PCのこと、その他趣味のことを広く浅く。(11)先日(といっても2015年12月10日)、WordPressのバージョン4.4が公開された。このブログでもバージョン4.4に更新してみたのだが、チェックしているとコメントフォームの表示が変わっていた。仕様変更があったようだが、残念ながらこの関数にフォーム内の項目の並び順を変える機能はない。紐解き、コメントフォームを自作するまでの戦いを綴る。まとめ内蔵関数の恐怖なんでそういうとこを勝手に変えちゃうかねぇ......と思いながら情報収集すると、どうやら今回のアップデートでの開発者肝いり(?)の変更らしい。「最も重要なものは一番上に表示されてしかるべき」とかで、海外のフォーラムではおおむね好評らしい。......海外の事情は知らないけど、少なくとも俺にとっては「名前→メアド→本文」というのが見慣れた順番なわけで。こいつはときどき機能が追加されているが、まだ自由自在なカスタマイズにはほど遠い、というか今回勝手に変更されたフォーム内項目の並び替えにはノータッチなのだ。こいつは吐き出すHTMLがいろいろおかしく、HTMLソースを見てみると何個、何十個ものタブ文字や改行文字でインデントがガタガタ。抜本的に解決するには、やっぱり内蔵関数に頼らずに自力でPHPを書くしかないよねぇ......?ただ、こういう本体機能の根幹にかかわる部分はやっぱりデリケートだから、間違えるとコメントできなくなったりするわけで。いえ俺もWordPressをいろいろいじくっている間に本体ファイルの読み方にも慣れてきたし、勇気を振り絞って挑戦した次第だ。上記の通り、コメント機能のような根幹となる部分はデリケートで、完全に理解するのは難しく、必要な部分に過不足があったりするとたちまちコメントができなくなったりする。俺だってPHPがいかにしてMySQLのデータベースにコメントのデータを記録しているかなんてさっぱりわからん。いや、今回そのような知識は必要ないのでご安心を。簡単ではないことと、この記事の真似をして問題が起こっても自分で解決することはご了承いただきたい。※質問は受け付けるよ。コメント機能はときどき仕様変更されるけど、内蔵関数を素直に使ってる限りはその関数側で自動的に対応してくれるが、自作するとなるとそうはいかない。今後のWordPressのアップデートにより動かなくなる可能性もあり、その際は各自で原因究明、解決を行わなければならない。従来のHTMLをコピペして弄ったものを出力するというだけではだめ。ログインしているかどうかや、以前コメントしたことがあるかどうかによって出力されるHTMLが変わるように、標準では設計されているので、その点も考慮する必要がある。コメントフォームに関するプラグインを導入している場合、それらのプラグインで不具合が出ないように注意深く設計しなければならない。アクションフックはもれなく設置しなければならない。従来のHTMLと構造が大きく変わると、CSSなどを再調整するのが大変だから、できるだけ標準の設計を踏襲しなければならない。俺は今回、これらの点に注意して取り組んだ。......と言いたいところだが。俺は従来からカスタマイズしまくってたせいで、標準がどんなだったかを正確には覚えていない。id名とかclass名なんかはかなり独自のものを付けてると思うから、もし従来のCSSがおかしくなったら各自でテキトーに直してくれ。俺自身が無効にしているオプション設定については、未対応だったりテキトーな実装だったりするので注意。形式にする」:未対応あと、俺が書いてるHTMLはHTML5で、XHTMLあたりでは構文エラーになるけど、気にしない。俺が使ってるコード長いけどあとで少しずつ説明するね。?>">ログイン</a>が必要だよ。class="comment-notes">本文のみ必須。メールアドレスは公開されないよ。?>青字がHTML、緑字がPHPだよ。左右にスクロールして全体を表示できるよ。コードの説明いくつかの部分に分けて説明する。使い、そのページ(記事)でコメントが有効かどうかをチェックしている。2〜5行目では、コード内で使う変数をあらかじめ取得している。6〜12行目では、「コメントの投稿者の名前とメールアドレスの入力を必須にする」オプション設定が有効の場合に追加するHTMLの記述をあらかじめ設定している。14行目と15行目ではコメントフォームのセクションと見出しを記述している。?>">ログイン</a>が必要だよ。使い、ログイン必須の状態でログインしていないユーザーに対してログインを促すメッセージを表示する。この関数は、引数でログイン後に戻るページのURLを指定できるので、現在のページのURLを指定している。18行目は16行目のif文に対するelse文で、以降がコメントフォームとなる。19行目はフォームタグの定義。);21〜24行目21行目ではユーザーがログインしているかどうかを判定。22〜24行目が、ログインしているユーザーに対する表示となる。ログインしているユーザーは名前、メールアドレス、URLの入力が不要だから、これらの入力フォームのかわりに別の表示をするわけだ。俺はちょっと凝った表示にしたくて、22行目のようなアカウント設定ページへのリンクやログアウトリンクだけじゃなく、23行目のように通常の名前入力欄と同じ形のダミーフォームを表示している。属性によって中身の変更を無効化している。使っているが、これは単にHTMLを改行するとページ中に空白文字が現れてしまうので、それを防ぎつつ改行して見やすくするため。class="comment-notes">本文のみ必須。メールアドレスは公開されないよ。?>25〜33行目25行目は、21行目のif文に対するelse文。以降がログインしていないユーザー向けに名前、メールアドレス、URLの入力欄などを表示する部分になる。