AdSense WordPress カスタマイズ カスタマイズ スマホ セキュリティ 伝えたいこと 備忘録

プロモーションを含みます

Warning: Undefined array key 1 in on line 509エラー修正方法

目次に行く・戻る

メルカリ招待コード:

所要時間目安: 6

This session is using  IPv4  is established in

今日は2025年10月27日です。

WordPressでPHPのバージョンによって関数の定義などの厳密化が進んでいます。上記のWarning: Undefined array key 1 in・・・・。というエラーもその中のひとつです。かなり以前の記事になりますが、以下にAdSense広告を任意の位置に表示させる方法などとしてコードを公開しました。今回のWarning: Undefined array key 1 in /home/・・・・・・・・・・・・/functions.php on line 509は、そのコードをカスタマイズしたものとしてずっとfunction.php内に記載していたことが原因でした。

この記事を読む方へのオススメ

上記カスタマイズ方法として、AdSense広告をPC・スマホ・タブレットと分岐してそれぞれのH2タグの前にAdSense広告コードやアフィリエイトコードや忍者adなど自動的に表示されるようにしたコードです。

以下に当時の全てのコードを記載しておきますが、各々にて必要のないところは削除しても問題ないです。

/*最初と最後のh2見出しタグの直前にアドセンスなどの広告を表示(PCとスマホやタブレット端末の切り替え)ここから*/
 function add_ad_before_h2_for_2times($the_content) {
 //スマホとタブレット端末で一番はじめのh2見出しタグ直前に表示させる広告コード
 $ad1 = <<< EOF
 (ここに広告コードを記述)
 EOF;
 //スマホとタブレット端末で一番最後のh2見出しタグに直前に表示させる広告コード
 $ad2 = <<< EOF
 (ここに広告コードを記述)
 EOF;
 //PCで一番はじめのh2見出しタグ直前に表示させる広告コード
 $ad3 = <<< EOF
 (ここに広告コードを記述)
 EOF;
 //PCで一番最後のh2見出しタグ直前に表示させる広告コード
 $ad4 = <<< EOF
 (ここに広告コードを記述)
 EOF;
 if ( is_single() ) {//投稿ページ
 $h2 = '/^<h2.*?>.+?</h2>$/im';//h2見出しのパターン
 if ( preg_match_all( $h2, $the_content, $h2s )) {//h2見出しが本文中にあるかどうか
 if ( $h2s
[0]
 ) {//一応チェック
 if (is_mobile()){//スマホとタブレット端末表示
 if ( $h2s
[0]

[0]
 ) {//1番目のh2見出し直前にad1を挿入
 $the_content = str_replace($h2s
[0]

[0]
, $ad1.$h2s
[0]

[0]
, $the_content);
 }
 if ( $h2s
[0]

[1]
 ) {////h2が2個以上なら最後のh2見出し直前にad2を挿入
 $the_content = str_replace($h2s
[0]

[count($h2s[0]
) - 1], $ad2.$h2s
[0]

[count($h2s[0]
) - 1], $the_content);
 }
 } else {//PC表示
 if ( $h2s
[0]

[0]
 ) {//1番目のh2見出し直前にad3を挿入
 $the_content = str_replace($h2s
[0]

[0]
, $ad3.$h2s
[0]

[0]
, $the_content);
 }
 if ( $h2s
[0]

[1]
 ) {////h2が2個以上なら最後のh2見出し手前にad4を挿入
 $the_content = str_replace($h2s
[0]

[count($h2s[0]
) - 1], $ad4.$h2s
[0]

[count($h2s[0]
) - 1], $the_content);
 }
 }
 }
 }
 }
 return $the_content;
 }
 add_filter('the_content','add_ad_before_h2_for_2times');
 /*最初と最後のh2見出しタグの直前にアドセンスなどの広告を表示(PCとスマホやタブレット端末の切り替え)ここまで*/

上記コードをカスタマイズして、以下のようにしてAdSense広告コードやアフィリエイトコードなど何も使用していない状態でした。

/*アドセンススマホh2一番下の上とPCh2一番下の上に自動表示ここから*/
//最初と最後のh2見出し手前にアドセンスを表示(PC・スマホ切り替え)
function add_ad_before_h2_for_2times($the_content) {


//スマホで2番目に表示させるアドセンス
$ad2 = <<< EOF

<!--ここにスマホ用のAdSense広告コードがあった-->

EOF;

//PCで2番目に表示させるアドセンス
$ad4 = <<< EOF

<!--ここにAdSense広告コード-->

EOF;
  if ( is_single() ) {//投稿ページ
    $h2 = '/^<h2.*?>.+?<\/h2>$/im';//H2見出しのパターン
    if ( preg_match_all( $h2, $the_content, $h2s )) {//H2見出しが本文中にあるかどうか
      if ( $h2s[0] ) {//チェックは不要と思うけど一応
        if (st_is_mobile()){//スマホ表示
          if ( $h2s[0][1] ) {////H2が2個以上なら最後のH2見出し手前にad2を挿入
            $the_content  = str_replace($h2s[0][count($h2s[0]) - 1], $ad2.$h2s[0][count($h2s[0]) - 1], $the_content);
          }
        } else {//PC表示
          
         if ( $h2s[0][1] ) {////H2が2個以上なら最後のH2見出し手前にad4を挿入
            $the_content  = str_replace($h2s[0][count($h2s[0]) - 1], $ad4.$h2s[0][count($h2s[0]) - 1], $the_content);
          }
        }
      }
    }
  }
  return $the_content;
}
add_filter('the_content','add_ad_before_h2_for_2times');
/*アドセンススマホH2一番下の上とPCh2一番下の上に自動表示ここまで*/

上記コードの「if ( $h2s[0][1] ) {////H2が2個以上なら最後のH2見出し手前にad4を挿入」で特定の記事にてWarning: Undefined array key 1 in ・・・・・・・・・/functions.php on line 509」とひょうじされるのは、理由としては以下が原因内容です。

Warning: Undefined array key 1 というエラーは、配列 $h2s[0]インデックス 1 が存在しない(つまり H2 見出しが 2 個以上ない)場合に出ています。
現在のコードでは存在確認をせずに $h2s[0][1] をそのまま使っているので、1 個しか H2 がない記事でエラーになります。

当たり前といえば当たり前なのですが、またPHP8以降は厳正化されてきたのも要因です。(それまではある程度曖昧でもエラーは出ませんでした。

なので、上記部分を安全な方法にて修正します。

安全な修正方法、isset() を使って配列のキーが存在するかチェックしてから処理するのが安全です。

部分的な修正コードとしては以下のようになります。

if ( isset($h2s[0][1]) ) { // H2が2個以上あれば
    if (st_is_mobile()){ // スマホ表示
        $the_content  = str_replace(
            $h2s[0][count($h2s[0]) - 1],
            $ad2.$h2s[0][count($h2s[0]) - 1],
            $the_content
        );
    } else { // PC表示
        $the_content  = str_replace(
            $h2s[0][count($h2s[0]) - 1],
            $ad4.$h2s[0][count($h2s[0]) - 1],
            $the_content
        );
    }
}

ポイントとしては、以下の3点になっています。

  • isset($h2s[0][1]) は 配列のインデックスが存在するかどうかを確認します
  • これで H2 が 1 個しかない場合は処理がスキップされ、警告は出ません。
  • 元のコードの構造は変えずに安全化できます。

さらに安全なコードとしては以下コードですね。

if ( count($h2s[0]) > 1 ) {
    // ここにスマホ・PC共通の挿入処理
}

上記を踏まえて全体の修正したコードは以下のようになります。H2が2個以上ある場合のみ挿入 するよう安全化したバージョンです。

/* アドセンススマホH2一番下の上とPCh2一番下の上に自動表示ここから */
// 最初と最後のh2見出し手前にアドセンスを表示(PC・スマホ切り替え)
function add_ad_before_h2_for_2times($the_content) {

    // スマホで2番目に表示させるアドセンス
    $ad2 = <<< EOF
<!-- ここにスマホ用のAdSense広告コード -->
EOF;

    // PCで2番目に表示させるアドセンス
    $ad4 = <<< EOF
<!-- ここにPC用のAdSense広告コード -->
EOF;

    if ( is_single() ) { // 投稿ページ
        $h2_pattern = '/^<h2.*?>.+?<\/h2>$/im'; // H2見出しのパターン
        if ( preg_match_all( $h2_pattern, $the_content, $h2s ) ) { // H2見出しが本文中にあるかどうか
            if ( isset($h2s[0]) && count($h2s[0]) > 1 ) { // H2が2個以上ある場合のみ
                if ( st_is_mobile() ) { // スマホ表示
                    $the_content = str_replace(
                        $h2s[0][count($h2s[0]) - 1],
                        $ad2 . $h2s[0][count($h2s[0]) - 1],
                        $the_content
                    );
                } else { // PC表示
                    $the_content = str_replace(
                        $h2s[0][count($h2s[0]) - 1],
                        $ad4 . $h2s[0][count($h2s[0]) - 1],
                        $the_content
                    );
                }
            }
        }
    }

    return $the_content;
}
add_filter('the_content', 'add_ad_before_h2_for_2times');
/* アドセンススマホH2一番下の上とPCh2一番下の上に自動表示ここまで */

黄色い部分のisset()関数になっています。

修正ポイントとしては以下のようになります。

  • if ( isset($h2s[0][1]) ) を if ( isset($h2s[0]) && count($h2s[0]) > 1 ) に変更
    → H2が2個以上ある場合のみ広告挿入。
  • スマホ・PC判定内の処理は同じまま。
  • $h2s[0] が空の場合や H2が1個しかない記事でも 警告が出なくなる。

最後の部分の警告が出なくなるということが重要です。今後の安定運用の為にもisset()関数は覚えておくとよいですね。

以下のサイトが非常にわかりやすくまとめてくれてありました。ありがとうございます。

あなたにおすすめ


Multiplex 広告

入学入社まであと…入学入社祝いはどんなPresent(プレゼント)でどのように過ごされますか?

ホワイトデープレゼントは以下などの豊富なキャンペーン商品から選ぶと良いと思います。

ブログサービスが始まってから:


カウントダウンタイマー

おすすめの記事一部広告

Total21


アドセンス336pxPC閲覧記事下表示1つ目コード

目次に戻る

よろしかったらシェアよろしくお願いします。

-AdSense, WordPress, カスタマイズ, カスタマイズ, スマホ, セキュリティ, 伝えたいこと, 備忘録

目次に戻る

目次に戻る


コメントを表示(0)

コメントを書く

メールアドレスが公開されることはありません。 が付いている欄は必須項目です


このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください

新着コメント