Amazonで商品を見る セール会場へ

WordPress自作テーマ制作⑤│投稿ページ・固定ページの作成

自作クラシックテーマに、パンくずと投稿・固定ページの本文テンプレートを追加します。

パンくずはカテゴリーがない投稿にも対応し、URLと表示文字列をそれぞれエスケープします。

旧breadcrumb関数を導入済みなら、その関数と呼び出しを一緒に置き換え、二重に登録しないでください。

自作テーマ制作の第5弾!

今回は投稿ページと固定ページを作成します。

具体的にはパンくず、タイトル・更新日・公開日・アイキャッチ画像・本文を追加しています。

目次

著者

WEB制作をしているデジタルノマド
WordPressのカスタマイズが好きで、色々と自作しています。

WordPressのカスタマイズに困ったらご相談ください!

パンくずの作成

まずはヘッダーにパンくずを作成します。

functions.php

functions.phpに以下のコードを追記します。

以下の記事を参考にしたパンくずを、このページの適用範囲に合わせて整理しています。

function waza_theme_breadcrumb() {
    if (is_front_page()) return;
    $items = [[home_url('/'), 'トップ']];
    if (is_singular()) {
        $id = get_queried_object_id();
        if (is_page()) {
            foreach (array_reverse(get_post_ancestors($id)) as $parent) $items[] = [get_permalink($parent), get_the_title($parent)];
        } elseif (is_single() && get_post_type($id) === 'post') {
            $terms = get_the_category($id);
            if ($terms) {
                $term = $terms[0];
                $ids = array_reverse(get_ancestors($term->term_id, 'category', 'taxonomy'));
                $ids[] = $term->term_id;
                foreach ($ids as $tid) {
                    $t = get_term($tid, 'category'); $url = get_term_link($tid, 'category');
                    if ($t && !is_wp_error($t) && !is_wp_error($url)) $items[] = [$url, $t->name];
                }
            }
        }
        $label = get_the_title($id);
    } elseif (is_category()) {
        $term = get_queried_object();
        foreach (array_reverse(get_ancestors($term->term_id, 'category', 'taxonomy')) as $tid) {
            $t = get_term($tid, 'category'); $url = get_term_link($tid, 'category');
            if ($t && !is_wp_error($t) && !is_wp_error($url)) $items[] = [$url, $t->name];
        }
        $label = single_cat_title('', false);
    } elseif (is_search()) {
        $label = '検索: ' . get_search_query(false);
    } elseif (is_404()) {
        $label = 'ページが見つかりません';
    } elseif (is_home()) {
        $label = '投稿一覧';
    } else {
        $label = wp_strip_all_tags(get_the_archive_title());
    }
    echo '<nav aria-label="パンくず"><ol class="breadcrumb">';
    foreach ($items as [$url, $text]) echo '<li><a href="' . esc_url($url) . '">' . esc_html($text) . '</a></li>';
    echo '<li aria-current="page">' . esc_html($label) . '</li></ol></nav>';
}

header.phpにコードを挿入

header.phpのbodyの中に以下のコードを挿入。

<?php waza_theme_breadcrumb(); ?>

表示の確認

記事ページを開くとパンくずが表示されているのを確認できます。

記事ページを開いた際にパンくずリストが表示されていることを確認する画面。

パンくずの構造化データ

構造化データはあとでまとめて挿入します。

スポンサーリンク

投稿ページの作成

タイトル・更新日・公開日・アイキャッチ画像・本文の表示といった

投稿ページに必要な要素を作成していきます。

自作テーマにsingle.phpを作成して、下記のコードを挿入します。

<?php get_header(); ?>
<div class="wrap">
    <main id="main-content">
        <?php
        if (have_posts()) :
            while (have_posts()) : the_post();
        ?>
                <h1 class="title"><?php the_title(); ?></h1>
                <div class="date">
                    <div>Release date. <?php the_time('Y/m/d'); ?></div>
                    <div>Last update. <?php the_modified_date('Y/m/d'); ?></div>
                </div>
                <?php
                if (has_post_thumbnail()) {
                    echo '<figure class="thumbnail">' . get_the_post_thumbnail() . '</figure>';
                }
                ?>
                <div class="content">
                    <?php
                    the_content();
                    wp_link_pages();
                    ?>
                </div>
        <?php
            endwhile;
        endif;
        ?>
    </main>
</div>
<?php get_footer(); ?>

タイトルを作成

the_title();の関数を使って表示。

<h1 class="title"><?php the_title(); ?></h1>

公開日・更新日の作成

the_time('Y/m/d'); とthe_modified_date('Y/m/d');の関数を使って表示。

<div class="date">
    <div>Release date. <?php the_time('Y/m/d'); ?></div>
    <div>Last update. <?php the_modified_date('Y/m/d'); ?></div>
</div>

アイキャッチ画像の作成

functions.phpに下記を記載。

add_theme_support('post-thumbnails');

あとはsingle.phpに下記のコードを挿入。

get_the_post_thumbnail();の関数を使って表示。

if (has_post_thumbnail()) {
    echo '<figure class="thumbnail">' . get_the_post_thumbnail() . '</figure>';
}

本文の作成

the_content();の関数を使って表示。

 <?php the_content(); ?>

Articleの構造化データ

構造化データはあとでまとめて挿入します。

投稿記事の確認

WordPressに最初から投稿されている「Hello world!」の記事を開いて確認します。

アイキャッチ画像も設定して表示を確認します。

1200×630pxは作例の寸法で、このテンプレートの必須条件ではありません。

実際の表示幅や縦横比に合わせて用意してください。

アイキャッチ画像を設定した上で確認する、投稿記事「Hello world!」の表示例。

固定ページの作成

single.phpをコピーして、page.phpを作成します。

変更箇所は投稿記事の公開日と更新日の記述部分を削除しただけのものになります。

<?php get_header(); ?>
<div class="wrap">
    <main id="main-content">
        <?php
        if (have_posts()) :
            while (have_posts()) : the_post();
        ?>
                <h1 class="title"><?php the_title(); ?></h1>
                <?php
                if (has_post_thumbnail()) {
                    echo '<figure class="thumbnail">' . get_the_post_thumbnail() . '</figure>';
                }
                ?>
                <div class="content">
                    <?php
                    the_content();
                    wp_link_pages();
                    ?>
                </div>
        <?php
            endwhile;
        endif;
        ?>
    </main>
</div>
<?php get_footer(); ?>

固定記事に抜粋文を表示

固定ページの編集画面で抜粋を入力できるようにします。

このコードは抜粋欄を有効にするだけで、meta descriptionタグを自動出力するものではありません。

本文中のheader.phpにはdescriptionの出力処理を置いていないため、必要な場合は利用するテーマやSEOプラグイン側で出力を設定してください。

// 固定記事に抜粋文を表示
add_post_type_support('page', 'excerpt');

最後にWordPressの最初から用意されているSample Pageを開いて状態を確認してみます。

固定記事のカスタマイズ後に状態を確認するために開いた「Sample Page」の表示例。
スポンサーリンク

まとめ

今回は投稿ページと固定ページを作成してみました。

あらかじめ用意されている関数が多いので、それを使うだけですね。

GitHubの過去の例は今回の修正と同期していません。

現行コードは本文を参照してください。

過去のコードは、GitHubのMOTOKI-LLC/WAZA-codeにもまとめています。

投稿と固定ページの分割番号を操作する

投稿と親子関係のある固定ページに、ページ区切りを含む検証本文を保存しました。

投稿ではPCで、固定ページではスマホ幅390pxで、2のリンクをEnterで開くと2ページ目の本文へ切り替わりました。

固定ページのパンくずには親ページと現在のページも表示されます。

本文が切り替わることは、番号が見えるだけでは判断できません。

1ページ目と2ページ目に異なる文章を置き、リンク先で文章が変わるか確かめてください。

固定ページではパンくずの親ページリンクも、実際の親子関係と照合します。

下の画面は掲載のpage.phpを使った実WordPressです。

ロゴやサイドバーは前段階のファイルと組み合わせています。

前の記事の修正版footer.phpを使い、同じウィジェットを二重に追記しないでください。

抜粋欄を有効にする処理と、検索エンジン向けのdescriptionを出力する処理は別です。

今回は投稿と固定ページの本文保存・再読み込み・公開表示と分割番号の操作を確認しました。

全デザインの完成を確認した結果ではありません。

戻す場合は変更前のsingle.php・page.php・functions.php・header.phpを復元します。

新規作成したテンプレートは取り除き、パンくず関数とheader.phpの呼び出しを一緒に元へ戻してください。

階層固定ページの2ページ目と親ページのパンくずを表示した実画面
2026年10月2日、隔離WordPressで撮影した実画面です。

編集画面で保存して分割本文と親ページを確認する

検証用の投稿と固定ページにページ区切りのある本文を用意し、それぞれの編集画面で区切り前後の文章を変更して保存します。

今回の検証ではコードエディターで既存のページ区切りを残したまま本文を変更し、更新完了の通知を確認しました。

確認したのはコードエディターでの本文変更・保存・再読み込みと公開画面の分割番号・親ページリンクです。

ビジュアルエディターで見出しや段落を入力して保存する操作は未確認です。

編集画面を再読み込みし、変更後の文章が残っていることを確かめます。

公開画面の1ページ目で変更後の文章を確認し、分割番号「2」にフォーカスしてEnterキーを押します。

リンク先で本文が2ページ目の文章に切り替わることを確認します。

URLはパーマリンク設定により、page=2というクエリや末尾の/2/などになります。

URLにpageという文字がないことだけで失敗と判断しないでください。

親ページが設定された固定ページでは、パンくずの親ページ名にフォーカスしてEnterキーを押し、親ページの本文が表示されるか確認します。

ブラウザーで子ページへ戻り、分割番号から引き続き移動できることも確かめます。

今回の検証では投稿と固定ページの保存・再読み込み・分割番号の操作、および固定ページから親ページへの移動を確認しました。

コードの適用前にsingle.php・page.php・functions.php・header.phpの原本を保存します。

既存テーマのファイルは比較して置き換え、解説用の部分コードを完成例へ重ねて追加しないでください。

保存後の固定ページで2ページ目の本文と親ページへのリンクを表示した検証画面
2026年10月2日撮影。WordPress 7.1.2の独立した検証環境で確認。

貼付先・対象・戻し方

関数は自作テーマのfunctions.phpのPHP領域へ、呼び出しはheader.phpのbody内で本文の前へ配置します。

投稿は最初に取得したカテゴリーの親階層、固定ページは親ページの階層を表示します。

複数カテゴリーの優先順位指定、カスタム分類の階層、構造化データには対応していません。

トップページでは表示しません。

カテゴリー未設定の投稿、親のある固定ページ、カテゴリー一覧、検索、404で確認します。

パンくずはnavと順序付きリストで、現在の項目はリンクにせずaria-currentを付けています。

スマホで折り返せるCSSと、Tab・Enterのリンク操作を確認してください。

問題があればfunctions.phpとheader.phpを一緒に変更前へ戻します。

single.phpとpage.phpでは、ループ内のthe_content()直後にwp_link_pages()を置きます。

本文の「ページ区切り」で分割した場合に、続きへ進む番号リンクを表示するためです。

分割していない本文では出力されません。

2ページの投稿と固定ページで、番号リンクから続きが表示されることを確認してください。

戻す場合は追加したwp_link_pages()だけを削除しますが、分割した本文への導線もなくなります。

  • URLをコピーしました!

制作をご依頼いただく場合

WordPressのホームページ制作

サイトの目的と更新方法に合わせて、構成・デザイン・WordPressの構築をご相談いただけます。対応範囲、制作実績、最新の費用・制作期間はサービスページをご確認ください。

WAZAの有料記事のサブスクリプションも開始しました。

サービス

Service

WordPressサイトのカスタマイズのサービスに関心がありましたら、ぜひ詳細をご覧ください。

目次