WordPressはそもそも、あまり知識の無い方でもブログを作成することの出来るCMSですので結構なおせっかい機能があります。。
そのなかでも自動的にthe_content等で出力されるHTMLを変換する機能がこれまた邪魔。
色々なサイトを見ると、一番多く出てくる対応策が、remove_filterを書く方法。
function.phpに
remove_filter('the_content', 'wpautop');
と書くか、single.php等のthe_content()の直前に
remove_filter('the_content', 'wpautop'); ?> the_content();
と書いて、部分的に自動変換を止める方法。
ただ、これを書くと、自動でbrタグやpタグが入る事はなくなるんですけど、その代わり自分で書いたpタグも消えちゃうんですよねー。
それじゃ意味ないじゃんってことでこの方法は止め。
じゃあどうしようかなってなもんで、プラグインも有るみたいだけど、そもそもWordPressを使ってサイトを作るのは私達だけど、実際に更新していったりするのは専門職じゃない人だったりするわけだし、そんな人達の事を考えると残しておいたほうがいいのかなーとか面倒臭いもんだから最初は自分に言い訳をしてたんだけども、
後々変更すると更に面倒くさいことになりそうなので真面目に考えることにした。
そもそもpタグって何?
真面目に考えれば考える程どうして良いかわからなくなるが、
じゃあそもそもpタグって何?って考えると、pタグは「段落」である。
じゃあ段落って何?って考えると「段落とは、文章のあるまとまりの単位。文が集まって段落となり、段落が集まって節に、節が集まって章に、というように、文章全体を構成する単位」である。
そう考えてみると、あのWordPressで自動変換された後の異常なPタグだらけのHTML構造が正しいのだろうとも思う。
ただ、そもそもHTMLで段落を意識して字下げとかもしないし、さっきの例で言うと「段落が集まって出来た節」が一つのpタグというイメージがある。
更に、印刷物とは違ってPC画面で読んでもらう文章は、段落に関係なく読みやすいように改行を入れたり、強調するために改行したりする事が多く有る。そのたびにいちいちPタグを入れられても文章構造が意図しない形になってしまう。
う~ん・・・ どうするべきか・・・
もし、Pタグ等の自動変換をするページとしないページを自由に選べる方法があれば、専門職の人間が作成するページは自分で正しく段落を区切っていけるし、一般の方が作成するページはWordPressに段落を区切ってもらえばいいし、いい方法は無いのかなー?
妥協策(プラグインに頼る)
手っ取り早いのはプラグインかなということで試した結果。
- 『PS Disable Auto Formatting』
- はfunction.phpに直接書き込むのと同じく自分で書いているpタグも消えてしまう。
そもそもpタグを勝手に書き換えないでほしいというのは、デザイン上の事だけではなく、SEOを意識してコンテンツ構造を正しく書きたいという事でもあるのに、pタグ消しちゃったらねー。。。
HTML構造を正しく保ちたいなら却下!
- 『brBrbr』
- これは実は昔ちょっと使ってたんですよね。ただ久々に見てみるとちょいと痛いですね。。。
仕組みとしては、今まで紹介したやり方と同じくremove_filterでthe_contentからwpautopを外した上で、オリジナルで文字変換を行っている模様。
結果出来上がったHTMLは今までと同じく自分で書いたpタグが消えて、the_content()で吐き出されるHTML全体をpタグに入れてしまう形。
投稿画面からオリジナルでHTML書いたらそれが全部brBrbrの書いたpタグ配下になっちゃうので構造的にNG。
うーん・・・どーするべー・・・
受け入れる
なかなか調べても出てこないし、出てきても納得ができないし、じゃあやっぱり受け入れようと考えてみた場合。
ではWordPressの自動変換のルールは具体的には?
- エディタ上で改行をすると自動的にbrタグを付けます。
- 2回連続で改行をすると、pタグになって段落分けされます。
- 2回以上改行しても同じくpタグで段落分けされるだけだから、改行しまくっても意味なし。
- 自分で書いたpタグbrタグは削除。(class名とかが付いたタグは消えません。どうも単純な置き換えで消しているだけな模様)
まぁこれはこれで、pタグだけ書かなきゃいい話しだし、エディタにいちいちbrタグ書かなくていいので楽っちゃ楽。
pタグの段落分けも文章構造的には正しい。
ただ、強調とかを考えて改行を沢山したい時は無駄なpタグが連発してしまうので問題。
まぁbrタグにclass付けてmarginとかで分ければいいちゃいい。。。
現状の結論 受け入れる・・・
すみません。。こんなにちんたら書いて現状では受け入れ中です。
テキストエディタでHTML書いてるのにtableとかulとかはあるのにpだけないというわけのわからない状態にはなっていますが、正しいHTML構造を考えると今のところ解決策が見つかりませんでした。
とりあえず変換のルールさえ分かっていたら、結構問題ないし、SEO的にも正しい構造が保たれるし、一般の方が編集するときにもやさしい、ってことでこの結論。
もう少し時間が有る時にもう少し掘り下げて必要ならプラグイン化してもいいかも。