WordPressでphp実行するプラグイン『Exec-PHP』。
一覧表示したとき『<!--more-->』がある記事はPHPが実行されていない。
無ければ一覧でも問題ないんだけど。
どうも原因は『<!--more-->』を変換することにあるらしい。
その対応方法。
<!--more-->を使用すると、一覧表示にて問題が発生
出る問題は2つ
1つずつ対応策を書いておきます。
途中またはタイトル以降、エラーメッセージが表示されて終了
『<img src="<?php echo esc_url( site_url() ); ?>/user.gif" />』という使い方したところ、エラーが出た。
原因
テンプレートによっては『<!--more-->』までではなく、途中で文字列を切ってしまうことが原因。
対応方法
PHPの終了タグまで出ていないことが原因でのエラーなので、表示される部分まで、タグが丸ごと入っていれば問題は起きない。
PHPが実行されずコードが表示される
原因
『<!--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);
あとは管理画面の『プラグイン』から『有効』にするだけ。
既存ファイルに追加する
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よりも先に処理されないみたいなので、プラグインをイジった方がいい。
プラグインを自作している人は、そこに追加してもOK。
現状、カスタマイズが増えている
公式の最後の更新からしばらく経っているので、結構改造が必要だったりします。
当方は改造して使っているので、見たい人はコチラからどうぞ。
ただし本当に自己責任で。
コメント