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

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

新規登録して質問してみよう
ただいま回答率
85.50%
WordPress

WordPressは、PHPで開発されているオープンソースのブログソフトウェアです。データベース管理システムにはMySQLを用いています。フリーのブログソフトウェアの中では最も人気が高く、PHPとHTMLを使って簡単にテンプレートをカスタマイズすることができます。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Q&A

解決済

1回答

828閲覧

PHPのバージョン変更に伴うエラーを解消したい(WordPress)

takeshi3156

総合スコア11

WordPress

WordPressは、PHPで開発されているオープンソースのブログソフトウェアです。データベース管理システムにはMySQLを用いています。フリーのブログソフトウェアの中では最も人気が高く、PHPとHTMLを使って簡単にテンプレートをカスタマイズすることができます。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

0グッド

0クリップ

投稿2023/03/02 08:25

WordPressで作ったサイトで使っているPHPのバージョンを7.4.33→8.0.25に変更したところ、
functions.phpに記述しているコードに対して、以下のエラーが表示されています。
バージョンを元に戻すとエラーメッセージが表示されなくなるので、バージョンの違いによるエラーなのは明白です。

Warning: Undefined variable $tag in /[ファイルのディレクトリ]/functions.php on line 55 Warning: Undefined variable $tag in /[ファイルのディレクトリ]/functions.php on line 33

ソースコードは以下のとおりです。

PHP

1//timelineショートコードコンテンツ内に余計な改行や文字列が入らないように除外 2if ( !function_exists( 'remove_wrap_shortcode_wpautop' ) ): 3function remove_wrap_shortcode_wpautop($shortcode, $content) { 4 //tiショートコードのみを抽出 5 $pattern = '/\['.$shortcode.'.*?\].*?\[\/'.$shortcode.'\]/is'; 6 if (preg_match_all($pattern, $content, $m)) { 7 $all = null; 8 foreach ($m[0] as $code) { 9 $all .= $code; 10 } 11 return $all; 12 } 13} 14endif; 15//タイムラインショートコード 16add_shortcode('ptimeline', 'tl_shortcode'); 17if ( !function_exists( 'tl_shortcode' ) ): 18function tl_shortcode( $atts, $content = null ) { 19extract( shortcode_atts( array( 20 'color' => null, 21 'marker' => null, 22 'icon' => null, 23 ), $atts ) ); 24 $content = remove_wrap_shortcode_wpautop('ti', $content); 25 $content = do_shortcode( shortcode_unautop( $content ) ); 26 if ( $icon ): 27 $tag .= '<style type="text/css">.ptimeline-wrap .'.$icon.' .ptimeline-item .ptimeline-marker:before{ content:"\\'.$icon.'";}</style>'; 28 endif; 29 $tag .= '<div class="ptimeline-wrap">'. 30 '<ul class="ptimeline '.$color.' '.$marker.' '.$icon.'">'. 31 $content. 32 '</ul>'. 33 '</div>'; 34 return apply_filters('timeline_tag', $tag); 35} 36endif; 37// タイムラインショートコード中身 38add_shortcode('ti', 'tl_item_shortcode'); 39if ( !function_exists( 'tl_item_shortcode' ) ): 40function tl_item_shortcode( $atts, $content = null ) { 41 extract( shortcode_atts( array( 42 'title' => null, 43 'label' => null, 44 'icon_item' => null, 45 ), $atts ) ); 46 $content = do_shortcode( shortcode_unautop( $content ) ); 47 if ($icon_item): 48 $tag .= '<style type="text/css">.ptimeline-wrap .ptimeline-item .'.$icon_item.':before{ content:"\\'.$icon_item.'" !important;}</style>'; 49 endif; 50 $tag .= '<li class="ptimeline-item">'. 51 '<div class="ptimeline-label">'.$label.'</div>'. 52 '<div class="ptimeline-title">'.$title.'</div>'. 53 '<div class="ptimeline-main">'.$content.'</div>'. 54 '<div class="ptimeline-marker '.$icon_item.'"></div>'. 55 '</li>'; 56 return apply_filters('timeline_item_tag', $tag); 57} 58endif;

なお、上記のコード自体は以下の記事などで紹介されているものをそのまま使用しています。
https://aofireawayblog.com/wordpress-timeline-howto/

エラーメッセージのとおりだと、単純に変数が定義されてないということですが、コード上は定義しているはずです。
PHPのバージョン変更に伴う関数などの仕様変更が原因なのだと思いますが、具体的にどうしたらいいか分かりません。

私自身、ゴリゴリのエンジニアではないので、お知恵のある方の力を貸していただけますと幸いです。

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

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

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

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

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

phper.k

2023/03/02 08:33

WordPress のバージョンあげないといけません すくなくとも WordPress 6 系にしないといけないし、使用しているプラグインの対応状況も調べないといけません。
takeshi3156

2023/03/02 09:27

WordPressのバージョンは6.1.1です…。WordPress自体の更新はいつもやっているので、そこの問題ではないと思います。
guest

回答1

0

ベストアンサー

とりあえず無理矢理でも消したいならソースの最初の方に

PHP

1error_reporting(E_ALL ^ E_WARNING);

を記載ください。ワーニングを吐かなくなります。

ちゃんとやるなら各functionごとに宣言をしてから変数を使うようにしてください
ご質問の例であれば各functionの最初に

PHP

1$tag="";

的なものを記載ください。

投稿2023/03/02 09:20

yambejp

総合スコア114572

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

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

takeshi3156

2023/03/02 09:30

ご返信ありがとうございます。 $tag=""; を追加してみましたが、ダメでした…。
yambejp

2023/03/02 09:59

各functionの中で宣言するんですが大丈夫でしょうか?
takeshi3156

2023/03/05 02:56

ご返答に気づいておりませんでした。申し訳ありません。 ChatGPTにも質問してみたところ、各function内の一番最初と、if文内で$tag="";を記載した所、Warningが消えました。 Warning解消後のコードの一部を記載しておきます。 ================= //タイムラインショートコード add_shortcode('ptimeline', 'tl_shortcode'); if ( !function_exists( 'tl_shortcode' ) ): function tl_shortcode( $atts, $content = null ) { $tag = ''; // $tag を初期化 extract( shortcode_atts( array( 'color' => null, 'marker' => null, 'icon' => null, ), $atts ) ); $content = remove_wrap_shortcode_wpautop('ti', $content); $content = do_shortcode( shortcode_unautop( $content ) ); if ( $icon ): $tag = ''; // $tag を初期化 $tag .= '<style type="text/css">.ptimeline-wrap .'.$icon.' .ptimeline-item .ptimeline-marker:before{ content:"\\'.$icon.'";}</style>'; endif; $tag .= '<div class="ptimeline-wrap">'. '<ul class="ptimeline '.$color.' '.$marker.' '.$icon.'">'. $content. '</ul>'. '</div>'; return apply_filters('timeline_tag', $tag); } endif; ================= もう1つのfunctionについても同様に$tag = '';を追加しました。 大変助かりました。ありがとうございました!
takeshi3156

2023/03/05 07:37

if文の後の$tag='';は不要でしたね…。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問