かもメモ

自分の落ちた落とし穴に何度も落ちる人のメモ帳

PHP マークダウン変換できるライブラリParsedown使ってみた。

WordPressのカスタムフィールドで作っていたテキストエリアで部分的にボールドにしたいという要望がありました。
運用してる人的にHTML書いてくださいってのはハードル高そうだし、カスタムフィールドをWYSIWYGにするのは工数もかかるし自由に出来すぎるとwordみたいに超でかい文字とか原色みたいな色とかデザインルールに沿わないカオスが生まれそうなので避けたい。

ということで、マークダウン記法で変換させることにしました。
今回は手っ取り早くマークダウン変換できるライブラリを導入して対応することにしました。

Parsedown

composerでインストールでき、高速であるという事で、今回のようなシンプルな要件には良さそうだなと思いParsedownを使うことにしました。

インストール

composerでインストールします

$ composer require erusev/parsedown

WordPressから使う

テーマのfunction.phpに読み込ませます。

<?php // function.php
// パスは適時変更してください
require_once(__ROOT__ . '../vendor/autoload.php');

カスタムフィールドのテキストのマークダウンをHTML変換

<?php // function.php
function get_custom_field_text($postID, $metaKey) {
  $Parsedown = new Parsedown();
  // textareaの改行はそのまま改行にする
  $text = nl2br(esc_html( get_post_meta($postID, $metaKey, true) ));
  // Parsedown->lineでインライン要素のマークダウンをHTML化
  $text = $Parsedown->line($text);
  return $text;
}

はい。簡単にマークダウンが使えるテキストエリアのカスタムフィールドができあがりました!!
今回使ったParsedownはline()メソッドを使えばブロック要素は無視してインライン要素だけマークダウン形式から変換できる様だったので機能を絞る意味でもマッチしていました。
表示速度に関しては、カスタムフィールドたくさん使っている箇所は予めキャッシュ化するようにしていたので分からないですが、簡単に導入して使えるのでとても良いライブラリだと思いました。
また、GitHubでコードを見るとライブラリ自体1つのPHPファイルでとてもシンプルなのでマークダウンの正規表現とかの勉強にもなりそうです!

運用者には「ボールドにしたい箇所を2重のアスタリスク**で囲ってください。例 **ボールドにしたい文字**という感じで伝えました。
偶然マークダウン記法になって事故が起こる可能性は無きにしもあらず…なので
将来的には使用可能な記法を絞れるように、時間あるときにでもライブラリを読んで機能制限できるようにしてみようかなーとか考え中。

ホント、マークダウンのメリットってWordやWYSIWYGみたいに書く人によって文字がめっちゃデカくなったり、自由に色選べるから好き勝手な文字色や背景色で強調されたり、ティラノサウルスの3Dデータをぶっこまれたりしない。
決まったデザイントーンに則った表示になり文章のアウトラインが解りやすくなる。これに尽きると思うんです。
googleドライブで使える文章…ぜひマークダウンのドキュメントもプラグイン無しで作れるようにして欲しい… (もうあります?


[参考]