【WordPress】投稿一覧をタクソノミーごとに表示する方法

プログラミング

目標物

投稿物の一覧を、自動でタクソノミーごとに題名付きで表示するものを作成します。
イメージ↓

北海道
 AAAAA
 BBBBB
青森
 CCCCC
 DDDDD

あまり、コードエディタをいじりたくないような、既存テーマの場合でも使えます。

補足:こちらの記事では、ページャーに対応できておりませんが、その2では、ページャーにも対応しております。【WordPress】投稿一覧をタクソノミーごとに表示する方法(その2)

考え方

通常の投稿ページ(archive.php)を使った場合、順番の並び替えを行うことはできますが、次のタクソノミーのかたまりに移ったときに題名を表示するということはできません。おそらく、頑張っても以下のようになります。イメージ↓

北海道 
 AAAAA
北海道
 BBBBB
青森
 CCCCC
青森
 DDDDD

そこで、今回はメインループを使用せず、サブループを使用します。

function.phpに、使い回したいパーツとなる部分を記述し、それを固定ページに引っ張ってきてforで回します。

プラグイン

個別ページでphpを使えるようにするため、以下のプラグインをインストールして有効化します。

Insert PHP Code Snippet

すると、サイドバーにXYZ PHP Codeが追加されるので、PHPCode Snippetsを選択します。

Add New PHP Code Snippetを押します。

Tracking Nameはわかり易い名前にし、PHP codeにコードを書いていきます。出来上がったら、Createを押します。

すると、先程の画面の一覧にショートコードが表示されるので、それを固定ページに貼り付けます。

[xyz-ips snippet=”code-name”]

作成するコードスニペット

<?php
        if (function_exists('prefecturesLoop')) {
            for ($i = 1; $i <= 47; $i++) {
                prefecturesLoop($i);
            }
        } 
?>

今回は、47都道府県のタクソノミーを表示するので、47までにしています。

function.php

引数で送られてきた$slugに対応した都道府県を$prefectureに代入しています。
(この部分、もっとキレイに書く方法があれば、教えていただきたいです)

function prefecturesLoop($slug)
{
    switch ($slug) {
        case '1':
            $prefecture = "北海道";
            break;
        case '2':
            $prefecture = "青森県";
            break;

         ~省略~

        case '47':
            $prefecture = "沖縄県";
            break;
        default:
            $prefecture = "";
            break;
    }
    $list_args = array(
        'post_type'      => 'hoge',
        'tax_query' => array(
            array(
                'taxonomy' => 'prefectures',
                'field' => 'slug',
                'terms' => array($slug),
            )
        ),
        'posts_per_page' => -1,
    );

    $list_query = new WP_Query($list_args);

    if ($list_query->have_posts()) :
        echo '<h2>' . $prefecture . '</h2>';
        while ($list_query->have_posts()) : $list_query->the_post();
            echo '<div>
                <div>
                    <h5>
                    <a href=' . get_the_permalink() . '>' . get_the_title() . '</a>
                    </h5>
                    <p>' . get_the_content() . '</p>
                    <a
                        href=' . get_the_permalink() . '
                        >記事を読む</a
                    >
                </div>
              </div>';
        endwhile;
    endif;
    wp_reset_postdata();
}

懸念点

こちらのやりかた、ページネーションを作成していないため、1ページですべて表示されることになります。

記事が少なければよいのですが、多い場合には適しません。

【WordPress】投稿一覧をタクソノミーごとに表示する方法(その2)
こちらでページネーションに対応したコードを記載しております。

コメント

タイトルとURLをコピーしました