Kalsarikannint

お問い合わせ

サイト内検索

WordPressのテーマ自作は怖くない【第二回:記事一覧ページを作ろう】

こんにちは。Kalsarikannintのフロントエンド担当・daiです。

前回の更新から時間が空いてしまいましたが、引き続き、WordPressで最小構成でテンプレートを作成する手順を紹介していきます。

第二回の今回は、カテゴリごとやタグごとの記事、検索結果を一覧で表示するページを作成してみようと思います。このブログでいうとこのページに該当します。

前回のおさらい

前回は、「トップページ」と「記事詳細ページ」を表示させるために必要なファイルを作成しました。

wp-content/
    └ themes/
        └ kalsarikannint-theme/
            ├ images/
            ├ style/
            │   ├ archive.css # new
            │   ├ common.css
            │   ├ front-page.css
            │   └ single-post.css
            ├ archive.php     # new
            ├ footer.php
            ├ front-page.php
            ├ functions.php
            ├ header.php
            ├ index.php
            ├ search.php      # new
            ├ single-post.php
            └ style.css

第二回となる今回は、「archive.php」と「style/archive.css」、「search.php」を作成し、function.phpを調整することで、カテゴリ/タグごとの記事一覧ページと検索結果ページを作成します。

それではコーディングしていきましょう

archive.php

カテゴリ・タグごとの一覧ページを司るのが「archive.php」というファイルになります。

WordPressでは、どのカテゴリを表示しているか?なども勝手に取得できるようになっているので、あまり深く考える必要なく実装できます。

▼ archive.php

<?php get_header(); ?>

    <?php if(have_posts()) : ?>
    
    <h1><?php echo get_the_archive_title(); ?></h1>

    <div class="inner">

        <?php while(have_posts()) : the_post(); ?>

        <?php 
            // ------------------------------
            //  各記事ごとの準備
            // ------------------------------

            // 本文の500文字だけ抜粋
            $content = $post->post_content != '' ? str_replace('\\n', '', mb_substr(strip_tags($post-> post_content), 0, 500,'UTF-8')) : '本文が取得できませんでした。';
        ?>

        <div class="article_list">
            <a class="article_list--box" href="<?php the_permalink(); ?>">
                <p class="article_list--title"><?php the_title(); ?></p>
                <span class="article_list--content"><?php echo $content; ?></span>
            </a>
        </div>

        
        <?php endwhile ?>

        <?php 
            // ページネーション
            the_posts_pagination(array(
                'prev_text' => '前へ',
                'next_text' => '次へ'
            ));
        ?>

    </div><!-- /inner -->

    <?php else: ?>

        <div class="error error--no_article">
            <h1>記事が見つかりませんでした</h1>

            <a href="<?php echo get_home_url('/'); ?>" class="button">トップページ へ</a>
        </div>

    <?php endif; ?>

<?php get_footer(); ?>

search.php

検索結果を表示するためのテンプレートです。

WordPress には標準で検索機能が備わっており、?s=キーワード というパラメータをクエリにつけてアクセスすると、検索結果ページが表示されます。検索結果ページのテンプレートとして利用されるのが「search.php」ファイルです。

▼ search.php

<?php get_header(); ?>

    <?php if(have_posts()) : ?>

    <h1>「<?php echo get_search_query(); ?>」の検索結果</h1>
    <div class="inner">

        <?php while(have_posts()) : the_post(); ?>

            <?php
                // 本文を抜粋して表示(必要に応じて長さを変えてください)
                $content = $post->post_content != ''
                    ? str_replace('\\n', '', mb_substr(strip_tags($post->post_content), 0, 300, 'UTF-8'))
                    : '本文が取得できませんでした。';
            ?>

            <div class="search_list">
                <a class="search_list--box" href="<?php the_permalink(); ?>">
                    <p class="search_list--title"><?php the_title(); ?></p>
                    <span class="search_list--content"><?php echo $content; ?></span>
                </a>
            </div>

        <?php endwhile; ?>

        <?php
            // ページネーション(検索結果でも使えます)
            the_posts_pagination(array(
                'prev_text' => '前へ',
                'next_text' => '次へ',
            ));
        ?>

    </div><!-- /inner -->

    <?php else: ?>

        <div class="error error--no_article">
            <h1>「<?php echo get_search_query(); ?>」の検索結果はありませんでした</h1>
        </div>

    <?php endif; ?>

<?php get_footer(); ?>

このように、記事があれば検索キーワードに合わせた一覧を表示し、なければ見つからなかった旨を表示する流れです。

参考ドキュメント


CSS(style/archive.css)の調整

今回、記事一覧をデザインするために「style/archive.css」というファイルを作成すると想定しています。

archive.phpsearch.php で使用するクラスに合わせて、最低限のデザインをあてていきましょう。たとえば、以下のようにクラスを割り当てた場合の例です。

▼ style/archive.css

.inner {
    width: 90%;
    max-width: 800px;
    margin: 0 auto;
    padding: 0 10px;
}

.article_list,
.search_list {
    border: 1px solid #ccc;
    margin-bottom: 20px;
    padding: 15px;
    border-radius: 4px;
    background: #f9f9f9;
}

.article_list--box,
.search_list--box {
    text-decoration: none;
    color: #333;
}

.article_list--title,
.search_list--title {
    font-size: 1.4rem;
    font-weight: bold;
    margin-bottom: 10px;
}

.article_list--content,
.search_list--content {
    display: block;
    font-size: 1rem;
    color: #555;
}

.article_list.-new,
.search_list.-new {
    border-color: #f00;
    background: #fff3f3;
}

archive.phpsearch.php で同じクラス名を使ってもいいですし、ファイルごとに分けたい場合はクラス名も分けて管理してください。上の例のように共通化してしまえば、1つのCSSで両方のデザインをまかなうこともできます。

CSS の読み込み

functions.php」または「header.php」などで archive.css を読み込むようにしてください。例として、functions.php でテーマ独自のCSSとして読み込む場合は下記のように記述できます。(詳しくはテーマのスタイルシートを読み込む | WordPress Codex を参照)

function kalsari_theme_enqueue_styles() {
    // すでに style.css を読み込んでいる想定
    wp_enqueue_style('archive-style', get_template_directory_uri().'/style/archive.css', array(), '1.0.0');
}
add_action('wp_enqueue_scripts', 'kalsari_theme_enqueue_styles');


他ファイルの確認

前回同様、「header.php」や「footer.php」などのレイアウトファイルが正しく読み込まれているかも併せてチェックしましょう。

特に、WordPress では「検索フォーム」を表示するための get_search_form() という関数が用意されていますので、ヘッダーやサイドバーなどに以下のように検索フォームを挿入しておくと良いでしょう。

<?php get_search_form(); ?>

searchform.php を独自に作成すると、自由に検索フォームのマークアップを変更できます。searchform.php | WordPress Developer Resources


まとめ

以上で「カテゴリ/タグごとの記事一覧ページ (archive.php)」と「検索結果ページ (search.php)」を作成する流れと、ファイル変更(functions.phpstyle/archive.css など)の例を紹介しました。

  • archive.php カテゴリ・タグなどの一覧表示に利用されるファイル。 get_the_archive_title() を使ってアーカイブタイトルを出し、WordPressが用意するループ機能(have_posts() など)を回すだけで、指定したタクソノミー(カテゴリー、タグなど)の投稿一覧を表示できます。
  • search.php 検索結果一覧を表示するためのファイル。 get_search_query() で検索キーワードを取得して表示し、あとはループを回せば OK。ページネーションも使えるので、サイト全体の検索結果を簡単に作成できます。
  • functions.php テーマ独自の関数や設定をまとめるファイル。 今回は例として is_newest_post() 関数を追加し、投稿が最新かどうかを判定する仕組みを入れました。
  • style/archive.css archive.php / search.php 用に最低限のデザインを当てる想定のファイル。

これで、WordPress で「トップページ」「記事詳細ページ」「カテゴリ・タグ一覧ページ」「検索結果ページ」がひととおり揃いました。サイトとしても最低限の流れが完成したと思います。

次回は、めんどくさい事はしたくない精神で行き着いた開発環境について紹介していければと思います。(いつになるかはわかりません!)


ここまでお読みいただきありがとうございました。今回の記事が、WordPress テーマの最小構成を作るうえでの参考になれば幸いです。

ご不明な点や質問などございましたら、お気軽にコメントやお問い合わせをいただければと思います!

Author dai

地方に住みながら、フルリモート情シスおじさんしてます。
フロントエンド開発とkintoneアプリのカスタマイズやプラグイン開発が得意分野です。
好きなビールは一番搾り。

実務で身についたAIとコーディングするコツ

こんにちは。Kalsarikannintのフロントエンド担当・daiです。 仕事を楽にするために、プログラムによる自動化・効率化を日々実践しているのですが、最近ではもっぱらAIを使ったコーディングが中心になっています。想像以上に実用的で、正直なところ「もう戻れないかも」と感じているくらいです。 以前は、ブログ記事を書くときのAIの使い方をまとめましたが、今回は僕が本業で培った経験をお伝えできればと思います。 https://kalsari.net/tool/128 本記事では、AIツールを使った実際のコーディング経験から得た知見や、効果的な活用方法について共有します。「AIでプログラミングができるらしいけど、実際どうなの?」と気になっている方の参考になれば幸いです。 使っているAIツール 現在、メインで使用しているのはChatGPTです。特に理由があるわけではなく、最初に触れたのがこれだったからという、わりと適当な理由だったりします。 GitHub CopilotやCursorなどの有料ツールも試してみたんですが、現時点では自分の用途にお
develop

【Parsec】Mac→WindowsでIME切り替えを快適にする方法

こんにちは。Kalsarikannintのフロントエンド担当・daiです。 MacからParsecを使ってWindowsにリモートアクセスして作業する機会が増えてきたのですが、地味にストレスだったのが日本語入力の切り替えなんですよね。 Macには「全角/半角」キーが存在しないので、リモート先のWindowsでIMEのON/OFFを一発で切り替えることができません。ドキュメント作成やコーディングなど、日本語と英語を頻繁に切り替える作業では、この小さな不便が積み重なって大きなストレスになっていました。 そこで今回は、Karabiner-ElementsとGoogle日本語入力を組み合わせて、Mac側の「英数」「かな」キーでリモート先WindowsのIMEを快適に操作できるようにする方法を紹介します。同じ悩みを抱えている方の参考になれば幸いです。 解決方針の全体像 今回の設定は、以下の流れでキー入力を変換していきます: Mac: 英数/かなキー → Karabiner-Elementsで変換 → F15/F16キー ↓ Parse
tool

AIでブログ執筆を効率化してみた ― 30分で“読まれる記事”を作るまでの流れ

こんにちは。Kalsarikannintのフロントエンド担当・daiです。 今日は「AIを使って記事執筆をどう効率化しているか」という話を書いてみようと思います。 「AIで記事を量産する!」というよりは、あくまでAIを“書く力を補助してくれる相棒”として使う感じです。 いろいろ試してみた中で、今のところしっくりきているやり方を紹介します。 事前準備:AIに“自分の文体”を覚えさせる まず最初にやっておくことが、AIに自分の文体を学習させておくことです。これは一度やっておけば、以降の執筆で毎回使い回せます。 やり方はシンプルで、過去に自分が書いた記事を3本ほどAIに渡して、こんな感じで聞くだけです👇 次の3つは私が執筆したブログ記事です。私の文章のクセ、文体などの特徴をまとめてください。 --- # タイトル ## 見出し 本文 (◯◯の画像) ## 見出し 本文 (◯◯のコード) --- # タイトル 本文... --- AIが分析してくれた「文体の特徴」をメモして保存しておきます。これが、後半の“清書フェーズ”で重要になっ
tool