サポート » 使い方全般 » get_postsで0件の時 「Undefined offset: 0 」 が出る

  • 解決済 K-moya

    (@k-moya)


    single postの下部に同一カテゴリーの記事一覧を出そうと思っています。

    下記のコードで記事がある場合/無い場合共に動作するのですが、無い場合、
    Notice: Undefined offset: 0 in query.php on line 3750
    が出てしまいます。

    どうすればエラーを回避できるのでしょうか。
    ご教示下さい。

    $args=array('exclude' => $post->ID ,'category' => $category_id);
    var_dump($args);
    
    $posts = get_posts( $args );
    var_dump($posts);
    
    if (! $posts){
     echo "○○カテゴリーの記事はまだ1件もありません。";
    }

    ↓結果

    array(2) { [“exclude”]=> int(43) [“category”]=> int(8) }
    array(0) { }
    ○○カテゴリーの記事はまだ1件もありません。

    Notice: Undefined offset: 0 in query.php on line 3750

    PHP 5.4.34

5件の返信を表示中 - 1 - 5件目 (全5件中)
  • モデレーター Okamoto Hidetaka

    (@hideokamoto)

    query.phpの3750行目は「$posts = get_posts( $args );」になりますでしょうか?

    ここで空の値を渡してエラーを出しているのではないかと思います。

    スレッド開始 K-moya

    (@k-moya)

    hideokamotoさま

    説明が分かりにくくてすみません。

    下記のコードを実行し、結果が0件の場合のみ、表題のNoticeが出ます。
    (1件以上の場合はNoticeが出ません&0件の場合でもNoticeは出るものの動作はしています)

    $args=array('exclude' => $post->ID ,'category' => $category_id);
    $posts = get_posts( $args );
    
    if (! $posts){
     echo "○○カテゴリーの記事はまだ1件もありません。";
    } else {
    postを表示する処理
    }

    query.phpの該当の場所はこんなかんじです。
    $this->post_countは0(-1 ?)な気がするのですが、3750に行ってしまうのですね。なんでだろ…

    query.php

    /**
    	 * Rewind the posts and reset post index.
    	 *
    	 * @since 1.5.0
    	 * @access public
    	 */
    3747	public function rewind_posts() {
    3748		$this->current_post = -1;
    3749		if ( $this->post_count > 0 ) {
    3750			$this->post = $this->posts[0];
    3751		}
    3752	}

    postを表示する処理というのは、どのようになっているのでしょうか?
    おそらく、不正なrewind_postsや、have_posts(内部的にrewind_postsを呼んでいる)の呼び出しがあったものと思われます。

    モデレーター Okamoto Hidetaka

    (@hideokamoto)

    $args=array(‘exclude’ => $post->ID ,’category’ => 14);
    var_dump($args);

    $posts = get_posts( $args );
    var_dump($posts);

    if (! $posts){
    echo “○○カテゴリーの記事はまだ1件もありません。”;
    }

    Twenty Elevenなどのsingle.phpに上記のphpを追記したところ、
    エラーは発生していませんでした。

    $argsのcategoryを定数にしているコードで動作していましたので、
    一度「var_dump($category_id);」で
    $category_idに期待している値が入っているかを確認して頂けますでしょうか?

    スレッド開始 K-moya

    (@k-moya)

    hideokamotoさま、Toro_Unitさま。

    $postsと言う変数名が原因でした。変数名を変更し正常に動作しました。

    今回は、single.phpで下記のように別テンプレートを呼び出しており、該当の関連記事はこれで呼び出されるcontent-single.phpを書き換えていたのですが、

    single.php

    <?php while ( have_posts() ) : the_post(); ?>
    	<?php get_template_part( 'content', 'single' ); ?>
    	<?php post_nav(); ?>
    	<?php
    		if ( comments_open() || get_comments_number() ) :
    			comments_template();
    		endif;
    	?>
    <?php endwhile; ?>

    content-single.phpでの該当コードで、下記のように$postsと言う変数名を使ってしまっていたため、

    content-single.php
    $posts = get_posts( $args );

    single.phpに戻ったときに、そちらでも使っている変数名$postsの中身が書き換わってしまいエラーとなっていました。

    これを期に面倒で入れていなかったxdebugを入れ、原因が分かりました。

    色々見てた頂いたhideokamotoさま、Toro_Unitさま、本当にありがとうございました!

5件の返信を表示中 - 1 - 5件目 (全5件中)
  • トピック「get_postsで0件の時 「Undefined offset: 0 」 が出る」には新たに返信することはできません。