functions.php WordPress

【WordPress】<cite>~</cite>自動追加

2023年4月12日

はじめに

ブログを書いていると、時々映画や小説の作品名を『(タイトル)』で書くのですが、このようなものは<cite>タイトル</cite>で囲った方が良い?ようなことを読みました。
しかし、既に書いてあるものは一括置換するとして、これからこの書式を忘れずに書いていく自信もありません。
『(タイトル)』の本文をHTMLにする際に自動的に『<cite>(タイトル)</cite>』にしてくれないものか、と考え、作りました。

『』のカッコの箇所が《》だったり、【】だったりする方はご自身でお書き換えください。
(前回、<h1>タグまで変換されたのが良くなかったようで、修正しました)

functions.php

function wrap_cite_tags( $content ) {
    // 『タイトル』を『<cite>タイトル</cite>』に変換
    $content = preg_replace_callback('/(<\/code><h1><code>.*?<\/h1>)|『(.*?)』/u', function ($matches) {
        if (!empty($matches[1])) {
            return $matches[1];
        }
        return '『<cite>' . $matches[2] . '</cite>』';
    }, $content);

    // h1タグ内では変換しない
    $content = preg_replace_callback('/<h1>(.*?)<\/h1>/u', function ($matches) {
        return '<h1>' . $matches[1] . '</h1>';
    }, $content);

    // その他のHTMLコードでは変換する
    $content = preg_replace_callback('/<([^h1>]+)>(.*?)<\/\1>/u', function ($matches) {
        return '<' . $matches[1] . '>' . preg_replace('/『(.*?)』/u', '『<cite>$1</cite>』', $matches[2]) . '</' . $matches[1] . '>';
    }, $content);

    return $content;
}
add_filter( 'the_content', 'wrap_cite_tags' );

注意

functions.phpは間違えると画面が真っ白になったりします。ご注意ください。また、上記のコードもWordPressのバージョンやご使用のテーマなどによっては動作しないかもしれません。

コードスニペットプラグインを使う

【WordPress】<cite>~</cite>自動追加

functions.phpを直接編集するのは怖いです。
そこでお勧めしたいのが、Code Snippetsプラグインです。
インストールして有効化しましたら、新規追加で下記のようにコードをコピペします。
ここでサイトのセキュリティにてWAFがOnになっていると下記のようなエラーメッセージが表示されて保存ができません。
この場合は、レンタルサーバーにログインして更新する時にWAFの設定を一時的にOffにします。

確認の仕方

記事のプレビューを表示させて、『タイトル』箇所で右クリックをし、メニューを表示させますと、最下行に「検証」とありますのでクリックします。
下記画面のように『タイトル』箇所のHTMLソースコードが<cite>~</cite>で囲まれていることが確認できます。

-functions.php, WordPress
-,