投稿とカテゴリーアーカイブに、同じカテゴリーの最新記事リストを設置する

WordPressにはデフォルトで「最近の投稿」ウィジェットが用意されていますが、これはすべてカテゴリーの記事が表示対象になっています。
投稿ページでは投稿の属するカテゴリーの最新記事を、カテゴリーアーカイブではそのカテゴリーの最新記事を、それぞれ取得し表示する方法を紹介します。

設置する場所は、single.phpとarchive.phpで共通して読み込むサイドバー「sidebar.php」内の任意の場所を想定しています。別の場所に設置する場合は、適宜記述を修正・変更してください。

設置する最新記事リストのイメージ

こんな感じのリストを自動で出力したい。

<ul>
	<!-- 最新記事のリンクを10件表示 -->
	<li><a href="記事15のURL">記事15</a></li>
	<li><a href="記事14のURL">記事14</a></li>
	<li><a href="記事13のURL">記事13</a></li>
	・・・
	<li><a href="記事7のURL">記事7</a></li>
	<li><a href="記事6のURL">記事6</a></li>

	<!-- カテゴリーアーカイブページへのリンクを表示 -->
	<li><a href="カテゴリーアーカイブページのURL">一覧を表示</a></li>
</ul>

最新記事リストの作成方法

とりあえずコード。コメ特盛で。

<?php if(is_single() || is_archive())://個別投稿ページまたはアーカイブページなら表示 ?>
<ul>
	<?php
		if(is_single()) {//個別投稿ページなら
			$cats = get_the_category();//投稿のカテゴリー情報を取得
			$cat = $cats[0];//最初のカテゴリー情報だけ$catに入れる
			$category_id = $cat -> cat_ID;//カテゴリーIDを取得
		} else {//その他(=アーカイブページ)なら
			$category_name = single_cat_title('', false);//カテゴリー名を取得
			$category_id = get_cat_ID($category_name);//カテゴリー名からカテゴリーIDを取得
		}
		$args = array(
			'category__and' => array($category_id),//表示する記事のカテゴリーをIDで指定
			'posts_per_page' => 10//表示する件数を指定
		);
		$myposts = get_posts($args);
		foreach($myposts as $post):
	?>
	<li><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></li>
	<?php endforeach; ?>
	<li><a href="<?php echo esc_url(get_category_link($category_id)); ?>">一覧を表示</a></li>
</ul>
<?php endif; ?>

これでOK。
でも、IDの取得はもっとスマートな方法がありそうな気がする、、