未投稿の場合はエラーが出ないようにするには下コードをどのように変更すればよろしいでしょうか?(未投稿の場合は空白状態で構いません)全く別のコードになっても構いませんので教えて下さい。
<?php
$term = array_shift(get_the_terms($post->ID, 'タクソノミー名'));
?>
<?php $tax_posts = get_posts('post_type=ポストタイプ名&taxonomy=タクソノミー名&term='.esc_html($term->slug)); if($tax_posts): ?>
<ul>
<?php foreach($tax_posts as $tax_post): ?>
<?php if ($post->ID != $tax_post->ID): ?>
<li><a href="<?php echo get_permalink($tax_post->ID); ?>"><?php echo esc_html($tax_post->post_title); ?></a></li>
<?php else: ?>
<li><?php echo esc_html($tax_post->post_title); ?></li>
<?php endif; ?>
<?php endforeach; ?>
</ul>
<?php endif; ?>
以上です。
よろしくお願いいたします。
前回の質問(http://q.hatena.ne.jp/1382148601)の返信コメントでの追加質問に関する問題でしょうか?(※コメント通知が届かなかった為、確認が遅くなりました。)
親ターム(カテゴリー)「sf」とは違って、「japan」ターム(カテゴリー)あるいは「usa」タームなど子タームのアーカイブページにアクセスした場合は、同一タームの記事一覧のみ表示されればいいのですね?
同一タームのみ表示されればいいのでしたら、デフォルトのクエリーで表示されますので、「query_posts()」でクエリーを変更したり、「get_posts()」で新規にループを作成する必要はありません。
「Twenty Twelve」や「Twenty Thirteen」などデフォルトのテーマの「archive.php」や「category.php」を参考にしてみてください。
<?php if ( have_posts() ) : ?><!-- この記述以降が記事がある場合の処理ですが、「get_posts()」で作成したループの場合は、質問文のコードのように返り値を代入した変数で判別します。 --> <ul> <?php while ( have_posts() ) : the_post(); ?> <li><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></li> <?php endwhile; ?> </ul> <?php else : ?> <!-- ここに記事がない場合の処理 --> <?php endif; ?>
※質問文のコードでは、記事がない場合にも「$term = array_shift(get_the_terms($post->ID, 'タクソノミー名'));」の行で記事IDを利用して処理が実行されるのでエラーになっているのではないかと思います。
丁寧な解説、いつもありがとうございます!
2013/10/23 17:07:39おっしゃる通り前回の質問の追記に関する質問でした。
おかげさまで無事希望通り表示させることができました。より可読性の高い方法まで教えていただき本当に感謝しております。
またご教授頂くこともあるかと思いますが、何卒よろしくお願いいたします。
本当にありがとうございます!!
すいません。
2013/11/05 15:12:24子タームへの投稿がない時にエラーにならなくなったのですが、同一子タームに投稿すると、新しい投稿が上書きされてしまい、子ターム一覧ページに最新の投稿のみが表示されてしまいます。一覧表示させるのは上記コードをどう変更すればよいでしょうか?
ちなみに一番最初の質問時に回答していただいたコードでは、同一ページ内にそれぞれのターム毎の一覧が表示されています。