query.phpの3750行目は「$posts = get_posts( $args );」になりますでしょうか?
ここで空の値を渡してエラーを出しているのではないかと思います。
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を呼んでいる)の呼び出しがあったものと思われます。
$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に期待している値が入っているかを確認して頂けますでしょうか?
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さま、本当にありがとうございました!