ワードプレスの自動整形機能を記事単位で無効にする

ワードプレスのエディタでHTMLタグを入力すると、開業ごとに自動的に<p>タグが挿入されたり、自分で書いた<br>タグが削除されてしまって困っていた。

文章を書くだけなら困らなかったけれど、テーブルタグなんかを記事中に含めると勝手に<p>タグが挿入されてHTMLが崩れてしまっていたのだ。

そこで、プラグインでどうにかできないかを調べてみた。

もっとも有名なのは「PS Disable Auto Formatting」だろう。
これは、管理画面で設定すればブログに投稿されている全記事の自動整形機能をオフにしてくれるという優れものだ。

しかし、このブログは複数の投稿者によって記事が書かれているのだ。
自分は自動整形機能が不要だと思っても、ほかの人はそうではないかもしれない。

だから、記事毎に特殊なタグが記述されていたら自動整形機能
をオフにするようなプラグインがあればいいのだが、調べてみても見つからなかった。

幸いワードプレスはPHP製で、自分はもとペチパーなので欲しい機能は自作することにした。

仕様:記事の中に「#autoff#」というタグが含まれている場合は、ワードプレスの自動整形機能をオフにする。
プラグイン名:Ignore Wpautoup とでもしておこう。

pluginsディレクトリに「ignore_wpautoup」というフォルダを作り、その中にignore_wpautoup.phpというファイルを作成する。

ignore_wpautoup.phpの中身はこちら

?php
/*
Plugin Name: Ignore Wpautoup
Plugin URI: http://example.com/plugin
Description: 記事の自動整形機能をオフにする
Author: 作成者
Version: 0.1
Author URI: http://example.com
*/

class Wpautoup
{
    /**
     * このタグが記事中に含まれている場合は、自動整形機能をオフにする
     * @var string
     */
    private static $tag = "#autoff#";

    /**
     * 初期化処理
     * アクションフックを登録する
     */
    public function __construct()
    {
        // wpautoupより前に実行するために第3引数には8を指定する
        add_action('the_content', array($this, 'autoff'), 8);
    }

    /**
     * 自動整形機能をオフにする
     *
     * @param $content
     * @return mixed $content string
     */
    public function autoff($content)
    {

        if(strpos($content, self::$tag) !== false ){
            remove_filter('the_content', 'wpautop');
            remove_filter('the_excerpt', 'wpautop');
            // タグも消す
            $content = str_replace(self::$tag, '', $content);
        }

        return $content;
    }
}

// インスタンスを生成して、アクションフックに登録する
$wpautoup = new Wpautoup();

作成後は管理画面でプラグインを有効化する。

テーブルタグを入力しても 自動整形機能がオフになっているので
テーブルが崩れないのだ やったね!

執筆者:川島
冬でも直射日光を浴びるととても暑い。

コメントを残す

メールアドレスが公開されることはありません。

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)