Web

【WordPress】JP Markdownプラグインが code タグの属性を削除する問題への対応方法

投稿日:

1. 現象

WordPress の JP Markdown プラグインを使っていると、以下のような (<pre> タグを伴わない単独の) <code> タグを記述した場合、

<code class="bar" style="color:red;">Foo</code>

属性が削除されて出力されてしまいます。

<code>Foo</code>

これでは、<code> タグに対して、CSS クラスを複数用意して使い分けることができず不便です。

JP Markdown プラグインについて

JP Markdown プラグインは、WordPress の本文を Markdown 形式で記述するためのプラグインです。
WordPress.com」などを提供している Automattic 社は、「Jetpack」という有名なプラグインを開発していますが、JP Markdown は、この Jetpack の派生プラグインということになっています。
但し、最新バージョンのWordPress ではテストされていませんので、ご利用は自己責任でお願いします。

2. 原因

jetpack-markdown/markdown/gfm.php ファイル内にある single_line_code_preserve() 関数で、<code>タグ内の文字列を一旦退避させるような処理 (preserve 処理) を行っているのですが、ここで、<code> タグの属性値を保持させず、属性なしの <code></code> で挟んだ文字列を返すようになっているのが原因です。

参考:https://plugins.svn.wordpress.org/jetpack-markdown/trunk/markdown/lib/gfm.php

3. 対応方法

jetpack-markdown/markdown/easy-markdown.php ファイルを編集します。

354行目に緑字の行を追加します。

public function get_parser() {
    if ( ! self::$parser ) {
        require_once('lib/0-load.php');
        self::$parser = new WPCom_GHF_Markdown_Parser;
+       self::$parser->preserve_inline_code_blocks = false;
    }
    return self::$parser;
}

※ 先頭にある「+」は、「追記する」という意味です。この記号は記述しないでください。

これにより、<code> タグ内の preserve 処理をさせません。この処理を実行しなければ、<code> タグの処理自体が行われないので、属性部分はそのまま保持されます。
本当はコード内でなく、設定ファイルなどで変更したいのですが、そういう機能がないので、仕方なくコード内に追記しました。

📂-Web

執筆者:labo


comment

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

関連記事

Web Programming

Import maps の使い方

Import maps の使い方について説明します。

Web

cron-job.org を利用して特定のURLに定期的にアクセスさせる

cron-job.org というサービスの利用手順について説明します。

Google

Google マップの地図をウェブページに埋め込む手順

Google マップの地図を、ウェブページに埋め込む手順について説明します。 手順自体は簡単なのですが、Google マップの仕様が時々変わり、操作手順もその影響を受けることがあるため、現時点(201 …

Chrome

Chrome のローカルオーバーライド機能を使ってWebサイトのファイルをローカルのファイルに置き換える

目次1. Chrome のローカルオーバーライド機能とは?2. 使い方1. この機能で使用するローカル側のフォルダーを指定します2. 置き換えるファイルを指定します3. ファイルを編集します3. Ov …

Chrome

ブックマークレットで画面上の色を取得する(Eye Dropper APIを利用)

画面上の色を取得するブックマークレットを紹介します。