Exec-PHPで<!–more–>があるとphp実行されない問題

WordPressでphp実行するプラグイン『Exec-PHP』。
一覧表示したとき『<!--more-->』がある記事はPHPが実行されていない。
無ければ一覧でも問題ないんだけど。
どうも原因は『<!--more-->』を変換することにあるらしい。
その対応方法。

『<!--more-->』をWordPressで処理するのに『<?php』も巻き込んでタグをエスケープ。
それで『<?php』→『< ?php』となってしまうことが原因とのこと。
参照:『wordpressでexec-phpが対応がmoreで反応しない件 | 俺のメモ

これって多分他のPHP実行系プラグインでも同じような問題が起きるんじゃないかなと思う。多分ね。

つまり解決には、一度変換されてしまった『< ?php』を『<?php』に戻してしまうのが手っ取り早い。
でも参照元に書いてあるように『wp-includes/formatting.php』を書き換えてしまうと、アップデート時忘れて戻るから避けたい。

そこで対応はプラグインを作ればいいのだ。
『Exec-PHP』よりも先に実行されるようにすればいい。

作り方としては簡単。
wp-content\plugins以下に下記のような内容を含んだプラグインを追加する。

function phpspace($text) {
	return str_replace("< ?php","<?php",$text);
}
add_filter('the_content', 'phpspace',1);

機能としては単純だから自作プラグインに追加するのがいいと思う。
もしくはExec-PHPプラグインに追加しちゃう。
※他の人が作っているプラグインはアップデートの可能性を考えてオススメしない。

プラグイン機能はwp-config.phpに書いても基本的には動くんだけど『add_filter(~,~,1);』て1番処理を指定しても、Exec-PHPよりも先に処理されないので、プラグインを作ってね。
つまりPHPが動かないで書いたコードがソースに全部出ちゃう。
ブログ自体にはHTMLコメントアウトで表示されない。
多分wordpressのjavascriptがコメントアウトしてくれているのだと思う。

「何言ってるんだか解らない!」
そんなあなたのためにプラグイン用意しときました!

コメントを残す

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