Notice: Undefined offset: 0 inエラーの発生原因と対処した方法

エラーメッセージ全文

Notice: Undefined offset: 0 in 該当箇所までのファイルパス on line 行数

エラー該当コード

$post_type = get_post_type();
$taxonomies = get_object_taxonomies($post_type);
$terms = get_the_terms(get_the_ID(), $taxonomies[0])  //エラー該当コード

エラーメッセージの意味

このエラーメッセージ “Notice: Undefined offset: 0” は、配列 $taxonomies の最初の要素にアクセスしようとしたときに、その要素が存在しない場合に発生します。これは、$taxonomies 配列が空であるか、少なくとも1つの要素も持っていない場合に起こります。

NoticeエラーなのでPHPプログラムの実行は停止されません。

エラーを解決するには

要素が存在するかを確かめれば良いです。

具体的にif文を追加すればエラーがなくなります。

if(isset($taxonomies[0])) {
    $terms = get_the_terms(get_the_ID(), $taxonomies[0]);
}

関数について説明

get_post_type()

投稿タイプを取得します。

var_dump()の結果

カスタム投稿タイプが「column」の場合

$post_type = get_post_type();
var_dump($post_type);

string(6) "column"

get_object_taxonomies()

特定の投稿タイプやカスタム投稿タイプに関連付けられたタクソノミー(カテゴリーやタグなど)の一覧を取得するために使用されます。この関数を使用すると、特定の投稿タイプに関連付けられているタクソノミーの名前を取得できます。

引数に$post_typeが必要です。

var_dump()の結果

カスタムタクソノミーが「column_category」の場合

$taxonomiesは配列だとわかります。

$post_type = get_post_type();
$taxonomies = get_object_taxonomies($post_type);
var_dump($taxonomies);

array(1) {
  [0]=>
  string(15) "column_category"
}

get_the_terms

カスタム投稿タイプのカテゴリー名やスラッグ名などのタームの情報を取得するために使用されます。

引数には$post_id$taxonomyを指定します。

var_dumpの結果

現在表示しているページの投稿タイプが「column」でコラムカテゴリーが「review」の場合

$post_type = get_post_type();
$taxonomies = get_object_taxonomies($post_type);
$terms = get_the_terms(get_the_ID(), $taxonomies[0]);
var_dump($terms);

array(1) {
  [0]=>
  object(WP_Term)#11422 (11) {
    ["term_id"]=>
    int(441)
    ["name"]=>
    string(12) "レビュー"
    ["slug"]=>
    string(36) "review"
    ["term_group"]=>
    int(0)
    ["term_taxonomy_id"]=>
    int(441)
    ["taxonomy"]=>
    string(15) "column_category"
    ["description"]=>
    string(0) ""
    ["parent"]=>
    int(0)
    ["count"]=>
    int(17)
    ["filter"]=>
    string(3) "raw"
    ["term_order"]=>
    string(1) "5"
  }
}
第2引数を$taxonomies[0]としている理由
$taxonomiesは配列のため、「Notice: Array to string conversion inエラー」が発生します。
PHPで配列を文字列に変換しようとした場合に発生するエラーメッセージです。
インデックス番号[0]をつけることで「文字列」として出力し、エラーを回避できます。

まとめ

Notice: Undefined offset: 0 inのエラーはif文を使って要素が存在するかを確かめることでエラーを消すことができます。

他のPHPエラーの記事

他のPHPエラー

PHPのエラーの種類について解説しています。具体例や解決方法については順次更新していきます。

>お問い合わせはこちら

お問い合わせはこちら