質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.47%
プラグイン

プラグイン(plug-in)は、ソフトウェアアプリケーションの機能拡張の為に開発された、一組のソフトウェアコンポーネントのことを指します。

Q&A

解決済

1回答

193閲覧

Warning: Illegal string offset の表示が出る

peppermint0915

総合スコア1

プラグイン

プラグイン(plug-in)は、ソフトウェアアプリケーションの機能拡張の為に開発された、一組のソフトウェアコンポーネントのことを指します。

0グッド

0クリップ

投稿2024/02/16 05:53

実現したいこと

Warningを消す方法を教えてください。

phpのバージョンは7.4です。
どうしたらいいのか、初心者ですので、分かりやすくお願いします。
お手数ですが宜しくお願いします。

発生している問題・分からないこと

コンタクトフォームのプラグインを更新した時に、ワードプレスを最新のバージョンに更新しました。
するとChild Pages Shortcode(9年更新されていない)のプラグインが原因と思われるWarning: Illegal string offsetの表示が出るようになりました。

エラーメッセージ

error

1Warning: Illegal string offset 'id' in /home/〇〇〇〇/www/wp-content/plugins/child-pages-shortcode/child-pages-shortcode.php on line 81

該当のソースコード

public function shortcode($p, $template = null) { if( !isset($p['id']) || !intval($p['id']) ){ **81行目⇒**  $p['id'] = get_the_ID(); }

試したこと・調べたこと

  • teratailやGoogle等で検索した
  • ソースコードを自分なりに変更した
  • 知人に聞いた
  • その他
上記の詳細・結果

teratailで似たような内容がありましたが、よく理解できませんでした。

補足

特になし

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

以下の2環境でWordPress、PHPのエラー出力の設定をして確認しましたが、現象を再現できませんでした(エラー出力無しで該当プラグインは正常に動作しています)。
ただし、ソースを見るとWarningが出ることは想像できるので、机上調査の結果となります。

  • FreeBSD 13.2、PHP 7.4.32、WordPress 6.4.3
  • FreeBSD 13.2、PHP 8.1.27、WordPress 6.4.3

Child Pages Shortcodeは9年前のプラグインなので、PHP 5.xを前提にしていると思われます。
PHP 7.xから、配列を明示的に初期化しないで代入すると「Warning: Illegal string offset~」が出るようになりました。
ちなみにPHP 8.xでは「Fatal error: Uncaught TypeError: Cannot access offset of type string on string in~」となります。
修正方法を具体的に書くと、代入前に$p = array();が必要です。

対処方法としては、以下の3点になります。

  1. Child Pages Shortcodeの使用を止めて、同じ働きをする別のプラグインを探す
  2. PHPを5.xまで下げて、そのPHPに対応するWordPressのバージョンまで下げる
  3. Child Pages Shortcodeのソースを修正する

1をお勧めしますが、プラグインの呼び出し方法が変わると、ページの書き換えも発生するので面倒かもしれません。
2は現実的ではないですね。
3ですが、実はChild Pages ShortcodeのGitHubにて、修正版のプルリクが出ていて、masterに反映されずに止まっています。
ちょっと、ややこしいですが、WordPress公式で配布されているものとGitHubのmasterでは、同じバージョンでもchild-pages-shortcode.phpに差分があります。

Child Pages ShortcodeのGitHub
https://github.com/miya0001/child-pages-shortcode

プルリク
https://github.com/miya0001/child-pages-shortcode/pull/10

プルリク出した人のGitHubの該当ソース
https://github.com/tablacus/child-pages-shortcode/blob/master/child-pages-shortcode.php

一番下のリンクからchild-pages-shortcode.phpをダウンロードして差し替えるだけで、Warning無しで動作すると思われます。
child-pages-shortcode.php以外のソースに差分が無いことは確認しています。

ただし、冒頭に書いたような事情で自分では確認できていないので、あくまで参考にしてください。
(よく理解できない点があればコメントしてください。)

投稿2024/02/17 14:33

hiroki-o

総合スコア483

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

peppermint0915

2024/02/19 04:00

回答ありがとうございます。 試したところ問題が無事に解決しました! 一番下のリンクから、child-pages-shortcode.phpをダウンロードして差し替えました。 何も問題は起こりませんでした。とても助かりました。 ベストアンサーに選ばせていただきました。
peppermint0915

2024/02/19 04:05

一番下のリンクからchild-pages-shortcode.phpをダウンロードして差し替えました。すぐに直りました。とても助かりました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.47%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問