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

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

原因

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

結果、書いたPHPが動かないで、書いたコード内容がそのまま一覧にまるっと出ちゃう。
ちなみに、記事側ではHTMLコメントアウトされて表示されない。
ちゃんと見てないけど、WordPressのJavaScriptがコメントアウトしてくれているのかな、と。

多分他のPHP実行系プラグインでも同じような問題が起きるんじゃないかな?と思う、多分。
使ったこと無いし、確認はしていないので、各々確認してみてください。

対応方法

先程の参照元のように『wp-includes/formatting.php』を書き換えてしまうと、アップデート時忘れて戻るから避けたい。
そうすると変換前にどうこうすることは、現時点では出来ない。

なので、一番手っ取り早く解決するには、一度変換されてしまった『< ?php』を『<?php』に戻してしまえばOK。
つまり、プラグイン作って『Exec-PHP』よりも先に実行されるようにすればいい。

wp-content\plugins以下に『phpspace.php』を作る。

/*
Plugin Name: phpspace
Plugin URI: https://qooga.jb-jk.net/wp/?p=146
Description: exec-phpのmore対応
Version: 1.0
Author: QoogaKIKAKU
Author URI: https://qooga.jb-jk.net
*/
function phpspace($text) {
	return str_replace("< ?php","<?php",$text);
}
add_filter('the_content', 'phpspace',1);

あとは管理画面の『プラグイン』から『有効』にするだけ。

補足というか蛇足。
プラグインの処理内容は、wp-config.phpに書いても動く。
だけど、『add_filter(~,~,1);』のように1番と処理順番を指定しても、Exec-PHPよりも先に処理されない。
なので、プラグインを作ってね。

機能としては単純だから、プラグインを自作している人は、そこに追加してもいいし、Exec-PHPプラグインに追加しちゃってもいいかと思う。

現状、カスタマイズが増えている

公式の最後の更新からしばらく経っているので、結構改造が必要だったりします。
当方は改造して使っているので、見たい人はコチラからどうぞ。
ただし、ざっくりとみて、さくっと単純に突貫的に直している状態なので、本当に自己責任で。

コメント

タイトルとURLをコピーしました