2025-07-12
PHP8にバージョンアップすると「続きを読む」が作動しない
最近サイトのPHPをバージョンアップしろという警告がうっとうしいので、これまでの7.4.33から8.2.28に上げたところ、ネタバレ防止のために使用している「続きを読む」のリンクが作動しなくなってしまいました。
そもそもこの「続きを読む」はWordpressにデフォルトで備わっている機能で、記事に<!–more–>タグを入れると、そこから下は「続きを読む」等のテキストリンクに置き換えられて表示されなくなり、そのリンクをクリックすると、全文が表示される記事に遷移する、という仕様になっています。
ただyukkun20は記事が遷移するのがいやなので、「続きを読む」をクリックすると、JavaScriptで隠れている部分がスライドして表示できるようにするプラグイン「Expand More Link」を使っていました。でもこのプラグイン、作者さんのこの書き込み以外の情報がないんだよな…しかも15年以上更新されてない。
おそらくPHP8には非対応になってしまったのだと思いましたので、これを機にプラグインを乗りかえることにしました。ところが世の中には「続きを読む」をカスタマイズするプラグインは山ほどあるのですが、moreタグをそのままいじれるプラグインがないんだよな…。そのままいじれないと、これまでの記事を全部修正しないといけなくなるのでそれじゃ意味がありません。
色々探した結果、こちらのブログに記載されている方法で解決しました。
ただし、このままだとPHP8では使用できないpreg_replace関数の/e修飾子が悪さをするので、こちらのサイトを参考に修正しました。
具体的には、117行付近の
$output = preg_replace('/\%u([0-9A-F]{4,4})/e', "'&#'.base_convert('\\1',16,10).';'", $output);
を、
$output = preg_replace_callback('/\%u([0-9A-F]{4,4})/', function ($m) { return '&#'.base_convert('\\1',16,10).';'; }, $output);
と修正します。これで正しく作動するはずです。
yukkun20もネット黎明期からこの世界にいますけど、本当時代の変化を感じます…