WordPressで全記事一覧を表示する方法は出ていたが、1ページ内に表示するやり方を書いたサイトを見つけられなかったので、自作してみました。いくつも参考にしたサイトはありますが、こちらのカテゴリごとの記事一覧をWP_Queryで表示する【WordPress】というページが一番役に立ちました。
カテゴリー順は当初、文字コード順となってましたが、それではあんまりなので、投稿数順にひとまずしておきました。本当はカテゴリー順を決められるといいんですけど、WordPressでは標準機能でカテゴリー順を設定するやり方がないみたいなんで。
こんな感じになりました。「カテゴリー別全記事一覧」(もう少し工夫の余地はありそうですが……)。
具体的なやり方としては、以下の流れになります。
- 子テーマ用のフォルダを作成
- 子テーマ用のstyle.cssとfunctions.phpを作成し、上で作ったフォルダにftpで転送
- 子テーマを有効化
- 全記事一覧用のphpを子テーマ用のフォルダにftpで転送
- WordPress管理画面で固定ページ・新規作成を開く
- 「カテゴリー別全記事一覧」など適当なタイトルをつける
- テンプレートで「titles_by_category」を選び、公開ボタンを押す
子テーマや固定ページでのテンプレートの使い方は各自、ググるなどして調べてみてください。
”titles_by_category.php”をそのまま使いたい方は以下にzip圧縮したものを置いておきました。
中身を以下に掲載しておきます。
<?php /** * Template Name: titles_by_category * * The template for displaying all post titles by category in a page * arranged from page.php by Yoshiro Miyagoshi * * @package WordPress * @subpackage Twenty_Fourteen */ get_header(); ?> <div id="main-content" class="main-content"> <div id="primary" class="content-area"> <div id="content" class="site-content" role="main"> <header class="entry-header"><h1 class="entry-title">カテゴリー別全記事一覧</h1></header> <hr /> <div class="entry-content"> <?php // $categories = get_categories(); $catargs = array( //投稿数の多い順 'orderby' => 'count', 'order' => 'desc' ); $categories = get_categories($catargs); foreach( $categories as $category ): $str = ' <h2><a href='; $str .= get_category_link( $category->term_id ) .'>'. $category->cat_name; $str .= '</a></h2>'; $str .= ' <ul>'; $args = array( 'cat' => $category->cat_ID, 'posts_per_page' => -1 ); $query = new WP_Query( $args ); if ( $query ->have_posts() ) : while ( $query ->have_posts() ) : $query ->the_post(); $title = get_the_title(); $str .= ' <li><a href="'. get_permalink() .'">'. $title .'</a></li>'; endwhile; endif; wp_reset_query(); $strFinal .= $str . ' </ul>'; endforeach; echo $strFinal; ?> </div><!-- #entry-content --> </div><!-- #content --> </div><!-- #primary --> <?php get_sidebar( 'content' ); ?> </div><!-- #main-content --> <?php get_sidebar(); get_footer();