PC・IT知識 PHP WordPress サイト構築 プログラミング

WordPressプラグイン Similar Postsのバグを直す

投稿日:

Similar PostsのPHP文が古いみたい。

 

WordPressを使っていたら、こんなメッセージが。

This message will be suppressed on further calls in /home/***/wp-content/plugins/similar-posts/similar-posts.php on line 390

どうやら、プラグインで使っているSimilar Postsの中のPHPが対応しなくなってしまうようだ。

具体的にはeach文が原因。PHP7からは非推奨になってしまっているようだ。

PHP研修 each()関数と配列の可変変数のPHP7.2対応

なので、each文を修正してあげれば良いです。

 

 

similar-posts/similar-posts.php 390行目付近

 

  if ($utf8) {
        mb_regex_encoding('UTF-8');
        mb_internal_encoding('UTF-8');
        $wordlist = mb_split("\W+", sp_mb_clean_words($text));
        $words = '';
        reset($wordlist);
        while (list($n, $word) =  each($wordlist)) {
            if ( mb_strlen($word) > 3 && !isset($overusedwords[$word])) {
                switch ($use_stemmer) {
                case 'true':
                    $words .= sp_mb_str_pad(stem($word), 4, '_') . ' ';
                    break;
                case 'fuzzy':
                    $words .= sp_mb_str_pad(metaphone($word), 4, '_') . ' ';
                    break;
                case 'false':
                default:
                    $words .= $word . ' ';
                }
            }
        }

 

4行目のこいつですね。

 

      while (list($n, $word) =  each($wordlist)) {

これを

     while (list($n, $word) =  current($wordlist)) {

こう変えます。

そして、while文の最後に

         next($wordlist);

こいつを加えます。

まとめると、こういうことになります。

 

  if ($utf8) {
        mb_regex_encoding('UTF-8');
        mb_internal_encoding('UTF-8');
        $wordlist = mb_split("\W+", sp_mb_clean_words($text));
        $words = '';
        reset($wordlist);
        while (list($n, $word) =  current($wordlist)) {
            if ( mb_strlen($word) > 3 && !isset($overusedwords[$word])) {
                switch ($use_stemmer) {
                case 'true':
                    $words .= sp_mb_str_pad(stem($word), 4, '_') . ' ';
                    break;
                case 'fuzzy':
                    $words .= sp_mb_str_pad(metaphone($word), 4, '_') . ' ';
                    break;
                case 'false':
                default:
                    $words .= $word . ' ';
                }
            }
            next($wordlist);
        }

こう変える。

すると、エラー文章が解消されます。

めでたしめでたし。

このプラグインは愛用しているので、これからも使っていきたいですね。

「面白いじゃん」と思ったらぜひシェアをお願いします!

-PC・IT知識, PHP, WordPress, サイト構築, プログラミング
-, , , , ,

Copyright© ちゃいら随筆 , 2019 All Rights Reserved Powered by STINGER.