WordPress Markdownプラグインで勝手に改行される問題

WordPressを設置して、記事を Markdown で書くために、
Jetpackを入れて、その中の Markdown モジュールを有効にした。

ただそれだと、改行の挙動が想定と違っていた。
通常の Markdown だと、(空行でない) 単なる改行は無視されるはずと思っていたが、
<br/> に変換されてしまっている。

これをなんとか通常の挙動にしたい。

起こっていること(想像)

以下は、ちゃんと調べずに、挙動からの推測で書いている。

WordPressは、DB上で各記事を「テキスト」編集の形式のまま保持している。
それを出力時に加工して出力している。
通常は、空行で区切って段落(<p>)とするのと、段落内の改行を<br>に変更する。
wpautop というらしい。

markdownプラグインを入れた場合は、
markdown → wpautop という順番で処理され、
markdownの方もそういう加工が後段に入ることは意識してあるので、
あえてmarkdownの方では <p>タグをつけていない。
おそらくこの挙動は、途中からmarkdownプラグインを導入した場合でも、
過去のエントリを崩さないためだと思う。

ただ、今回は最初から全エントリをmarkdown形式で書いていくので、
この辺、無視してしまってもよい。

対応方法

対応方法としては、

  1. markdownの方で<p>タグも出力するようにして、wpautop は完全に無効にする
  2. markdownの方は現状のまま(<p>タグがつかない)、wpautopで<p>タグだけつける

が考えられるけど、調べたら 2 の方法でやっているブログが見つかったので、
とりあえずはその方法で行う。

やってみる

テーマは Twenty Fifteen を使っているので、
WordPressの管理画面 > テーマの編集 から
functions.php を選んで、以下の記述を追加する。

// 記事の自動整形を無効にする
// https://wpdocs.osdn.jp/%E9%96%A2%E6%95%B0%E3%83%AA%E3%83%95%E3%82%A1%E3%83%AC%E3%83%B3%E3%82%B9/wpautop
remove_filter( 'the_content', 'wpautop' );
remove_filter( 'the_excerpt', 'wpautop' );

これだと、<p></p><br/>も自動付与されなくなる。
結果 jetpack の markdown では、<p> までも付かなくなってしまった。

次に、<br> の処理だけを止めるようにする。

// 記事の自動整形のうち、<br>の付与だけをやめる。
// http://blog.sfpgmr.net/entry/%E6%98%A8%E6%97%A5%E3%81%8B%E3%82%89markdown%E8%A8%98%E6%B3%95%E3%82%92%E8%A9%A6%E3%81%97%E3%81%A6%E3%81%84%E3%82%8B
function wpautop_nobr($txt) {
    return wpautop($txt, false);
}
remove_filter('the_content','wpautop');
add_filter('the_content','wpautop_nobr');
remove_filter('the_excerpt','wpautop');
add_filter('the_excerpt','wpautop_nobr');

これだと期待どおり、<p>がついて<br>がつかないという動作になった。
とりあえずはこれでOk。

残る課題

今回、テーマの functions.php に追加したが、
本来テーマによらない挙動のはずなので、
もっと適切な(テーマによらない)場所に記載するのが適切だと思うのだが、
そこがどこなのか。

ブログ始めました。WordPressのセットアップ。

主に勉強したことをまとめてアウトプットしていくことが大事だと思って、ブログを始めようと思います。

レンタルサーバに WordPress をセットアップしたので、そのメモ。

簡単なので、メモ残すこともなかったぐらいだったけど。

ゴール

WordPress でブログを立てる。

要件

  • サーバ: さくらのレンタルサーバ
  • ドメイン: ムームードメインで取得した entosen.tokyo
  • サービスURL: http://www.entosen.tokyo/b/
  • 同ホストで別ドメインのサービスもするかもしれないので、ドキュメントルートはサブドメインを切る形でやる
  • 記事はmarkdownで書く

ブログ以外のサービスも同じドメインでやるかもしれないと思って、
ブログは /b/ 以下に作ることにした。

やったこと

ドメインの設定

ドメインはすでに取得済みだったので、設定から。

“entosen.tokyo” を解決するネームサーバはここ(さくらのDNS)だと設定する。

参考

ドメインを利用(他社で取得・管理のドメイン)|さくらインターネット公式サポートサイト

  • ムームードメイン>ネームサーバ設定変更>「GMOペパボ以外のネームサーバを使用する」
    • ここで、さくらのレンタルサーバで指定されているDNSサーバを登録。

確認

反映するまでに時間がかかるが、
反映されれば whois コマンドで以下のように出るはず。

% whois entosen.tokyo
Domain Name:ENTOSEN.TOKYO
...省略...
Name Server:NS1.DNS.NE.JP
Name Server:NS2.DNS.NE.JP
...省略...

OK。

さくらのサーバのDNSの設定(Aレコード)

  • さくらのサーバコントロールパネル>ドメイン設定>新しいドメインの追加
  • 他社取得したドメインを移管せずに使う・属性型JPドメインを使う(さくら管理も含む)
  • ドメイン追加に進む
  • ドメイン名に取得したドメイン名 entosen.tokyo を入力

これで、entosen.tokyo と www.entosen.tokyo が DNSに登録されるらしい。

確認。

さくらのネームサーバー上を確認

>nslookup entosen.tokyo ns1.dns.ne.jp
サーバー: ns1.dns.ne.jp
Address: 210.188.224.9

名前: entosen.tokyo
Address: 219.94.129.220

>nslookup www.entosen.tokyo ns1.dns.ne.jp
サーバー: ns1.dns.ne.jp
Address: 210.188.224.9

名前: entosen.tokyo
Address: 219.94.129.220
Aliases: www.entosen.tokyo

デフォルトのネームサーバーで確認。反映には時間がかかる。
>nslookup entosen.tokyo

権限のない回答:
名前: entosen.tokyo
Address: 219.94.129.220

>nslookup www.entosen.tokyo

権限のない回答:
名前: entosen.tokyo
Address: 219.94.129.220
Aliases: www.entosen.tokyo

ブラウザでも確認

バーチャルホストの設定

同じレンタルサーバで別ドメインのサービスもするかもしれないので、
entosen.tokyo は、バーチャルドメインとして別ディレクトリに
ドキュメントルートが来るように設定する。

  • さくらのサーバコントロールパネル>ドメイン設定>entosen.tokyo の「変更」
  • 「マルチドメインの対象のフォルダをご指定ください」 → “/entosen” を指定。

これで、 ~/www/entosen がドキュメントルートのディレクトリになる。

WordPress のインストール

これに従ってやったら、簡単にできたわ。

WordPressでブログを始めよう!|さくらインターネット公式サポートサイト

WordPress の設定

ざっと見て、大事そうなところは設定した。

  • 設定>一般設定
    • WordPressアドレス → http://www.entosen.tokyo/b に (wwwを追加)
    • サイトアドレスも同様
    • 日付は YYYY-MM-DD 形式
    • 時刻フォーマットは24時間形式
  • 設定>パーマリンク設定
    • パーマリンクは 「投稿名」に。

パーマリンク名は、間にカテゴリを入れようかと迷ったけど、
やはりカテゴリは将来変えたくなることもあるだろうと思って、
投稿名だけで行くことにした。

WordPressをインストールしたら最初に設定しておきたい22項目 | ワードプレスの使い方!初心者めっちゃ入門ガイド【ハイパー】

akismetプラグインの設定

[WordPressコメントスパムを排除するプラグイン『Akismet』2014版 | ワードプレスの使い方!初心者めっちゃ入門ガイド【ハイパー】]
(http://wordpress.siyouyo.com/plugin/1290/)

WP Multibyte Patch の有効化

Markdownで投稿できるように
→ JP Markdown プラグインを使う。

https://ja.wordpress.org/plugins/jetpack-markdown/

あれ!? markdownでは、普通に改行した場合は改行にならないと思ってたんだけど、
なんか改行されてるね。
これについては 別エントリで。