「カテゴリー」タグアーカイブ

WordPressで1ページ内に全記事タイトル一覧を表示する方法

 WordPressで全記事一覧を表示する方法は出ていたが、1ページ内に表示するやり方を書いたサイトを見つけられなかったので、自作してみました。いくつも参考にしたサイトはありますが、こちらのカテゴリごとの記事一覧をWP_Queryで表示する【WordPress】というページが一番役に立ちました。

 カテゴリー順は当初、文字コード順となってましたが、それではあんまりなので、投稿数順にひとまずしておきました。本当はカテゴリー順を決められるといいんですけど、WordPressでは標準機能でカテゴリー順を設定するやり方がないみたいなんで。

 こんな感じになりました。「カテゴリー別全記事一覧」(もう少し工夫の余地はありそうですが……)。

 具体的なやり方としては、以下の流れになります。

  1. 子テーマ用のフォルダを作成
  2. 子テーマ用のstyle.cssとfunctions.phpを作成し、上で作ったフォルダにftpで転送
  3. 子テーマを有効化
  4. 全記事一覧用のphpを子テーマ用のフォルダにftpで転送
  5. WordPress管理画面で固定ページ・新規作成を開く
  6. 「カテゴリー別全記事一覧」など適当なタイトルをつける
  7. テンプレートで「titles_by_category」を選び、公開ボタンを押す

 子テーマや固定ページでのテンプレートの使い方は各自、ググるなどして調べてみてください。

 ”titles_by_category.php”をそのまま使いたい方は以下にzip圧縮したものを置いておきました。

titles_by_category.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();