ワードプレスの記事編集画面には、特有の「クセ」があります。投稿の本文を、美しく(?)HTMLに出力するために、入力されたテキストに対して自動でHTMLタグを補完する機能があるからです。
もっとも目立つHTML整形機能が「Pタグの補完」です。これは「HTML出力時に、本文の改行(文字コード:\n)をPタグ(<p>xxx</p>)に補完する、という機能です。
これによりHTMLが乱れる事がありますので、これをオフにする機能を紹介します。
そのテンプレートだけ自動整形をオフにする。
所望のテンプレートファイルに通常、以下のような「本文を出力する」関数がありますが、
<?php the_content(); ?>
これをこのように置き換えます。
<?php echo get_the_content(); ?>
これでOKです。
なぜ?
一応補足すると、ワードプレスの自動整形機能はすべて「wpautop()」という関数(フィルター関数)で処理されます。このフィルターはthe_content()には含まれていますが、get_the_content()はフィルターを介さず、データベースに保存された文字列を取得する関数ですので、自動整形が行われない、というだけです。
function the_content( $more_link_text = null, $strip_teaser = false) { $content = get_the_content( $more_link_text, $strip_teaser ); $content = str_replace( ']]>', ']]&gt;', $content ); echo $content; }
the_content()関数の中身ですが、apply_filters()が事前に登録されたフィルター関数を$contentに対して実行する部分です。この中に問題(?)のwpautop()が含まれます。
参考:
http://wpdocs.osdn.jp/関数リファレンス/wpautop
http://wpdocs.osdn.jp/テンプレートタグ/the_content
http://wpdocs.osdn.jp/テンプレートタグ/get_the_content
「固定ページ」でだけ自動整形をオフにする
特定のタイミング、特定の条件で、上記で言及した「autopフィルター」を外します。
// the_content() からフィルター削除 remove_filter('the_content', 'wpautop'); // ついでに、the_excerpt() からもフィルター削除 remove_filter('the_excerpt', 'wpautop');
これをどこに記述するかはあなた次第です。
固定ページテンプレートであれば、page.phpの戦闘にかいてもいいでしょう。
もしくはfunction.phpないで、条件分岐を実装できます。
if ( is_main_query() && is_page() ) { remove_filter('the_content', 'wpautop'); remove_filter('the_excerpt', 'wpautop'); }
あらゆる投稿で自動整形をすべてオフにする
functions.phpで、以下を実行します。
remove_filter('the_content', 'wpautop'); remove_filter('the_excerpt', 'wpautop');