はじめに
以前PHPエラー関連の記事で下記を更新しました。
Notice: Undefined variable: 変数名 inエラーの発生原因と対処した方法について記事にしています。
「Undefined variable 変数名エラー」についてnoticeエラーとして紹介しましたが、クライアント様のご依頼で「PHPのバージョンを7.3.3から8.2.1に変更作業」を行った時はwarningエラーとして「Undefined variable 変数名エラー」が表示されたので両者の違いについても触れながら記事にしていきたいと思います。
Warning: Undefined variableエラーメッセージ全文
Warning: Undefined variable $post in ファイルパス on line 14
Warning: Undefined variableエラー該当コード
下記の14行目「$post->ID」の「$post」の部分で「$post」が定義されていない変数のためエラーが発生しています。
ちなみに下記のソースコードはカスタム投稿タイプ「voice」の最新の3記事を表示するためのソースコードです。
function outputVoiceArchive($atts){
$voice = '';
$args = array(
'post_type' => 'voice',
'posts_per_page' => 3
);
query_posts($args);
if(have_posts()):
$voice = '<div class="voice__list">';
while(have_posts()): the_post();
$voice .= '<div class="voice__item"><a href="'.get_the_permalink().'">';
$voice .= '<figure>';
if(has_post_thumbnail()):
$voice .= '<img src="'.get_the_post_thumbnail_url($post->ID, 'custom_thumbnail').'">';
endif;
$voice .= '</figure>';
$voice .= '<h3>'.get_the_title().'</h3>';
$voice .= '<p>'.get_the_excerpt().'</p>';
$voice .= '</a></div>';
endwhile;
$voice .= '</div>';
endif;
wp_reset_query();
return $voice;
}
add_shortcode('voice', 'outputVoiceArchive');
Warning: Undefined variableエラーを解決する方法
$postを宣言すれば良いです。
global $postを宣言する
エラー該当コードの関数内に「global $post」を追加してください。
$post->idをget_the_IDに変更
そもそもループ内で使用しているので「get_the_ID()」を使用した方が良いです。
またエラー該当コードは非推奨である「query_posts」を使用しているので「WP_Query」を使用したソースコードに変更した方が良いです。「query_posts」が非推奨な理由は下記記事で紹介しています。
query_postsは非推奨である理由とWP_Queryに変更する前後のソースコードを掲載しています。query_postsをWP_Queryに変更するのはソースコードを見てわかるように少しの変更しかないのでquery_postsを見つけ
なので「get_the_ID」と「WP_query」を使用したものに変更したソースコードを下記に示します。
Warning: Undefined variableエラー修正後のコード
function outputVoiceArchive($atts){
$voice = '';
$args = array(
'post_type' => 'voice',
'posts_per_page' => 3
);
$query = new WP_Query($args);
if($query->have_posts()):
$voice = '<div class="voice__list">';
while($query->have_posts()): $query->the_post();
$voice .= '<div class="voice__item"><a href="'.get_the_permalink().'">';
$voice .= '<figure>';
if(has_post_thumbnail()):
$voice .= '<img src="'.get_the_post_thumbnail_url($query->post->ID, 'custom_thumbnail').'">';
endif;
$voice .= '</figure>';
$voice .= '<h3>'.get_the_title().'</h3>';
$voice .= '<p>'.get_the_excerpt().'</p>';
$voice .= '</a></div>';
endwhile;
$voice .= '</div>';
endif;
wp_reset_postdata();
return $voice;
}
add_shortcode('voice', 'outputVoiceArchive');
PHPの「Noticeエラー」と「Warningエラー」の違い
PHPの「Noticeエラー」について
PHPの「Warningエラー」について
まとめ
「Undefined variable: 変数名 inエラー」はnoticeエラーでもwarningエラーでも発生する可能性がある。noticeエラーになるかwarningエラーになるかは、エラーの重要度による。