
お忙しい中恐れ入ります。
WordPressにてPHP8.2にて使用しているのですが、どうしても上記Warning・・・・。が消せません。
何かの未定義なのでしょうけれど、一つ直すと違う行が同じWarning・・・・。と表示されてしまいます。
コードは以下になります。
---------------------------------------------------------------------------------------------------------
//内部リンクをはてなカード風にするショートコード
function nlink_scode($atts) {
extract(shortcode_atts(array(
'url'=>"",
'title'=>"",
'excerpt'=>""
),$atts));
$id = url_to_postid($url);//URLから投稿IDを取得
$post = get_post($id);//IDから投稿情報の取得
$date = mysql2date('Y-m-d H:i', $post->post_date);//投稿日の取得
$img_width ="200";//画像サイズの幅指定
$img_height = "200";//画像サイズの高さ指定
$no_image = get_template_directory_uri().'/images/no-img.png';//アイキャッチ画像がない場合の画像を指定
//抜粋を取得
if(empty($excerpt)){
if($post->post_excerpt){
$excerpt = get_the_custom_excerpt($post->post_excerpt , 90);
}else{
$excerpt = get_the_custom_excerpt($post->post_content , 90);
}
}
//タイトルを取得
if(empty($title)){
$title = esc_html(get_the_title($id));
}
//アイキャッチ画像を取得
if(has_post_thumbnail($id)) {
$img = wp_get_attachment_image_src(get_post_thumbnail_id($id),array($img_width,$img_height));
$img_tag = "<img src='" . $img[0] . "' alt='{$title}' width=" . $img[1] . " height=" . $img[2] . " />";
} else { $img_tag ='<img src="'.$no_image.'" alt="" width="'.$img_width.'" height="'.$img_height.'" />';
}
$nlink .='<div>
<a href="'. $url .'" class="tmt-blog-card">
<div class="tmt-blog-card-box">
<div class="tmt-blog-card-thumbnail loading=”lazy”">'. $img_tag .'</div>
<div class="tmt-blog-card-content">
<div class="tmt-blog-card-title">'. $title .' </div>
<div class="tmt-blog-card-excerpt">'. $excerpt .'</div>
</div>
</div>
<div class="clear"></div>
</a></div>';
return $nlink;
}
add_shortcode("nlink", "nlink_scode");
---------------------------------------------------------------------------------------------------------
上記の89行目は、以下の部分になるのですが、
<div class="tmt-blog-card-excerpt">'. $excerpt .'</div>◯◯◯
↑
上記の◯◯の部分にはsvgを記載しています。質問の長さが入り切らなかったので省略しました。
svgの有無に関わらず、
上記コードにて未定義のものがあるのでしょうか?
svgがいけないのでしょうか?
それともやはり何か未定義のものがあるのでしょうか?
お忙しい中大変恐れ入りますが、
何卒ご教授お願い申し上げます。
お願い申し上げます。
なお、
PHP8のエラー回避の以下コードを使用して一応はError表示を非表示にはしているのですが、
将来的なことも考えて、
上記コードのどこがいけないのかご教授いただけましたら幸いです。
よろしくお願い申し上げます。
No.4ベストアンサー
- 回答日時:
$nlink ='<div(以下略)
としない理由は何ですか?
PHPでは変数宣言しなくても null が入っているものとして使えます。
ですが、これでは 未定義変数を意図して使っているのか、別の定義済み変数の間違いなのかが判断できません。
例)
$a0 = 5; # $a0が定義される。
$b = $a1 + 5 ;
# $a1が意図的に未定義の変数を使ったものなのか、
# 定義済みの変数($a0とか)の間違いなのか、判断でない
$c += 5 ; #複合代入演算子 += : $c = $c + 5 と同等。
# $c + 5 の$c が意図的に未定義のまま使ったものなのか、
# 別の定義済みの変数の間違いなのか
# ただの代入 $c = 5 ;の意図で書いたのか 判断でない
最近になって、未定義の変数を使おうとすると Warning:Undefined variable という警告が出るようになりました。
修正方法は、何を意図していたか、によって違います。
(1)意図的に未定義変数を使っている
→ それより前に 変数 = 初期値 ;等として「定義済み」にしておく
(2)変数名の間違い
→ 正しいものに直す
(3)(複合代入演算子で)ただの代入の意味で使っている
→「ただの代入」にする
(4) 想定では定義済みのはずなのに、そうなっていない
→ プログラムを見なおす。
(if文等による分岐で未定義のままになるようなものが無いか、等)
あなたのプログラムでは、 (3)があてはまりそうです。
ですが、(4)の可能性(これより前の$nlinkに設定して、その末尾に<div〜を追加することを想定している)もありえます。
度重なるご回答誠にありがとうございます。
勉強不足で、(3)と(4)の両方なのだと思います。
以下に修正したコードです。
function nlink_scode($atts) {
$atts = shortcode_atts([
'url' => '',
'title' => '',
'excerpt' => ''
], $atts, 'nlink');
︙
<省略>
︙
$html = '
<div>
<a href="' . $url . '" class="tmt-blog-card ' . $click_class . '" data-post-id="' . esc_attr($post_id) . '" target="_blank" rel="noopener">
<div class="tmt-blog-card-box">
<div class="tmt-blog-card-thumbnail">' . $img_tag . '</div>
<div class="tmt-blog-card-content">
<div class="tmt-blog-card-title">' . esc_html($title) . '</div>
<div class="tmt-blog-card-excerpt">' . esc_html($excerpt) . '</div>
</div>
</div>
</div>
<div class="clear"></div>
</a>
</div>';
return $html;
}
add_shortcode('nlink', 'nlink_scode');
一応、このコードにてErrorは表示されなくなりました。
以前とは、異なる記載になっていますが合っていますでしょうか?
No.3
- 回答日時:
もう一度言います
「提示された部分だけ見ると、 .= を使う必要は無いように思えます。」
「$nlink .='<div>〜
は
$nlink = $nlink . '<div>〜
と同等の意味になります。」
日本語で言えば「現在の $nlinkの末尾に '<div>〜 を結合して、改めて $nlink に代入する」です。
これより前に $nlink が存在しないのですから、「末尾に結合」する意味があるのですか?
結合する意味が無いなら、素直に「代入」すればいいのでは?
また「将来の変更等でこれより前に$nlinkに何か入っている状態で、その末尾に追加する」という意図で .= を残しておきたいなら、「これより前に$nlinkに何か入っている状態」にする必要があります。
> $nlink = NULL;
> を追加し、
NULLであることに意図が無いのなら「間違い」です。
自動変換で NULLは空文字になりますが、特に意図が無いなら最初から空文字にするべきです。
NULLと空文字の区別がつかないなら、いろいろと不具合の原因になるので、PHPの勉強をがんばりましょう。
ご回答誠にありがとうございます。
おっしゃるように
> .= を使う必要は無いように思えます。
.= を削除したところ以下のようにErrorになってしまいサイト自体が表示されなくなってしまいます。
Parse error: syntax error, unexpected variable "$nlink" in◯◯← .= を削除した行。
>.= を残しておきたいなら、「これより前に$nlinkに何か入っている状態」にする必要があります。
ということは、
if(empty($excerpt)){
$excerpt = esc_html(ltl_get_the_excerpt($id));
}
のように、
nlinkの前に記載すればよいのでしょうか?
↓
if{empty($nlink)){
$nlink = ◯◯◯◯;
}
のように記載すればよいのでしょうか?
未熟で大変申し訳けありませんが、
具体的に、
どのようにnlinkの定義を記載すればよいのかご教授いただけませんでしょうか≦(._.)≧ ペコ。
issetなども調べてみましたが・・・。
何度も、
恐れ入りますが何卒よろしくお願い申し上げます。
これでダメなら諦めます。
No.2
- 回答日時:
だとすると話が違ってきます。
前の回答の後半は一旦忘れてください。
> 変数としましては$nlinkと記載されています。
>
> $excerptの問題ではなく、
> $nlinkの問題なのでしょか?
そうなります。
その視点で見ると$nlinkが最初に出てくるのは
$nlink .='<div>〜
です。
$nlink .='<div>〜
は
$nlink = $nlink . '<div>〜
と同等の意味になります。
=で代入する前に $nlink の内容を参照しようとするので、これより前に定義できてなければ未定義となります。
提示された部分だけ見ると、 .= を使う必要は無いように思えます。
どうしても .= を使うなら、これより前に $nlinkに値を代入しておく飛鳥があります。
ご解答ありがとうございます。
=を省いたところエラーでサイト自体が表示されなくなってしまいました。
なので、
$nlink .='<div>〜
の前に
$nlink = NULL;
を追加し、
$nlink = NULL;
$nlink .='<div>〜
というようにしてみたところ
無事エラー表示されなくなりました。
これであっているのでしょうか?
No.1
- 回答日時:
SVGは関係ありません。
Warning:Undefined variable の後に「 $~ 」と変数名が書いてないですか?
「一つ直すと違う行が同じWarning・・・・」というのも「一言一句同じメッセージ」なのか、「同じ変数で行番号が違う」なのか、 「同じ『Undefined variable 』という警告なだけで行番号や変数は違う」なのかで対処が違います。
//抜粋を取得
if(empty($excerpt)){
if($post->post_excerpt){
$excerpt = get_the_custom_excerpt($post->post_excerpt , 90);
}else{
$excerpt = get_the_custom_excerpt($post->post_content , 90);
}
}
・実際には $excerptは extractで「定義」されていますが、構文的には「$excerpt=''」等と「定義」しているのは empty($excerpt)がtrueのときだけです。
empty($excerpt)がfalseなら、emptyの仕様としては$excerptは定義されているはずですが、PHPにはそんなemptyの仕様がわからず「empty($excerpt)がfalseなら$excerptは定義されない」と判定しているのかもしれません。
お忙しい中、ご解答誠にありがとうございます。
変数としましては$nlinkと記載されています。
$excerptの問題ではなく、
$nlinkの問題なのでしょか?
また、
(1)上記$nlinkが問題だった場合と、
(2)以下のような場合にはどのようにコードを記載すればよいのでしょうか?
>・実際には $excerptは extractで「定義」されていますが、構文的には「$excerpt=''」等と「定義」しているのは empty($excerpt)がtrueのときだけです。
empty($excerpt)がfalseなら、emptyの仕様としては$excerptは定義されているはずですが、PHPにはそんなemptyの仕様がわからず「empty($excerpt)がfalseなら$excerptは定義されない」と判定しているのかもしれません。
↑
このような場合のfalseの場合の定義はどのように記載すればよいのでしょうか?
お忙しい中恐縮ですが、何卒ご教授お願い申し上げます。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
-
C言語 関数、変数の宣言について
C言語・C++・C#
-
SJISで、全角文字Aの文字コードは16進数でいくつですかまた、BBB、tXtの改行コードには、保存
Microsoft ASP
-
DLLファイルの逆コンパイラについて詳しい方
C言語・C++・C#
-
-
4
Cのプログラムからアクセスできないファイル名の一括変更方法
C言語・C++・C#
-
5
C言語のことです。写真(見にくくてすいません)の下のプログラムを実行したいのですが四行目がおかしいと
C言語・C++・C#
-
6
アセンブラーの命令についてです。
その他(プログラミング・Web制作)
-
7
Pythonのエラーメッセージをコピーする方法
その他(プログラミング・Web制作)
-
8
C言語について(初心者)
C言語・C++・C#
-
9
プログラマー達は何故、プログラムを入れるフォルダーに容量制限があるのを知らない?
C言語・C++・C#
-
10
MOVEコマンドでサブフォルダーからの移動は?
その他(プログラミング・Web制作)
-
11
数学、プログラミング、物理、化学など理系の方に質問 プログラミング言語、数式、化学式などで会話をしよ
その他(プログラミング・Web制作)
-
12
C# で 数式文字列処理を処理する方法
C言語・C++・C#
-
13
PHPの勉強してます。 配列のところですが、 実行結果は、9になりますが、 そのロジックを教えてくだ
PHP
-
14
IT業で開発をされてる方々に質問なんですが、一日に書かれるコード数ってどれくらいですか? また、最近
その他(プログラミング・Web制作)
-
15
php でqiitaのサイトにあったファイルのダウンロード関数を使ってダウンロードしているのですが
PHP
-
16
JIT適用PHP8はJavaサーブレットより処理速度は早く、現在の全Webアプリ内で最速でしょうか?
C言語・C++・C#
-
17
VBAの「To」という語句について
Visual Basic(VBA)
-
18
以下のプログラムの実行結果はどうなると思いますか? その理由も教えてください。
Visual Basic(VBA)
-
19
COPYコマンドで、最後に1文字「Hex1A」が付くのはなぜ?外し方は?
その他(プログラミング・Web制作)
-
20
AIがプログラムする時代のプログラマー不要論の相違について
その他(プログラミング・Web制作)
関連するカテゴリからQ&Aを探す
今、見られている記事はコレ!
-
弁護士が解説!あなたの声を行政に届ける「パブリックコメント」制度のすべて
社会に対する意見や不満、疑問。それを発信する場所は、SNSやブログ、そしてニュースサイトのコメント欄など多岐にわたる。教えて!gooでも「ヤフコメ民について」というタイトルのトピックがあり、この投稿の通り、...
-
弁護士が語る「合法と違法を分けるオンラインカジノのシンプルな線引き」
「お金を賭けたら違法です」ーーこう答えたのは富士見坂法律事務所の井上義之弁護士。オンラインカジノが違法となるかどうかの基準は、このように非常にシンプルである。しかし2025年にはいって、違法賭博事件が相次...
-
釣りと密漁の違いは?知らなかったでは済まされない?事前にできることは?
知らなかったでは済まされないのが法律の世界であるが、全てを知ってから何かをするには少々手間がかかるし、最悪始めることすらできずに終わってしまうこともあり得る。教えてgooでも「釣りと密漁の境目はどこです...
-
カスハラとクレームの違いは?カスハラの法的責任は?企業がとるべき対応は?
東京都が、客からの迷惑行為などを称した「カスタマーハラスメント」、いわゆる「カスハラ」の防止を目的とした条例を、全国で初めて成立させた。条例に罰則はなく、2025年4月1日から施行される。 この動きは自治体...
-
なぜ批判コメントをするの?その心理と向き合い方をカウンセラーにきいた!
今や生活に必要不可欠となったインターネット。手軽に情報を得られるだけでなく、ネットを介したコミュニケーションも一般的となった。それと同時に顕在化しているのが、他者に対する辛らつな意見だ。ネットニュース...
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
PHP8でWarning:Undefined varia...
-
VB.NETで DataRow()を利用して...
-
利用者側のMACアドレスを取得し...
-
LAN内接続マシン数及びIP、マシ...
-
javaで週の最初の日(例:月曜日...
-
asp.netでtextboxの値を取得
-
EXCELのリストボックスを選択し...
-
DataGridView 複数選択で行番...
-
エクセルVBAで範囲内での位置取...
-
別フォームのスプレッドの内容...
-
access 和暦をコンボボックスに...
-
LVM_HITTEST
-
ドロップダウンリストの初期表...
-
エクセルVBAで複数選択できるよ...
-
動的SQLのCOUNTのとり方
-
VBAでActiveDirectoryのユーザ...
-
VBからDLL(VC)を呼び出すと戻り...
-
JAVA 入れ子MAPの取得時の書き...
-
VB .netにて現在時刻+1時間後...
-
VBでインストール済みアプリケ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
VB.NETで DataRow()を利用して...
-
PHP8でWarning:Undefined varia...
-
count(*)で取得した値をJAVAの...
-
ListView 項目の選択/選択解除...
-
VBAでActiveDirectoryのユーザ...
-
VBA:小数点以下の数字を取得で...
-
JSP+Servletでのページングの常識
-
データ数をカウントしたいのですが
-
Flexgridで選択行の列の値を取...
-
利用者側のMACアドレスを取得し...
-
getParameter と getAttribut...
-
like演算子内に変数って使えな...
-
JavaScriptにおいてコンピュー...
-
郵便番号検索APIにてget Elemen...
-
DataGridView 複数選択で行番...
-
URIでのページの移動について
-
Spreadの選択行の取得について
-
指定のURLのタイトルを取得...
-
EXCELのリストボックスを選択し...
-
ListViewで複数選択された項目...
おすすめ情報