WordPress3.0(日本語)がリリースされてだいぶ経ちましたが、新しく実装されたcomment_form()を使ってみてどうにも腑に落ちない点があったのでメモしておきます。
comment_form()が吐き出すソースがおかしい
どうもpタグの対応が取れていない気がします。大元のソースコードを読んでみても原因が掴めないのですが、特定の条件でp閉じタグがひとつ多く出力されていると思います。
解決(2010/09/07)
コメント欄のgatespaceさんより指摘がありました。不具合の箇所は、カーネルファイルではなく、日本語へのローカライズファイル中にあるとのことでした。つまり、日本語訳でのtypoということです。3.0.2以降で修正されるとのことなので、それに期待されるのがよろしいと思います。
条件
- comment_form()を使用する
- login状態にある
以上の条件で再現性が確認できました。
吐き出されるコード
comment_form()をデフォルト設定のまま、引数を与えずcomments.php内で実行した結果です。このとき、メイン執筆ユーザである「baw」でログイン状態にしてあります(読みやすいよう、多少整形してあります。WordPressが吐き出すソースのインデントは、必ずしも読みやすいというわけではないのが面倒です)。
<h3 id="reply-title">コメントをどうぞ <small><a rel="nofollow" id="cancel-comment-reply-link" href="/586.html#respond" style="display:none;">コメントをキャンセル</a></small></h3> <form action="https://jikkenjo.net/wp-comments-post.php" method="post" id="commentform"> <p class="logged-in-as"> <a href="https://jikkenjo.net/wp-admin/profile.php">baw</a> としてログインしています。 <a href="https://jikkenjo.net/wp-login.php?action=logout&redirect_to=http%3A%2F%2Fjikkenjo.net%2F586.html&_wpnonce=374a61b1d7" title="このアカウントからログアウトする">ログアウトしますか ?</a> </p> </p> <p class="comment-form-comment"><label for="comment">コメント</label><textarea id="comment" name="comment" cols="45" rows="8" aria-required="true"></textarea></p> <p class="form-allowed-tags">次の<abbr title="HyperText Markup Language">HTML</abbr> タグと属性が使えます: <code><a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong> </code></p> <p class="form-submit"> <input name="submit" type="submit" id="submit" value="コメントを送信" /> <input type='hidden' name='comment_post_ID' value='586' id='comment_post_ID' /> <input type='hidden' name='comment_parent' id='comment_parent' value='0' /> </p> <input type="hidden" id="_wp_unfiltered_html_comment" name="_wp_unfiltered_html_comment" value="28ef5cdd3a" /> </form>
該当行(8行目)の閉じpタグの対応が行方不明になっているのを読み取っていただけるでしょうか。ログアウト状態なら、この現象に遭遇しません。私の使い方が悪いのかと思い、3.0付属テーマ「twentyten」でも試してみましたが、同じく閉じpの対応が取れていないようでした。
そもそも
comment_formの使い勝手が悪いと思います
標準化して使いやすくするという設計理論は単純明快で最もだと思いますし、私も全くの同意見です。しかし、この関数は酷いと思いませんか。標準化と言っておきながら、引数によってほとんど書き換えられるという、自由といえば聞こえはいいですが、実質縛りがない状態です。
もう少し実装内容を縛ってもらって、何か特殊なことをやろうと思う人は、この関数を利用しないで各自の責任でformを生成することとしたほうがいい気がします(そもそも、この関数で楽をしようと思っている人は、そこまでカスタマイズしたいと思わない横着者じゃないですか?w)。
更に、カスタマイズするとなると、その自由度の高さからほとんど全てを書き換えなければならないですね。こんなのだと、手間はほとんどイコールです。本末転倒な気さえします。。。
まとめ
ここまで非難しておいて、私のミスだったら怖いですね。どっちみち、自由度が高すぎて使い勝手が良くないのは間違いないです。ソースコードが読み解けなかったので、他の方の情報を待ちたいですね。公式フォーラムに張り付いていてみますか。
Pタグがひとつ多く出力される件ですが、
wp-includesディレクトリに含まれるcomment-template.phpの1537行目末にある
P閉じタグの記述を削除することで訂正することができますよ。
この問題がなかったとしても、ソースをクリーンに整理していると
どうしてもコメントフォームがネックになりますね。
comment_form()は便利なので、個人的にはcomment-template.phpを編集するようにしています。
コメントありがとうございます。
実は、現在もcomment_form()は利用しています。タグ云々の記述が邪魔だったので、そこだけは引数で削除しました。
指摘してくださった箇所の修正ですが、カーネルファイルを弄るのは、正直気が引けます。アップデートのたびに弄る必要もあるので……。とりあえず、アップデートの期待ということですか。
smallなどというわけのわからないタグが利用されている点も気になりますね。
確かに、カーネルファイルを直接弄ったほうが、色々と経済的ですよね。考えて見ます、ありがとうございました。
こんにちは。comment_form()を検索していてたどり着きました。
こちらで紹介されているの件ですが、comment-template.php問題ではなく、
翻訳ファイル(/wp-content/languages/ja.mo、ja.po)のtypoだそうです。
http://ja.forums.wordpress.org/topic/4410
3.0.2以降で修正される予定だそうですよ。
コメントありがとうございます。
なるほど、通りで原因となる箇所を探しても見つからなかったわけですね。全く見当違いの場所を読み解いていたわけですか……
現状はログイン時のみの不具合なため、アップデートを待つこととします。ありがとうございました。