楽天セール開催中!ポイント最大11倍! セール会場へ

WordPress自作テーマ制作⑧│見た目(style.css)の作成

まとめのPHP例をシリーズの修正版に合わせました。

未設定ロゴの画像参照、検索語の直接GET参照、未定義のメニューフィルター、パンくずの未エスケープ出力を置き換えています。

見た目のCSSは学習用で、全テンプレート・全画面幅を検証した完成テーマではありません。

WordPressの自作テーマ第8弾!

基本的なテンプレートが揃ってきたので、今回はようやくCSSを書いて見た目を整えます。

厳密の言うと、最低限のベース(自前のスターターテーマ)の見た目を整えていきます。

目次

著者

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

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

CSSの命名規則

CSSの命名規則は色々、流派があると思います。

今回は最小限のコードかつ上書きしやすいという条件のルールにしました。

classを基本にし、idの用途を限定する

基本はclassで装飾し、上書きしやすくします。

ただし、この掲載コードのサイト名はheader.phpのidに合わせて#site-titleを使っています。

idを一切使わない例ではありません。

同じオリジン・重要度・カスケードレイヤーの宣言を比べる場合、IDセレクターはclassセレクターより詳細度が高くなります。

ただし、CSSの優先順位は詳細度だけで決まるわけではありません。

効かない指定を調べるときは、開発者ツールで実際に適用された宣言も確認します。

この作例ではclassを基本にしつつ、サイト名の#site-titleは既存のHTMLに合わせて残します。

リセットCSSを使わない

すべてのブラウザのCSSを統一するリセットCSS

この作例ではリセットCSSを追加せず、必要な要素を個別に整えます。

サイズや読み込み時間は計測していないため、リセットCSS全般が重いという判断はしていません。

ブロック用CSSの範囲を確認する

この作例のCSSは、記事一覧・本文・サイト名などの基本要素を対象にしています。

掲載のfunctions.phpにはWordPress標準CSSをすべて停止する処理はありません。

カラムやボタンなど、使用するブロックの装飾は導入先で別に確認します。

標準のブロック用CSSを別途停止する場合は、そのブロックに必要な装飾も自作する必要があります。

この例を置くだけで、全ブロックの見た目が揃うわけではありません。

CSSの挿入

CSSで最低限の見た目を整えます。

今回はモバイルファーストのサイト(最大幅600px)を想定して、見た目を整えました。

PCとスマホで共通のCSSを使いますが、利用できる幅が違うため、折り返しや余白まで同じになるとは限りません。

編集画面の見た目だけで判断せず、公開画面を両方の幅で確認します。

style.cssの読み込み

header.phpにはwp_head()を残します。

以下は直接のlinkタグが不要であることを示すコメントで、CSSを読み込む実処理は次のfunctions.phpの例です。

以前の、アクセスごとに現在時刻を付ける説明は使いません。

次の例ではstyle.cssの更新日時をバージョンにし、ファイルの変更時に参照URLを更新します。

header.phpへのlinkタグ直書きとfunctions.phpの読み込みを併用せず、functions.phpから一度だけ読み込みます。

<?php // style.cssは下記のwp_enqueue_scriptsから読み込みます。linkタグの直書きは不要です。 ?>

style.cssの読み込み

functions.phpのPHP領域に次の処理を置きます。

末尾の完成版functions.phpには同じ処理を含めているので、両方を追記しないでください。

下記のコードをfunctions.phpに挿入します。

ファイルを変更しても古い見た目が残る場合は、ページのソースでstyle.cssの参照先とverの値を確認します。

本文の保存状態と、CSSの取得状態を分けて調べてください。

参照先が正しいのに古いCSSが返る場合は、利用中のブラウザーやキャッシュプラグインの該当キャッシュを確認します。

WP Rocketなどの影響を、この例だけで断定することはできません。

add_action('wp_enqueue_scripts', function () {
    $file = get_stylesheet_directory() . '/style.css';
    $version = is_file($file) ? (string) filemtime($file) : wp_get_theme()->get('Version');
    wp_enqueue_style('waza-theme', get_stylesheet_uri(), [], $version);
});

style.cssに追記

既存のstyle.cssを保存してから、下記のCSSを設置します。

先頭のテーマ情報コメントがすでにある場合は、その内容を照合して編集し、同じ情報を重ねて追記しないでください。

このCSSだけでは、カラムや文字位置などすべてのブロックの装飾を網羅していません。

実際に使うブロックを本文へ保存し、公開画面で確認してから必要なCSSを追加します。

掲載CSSはリストのマーカーやリンクの下線も変更するため、本文中の箇条書きとリンクが見分けられるか確認します。

テーマ情報のTested up toなどは旧作例の記載であり、この記事の後半に記録した検証環境とは分けて扱ってください。

/*
    Theme Name: SUIMIN
    Theme URI: https://suimin-theme.com/
    Author: MOTOKI LLC.
    Author URI: https://motoki-design.co.jp/wordpress/
    Description: A classic theme for learning.
    Tags: blog, block-styles
    Version: 1.0.0
    Requires at least: 5.6
    Tested up to: 5.6
    Requires PHP: 7.3.0
    License: GNU General Public License v2 or later
    License URI: http://www.gnu.org/licenses/gpl-2.0.html
    Text Domain: suimin
    Domain Path: /languages
*/

/*---------------------------------

  共通パーツ

---------------------------------*/
/* ベース */
body{
	font-family:"Yu Gothic Medium", "游ゴシック Medium", YuGothic, "游ゴシック体", "ヒラギノ角ゴ Pro W3", "メイリオ", sans-serif;
    background-color: #EFEFEF;
    max-width: 600px;
    padding-left: 1em;
    padding-right: 1em;
    margin: 0 auto;
}
/* リスト */
ol, ul {
    list-style: none;
  	padding: 0;
}
/* 画像 */
figure {
    margin: 0;
}
img {
    border-style: none;
    height: auto;
    max-width: 100%;
}
/* リンク選択 */
a {
    color: #000;
    text-decoration: none;
}
a:hover {
    text-decoration: underline;
}
/* ウィジェット */
.is-layout-flex{
    display: flex;
    justify-content: center;
}
.wp-block-column {
    flex: 1;
    padding: 0 1em;
}
/* メニュー */
.global-menu-list,
.footer-menu-list {
    display: flex;
    justify-content: center;
}
.global-menu-list li{
    padding: 0 16px;
}
.global-menu-list li a,
.footer-menu-list li a {
    font-size: 14px;
}
/* 検索ボタン */
label.wp-block-search__label {
    display: none;
}
.wp-block-search__button {
    margin-left: 0.5em;
}
/*---------------------------------

  ヘッダー

---------------------------------*/
/* ヘッダー */
#site-title{
    text-align: center;
}
/*キャッチフレーズ*/
.catchphrase {
    font-size: 14px;
    font-weight: normal;
    position: relative;
    bottom: 8px;
}
/* パンくず */
.breadcrumb {
    display: flex;
    font-size: 14px;
}
.breadcrumb li {
    align-items: center;
    display: inline-flex;
    position: relative;
}
.breadcrumb li:not(:last-child):after {
    background-color: currentColor;
    clip-path: polygon(45% 9%,75% 51%,45% 90%,30% 90%,60% 50%,30% 10%);
    content: "";
    height: 10px;
    margin: 0 8px;
    width: 10px;
}
/*---------------------------------

  コンテンツ

---------------------------------*/
/* ベース */
.main-content {
    background: #fff;
    padding: 1.5em;
    border-radius: 4px; 
}
.wrap {
    margin: 0 auto 2em;
}
/*タイトル*/
h1 {
    margin: 0;
}
.title {
    margin: 1em 0 0 0;
}
/* アイキャッチ */
.eyecatch {
    margin: 2em 0;
}
/* 日づけ */
.date {
    font-size: 13px;
}
/* 公開日 */
.time {
    display: none;
}
/*---------------------------------

  フッター

---------------------------------*/
/* ベース */
.footer-container {
    padding-bottom: 1em;
    padding-top: 1em;
}
/* フッターメニュー */
.footer-menu-list li{
    padding: 0 16px
}
.footer-menu-list li a {
    font-size: 14px;
}
/* コピーライト */
.copyright{
    text-align: center;
    font-size: 12px;
}

確認

このような見た目になりました。

アイキャッチ画像もサイトの幅にあったサイズに変更しています。

style.cssの作成によりアイキャッチ画像がサイトの幅に合ったサイズに変更された、ここまでの見た目の確認結果。

ここまでのコードまとめ

以下はシリーズの各ファイルを組み合わせる例です。

既存テーマへ一括追記せず、同名の関数やCSS読込処理、テンプレートの呼び出しを比較して置き換えます。

header.php
<!doctype html>
<html <?php language_attributes(); ?>>
<head>
<meta charset="<?php bloginfo('charset'); ?>">
<meta name="viewport" content="width=device-width, initial-scale=1">
<?php wp_head(); ?>
</head>
<body <?php body_class(); ?>>
<?php wp_body_open(); ?>
<div id="site-title">
<?php
$logo = get_custom_logo();
if ($logo === '') {
    $logo = '<a href="' . esc_url(home_url('/')) . '" rel="home">' . esc_html(get_bloginfo('name')) . '</a>';
}
// 最新投稿をトップに表示する場合だけサイト名をh1にする。
$tag = (is_front_page() && is_home()) ? 'h1' : 'div';
echo '<' . $tag . ' class="site-branding">' . $logo . '</' . $tag . '>';
?>
<p class="catchphrase"><?php echo esc_html(get_bloginfo('description')); ?></p>
</div>
<?php wp_nav_menu(['theme_location' => 'global_menu', 'fallback_cb' => false]); ?>
<?php waza_theme_breadcrumb(); ?>
footer.php
<?php get_sidebar(); ?>

<!-- サイドバーはsidebar.phpで一度だけ出力します。 -->
<footer id="footer">
    <div class="footer-container">
        <?php if (is_active_sidebar('footer')) : ?>
            <div id="footer_widget">
                <?php dynamic_sidebar('footer'); ?>
            </div>
        <?php endif; ?>
        <ul class="footer-menu-list">
            <?php
            wp_nav_menu([
                'container'       => '',
                'theme_location'  => 'footer_menu',
                'items_wrap'      => '%3$s',
                'link_before'     => '<span >',
                'link_after'      => '</span>',
            ]);
            ?>
        </ul>
        <div class="copyright">
            ©2023 <?php bloginfo('name'); ?>
        </div>
    </div>
</footer>
<?php wp_footer(); ?>
</body>

</html>
single.php
<?php get_header(); ?>
<div class="wrap">
    <main id="main-content" class="main-content">
        <?php
        if (have_posts()) :
            while (have_posts()) : the_post();
        ?>
                <h1 class="title"><?php the_title(); ?></h1>
                <div class="date">
                    <div class="time"><?php the_time('Y/m/d'); ?></div>
                    <div class="modify"><?php the_modified_date('Y/m/d'); ?>
                    </div>
                </div>
                <?php
                if (has_post_thumbnail()) {
                    echo '<figure class="eyecatch">' . get_the_post_thumbnail() . '</figure>';
                }
                ?>
                <div class="content">
                    <?php
                    the_content();
                    wp_link_pages();
                    ?>
                </div>
        <?php
            endwhile;
        endif;
        ?>
    </main>
</div>
<?php get_footer(); ?>
page.php
<?php get_header(); ?>
<div class="wrap">
    <main id="main-content" class="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(); ?>
archive.php
<?php get_header(); ?>
<main id="main-content" class="main-content">
<?php the_archive_title('<h1 class="title">', '</h1>'); ?>
<?php if (have_posts()) : ?>
<?php while (have_posts()) : the_post(); ?>
<article>
<h2 class="title"><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></h2>
<?php if (has_post_thumbnail()) : ?><figure class="thumbnail"><?php the_post_thumbnail(); ?></figure><?php endif; ?>
<div class="excerpt"><?php the_excerpt(); ?></div>
</article>
<?php endwhile; ?>
<?php the_posts_pagination(['prev_text'=>'前へ', 'next_text'=>'次へ']); ?>
<?php else : ?><p>表示できる記事がありません。</p><?php endif; ?>
</main>
<?php get_footer(); ?>
home.php
<?php get_header(); ?>
<div class="wrap">
    <main id="main-content" class="main-content">
        <?php
        if (have_posts()) :
            while (have_posts()) : the_post();
        ?>
                <a href="<?php the_permalink(); ?>">
                    <h2 class="title"><?php the_title(); ?></h2>
                    <div class="date">
                        <div class="modify"><?php the_time('Y/m/d'); ?></div>
                    </div>
                    <?php
                    if (has_post_thumbnail()) {
                        echo '<figure class="thumbnail">' . get_the_post_thumbnail() . '</figure>';
                    }
                    ?>
                </a>
        <?php
            endwhile;
            $pagination = get_the_posts_pagination(array(
                'prev_text' => 'Prev',
                'next_text' => 'Next'
            ));
            echo $pagination;
        endif;
        ?>
    </main>
</div>
<?php get_footer(); ?>
404.php
<?php get_header(); ?>
<main id="main_content" class="main-content">
    <h1 class="title">ページが見つかりませんでした。</h1>
    <div class="content">
        <p>お探しのページは移動または削除された可能性があります。</p>
        <p>以下より キーワード を入力して検索してみてください。</p>
        <?php get_search_form(); ?>
    </div>
</main>
<?php get_footer(); ?>
searchform.php
<form role="search" method="get" class="searchForm" action="<?php echo esc_url(home_url('/')); ?>">
<label>検索キーワード
<input type="search" name="s" value="<?php echo esc_attr(get_search_query(false)); ?>" placeholder="キーワードを入力">
</label>
<button type="submit">検索</button>
</form>
search.php
<?php get_header(); ?>
<main id="main-content" class="main-content">
<h1 class="title"><?php echo esc_html(get_search_query(false)); ?> の検索結果</h1>
<?php get_search_form(); ?>
<?php if (preg_match('/[^\s\p{Z}]/u', get_search_query(false)) !== 1) : ?>
<p>検索キーワードを入力してください。</p>
<?php else : ?>
<?php if (have_posts()) : ?>
<?php while (have_posts()) : the_post(); ?>
<article>
<h2 class="title"><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></h2>
<?php if (has_post_thumbnail()) : ?><figure class="thumbnail"><?php the_post_thumbnail(); ?></figure><?php endif; ?>
<div class="excerpt"><?php the_excerpt(); ?></div>
</article>
<?php endwhile; ?>
<?php the_posts_pagination(['prev_text'=>'前へ', 'next_text'=>'次へ']); ?>
<?php else : ?><p>表示できる記事がありません。</p><?php endif; ?>
<?php endif; ?>
</main>
<?php get_footer(); ?>
functions.php
<?php

// 外観のメニュー表示
add_theme_support('menus');

// 外観のウィジェット表示
add_theme_support('widgets');

// カスタムロゴの表示
add_theme_support('custom-logo');

// タイトルタグの表示
add_theme_support('title-tag');

// アイキャッチの表示
add_theme_support('post-thumbnails');

// WordPressのバージョン情報
remove_action('wp_head', 'wp_generator');

// 絵文字
add_filter('emoji_svg_url', '__return_false');
remove_action('wp_head', 'print_emoji_detection_script', 7);
remove_action('admin_print_scripts', 'print_emoji_detection_script');
remove_action('wp_print_styles', 'print_emoji_styles');
remove_action('admin_print_styles', 'print_emoji_styles');

// Windows Live Writeの停止
remove_action('wp_head', 'wlwmanifest_link');

// EditURI(RSD Link)の停止
remove_action('wp_head', 'rsd_link');

// 記号の自動変換停止(wptexturize無効化)
add_filter('run_wptexturize', '__return_false');

// https://api.w.org/の停止
remove_action('wp_head', 'rest_output_link_wp_head');

// メニュー位置の設定
function setup_nav_menu() {
    register_nav_menu('global_menu', 'グローバルメニュー');
    register_nav_menu('footer_menu', 'フッターメニュー');
}
add_action('after_setup_theme', 'setup_nav_menu');

// ウィジェットエリアの登録
function register_area() {
    register_sidebar([
        'name' => 'サイドバー',
        'id' => 'sidebar',
        'description' => 'サイドバーに表示されます。',
        'before_widget' => '<div id="%1$s" class="%2$s">',
        'after_widget' => '</div>',
    ]);
    register_sidebar([
        'name' => 'フッター',
        'id' => 'footer',
        'description' => 'フッターに表示されます。',
        'before_widget' => '<div id="%1$s" class="%2$s">',
        'after_widget' => '</div>',
    ]);
}
add_action('widgets_init', 'register_area');


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>';
}

add_action('wp_enqueue_scripts', function () {
    $file = get_stylesheet_directory() . '/style.css';
    $version = is_file($file) ? (string) filemtime($file) : wp_get_theme()->get('Version');
    wp_enqueue_style('waza-theme', get_stylesheet_uri(), [], $version);
});

まとめ

正直、見た目にこだわるといつまでたっても自作テーマが終わらないと避けていたのですが…

スマホの機能を作るにあたって、そろそろ見た目を整えないといけなかったので、ここでCSSを入れました。

見た目を整えると、この機能はいらないとか(サイドバーとか検索)この機能が欲しい(スマホの固定グローバルメニュー)

とかいろいろアイディアがでてくるので、ちょっとずつ実装していこうと思います。

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

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

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

完成テーマの検索とページ送りを確かめる

完成コードを実テーマとして読み込み、一覧・投稿本文・固定ページ本文のページ送りをEnterで確認しました。

一覧の2ページ目には別の記事が出て、本文の2ページ目には分割した続きが表示されます。

PC幅1280pxとスマホ幅390pxで、横方向のはみ出しがないことも確認しました。

footer.phpのサイドバー直接出力を外し、同じウィジェットが2回出る状態を修正しました。

CSSはheader.phpのidに合わせて#site-titleへ変更し、ロゴ未設定時のサイト名を消す指定も外しました。

ロゴがないスマホ表示ではサイト名が16pxで中央に表示されます。

存在しない投稿を開くとHTTP 404の案内と検索フォームが表示されました。

検索語を入力し、Tabで検索ボタンへ移ってEnterで送信すると検索結果へ移動します。

結果の2をEnterで開いても検索語を保持し、別の記事を表示できました。

変更前のstyle.cssとfooter.phpを保存し、完成コードを同じ検証用テーマ内で組み合わせてください。

今回は管理画面での有効化と、保存済み本文の表示をブラウザーのPC幅1280px・スマホ幅390pxで確認しました。

すべての端末での表示を確認した結果ではありません。

問題が出た場合は保存した2ファイルを戻します。

CSSを読み込んだ完成テーマの分割本文と一度だけ表示したサイドバー
2026年10月2日、隔離WordPressで撮影した実画面です。

完成テーマを有効にして保存した本文を表示する

シリーズで作成したファイルを同じ検証用テーマのフォルダーへ揃え、「外観 → テーマ」で有効化します。

使用中のテーマ名が変わったことを確認してから、⑤で保存した投稿の公開画面を開きます。

1ページ目と2ページ目の文章を比べ、保存した本文がページ区切りに従って表示されることを確認します。

本文が表示されても装飾が変わらない場合は、ページのソースにそのテーマのstyle.cssへの参照があるかを確認します。

ファイルを直した直後に旧表示が残る場合は、本文の保存状態とCSSの参照先を分けて確認し、利用中のキャッシュの影響を切り分けます。

今回の検証では管理画面での有効化後、完成テーマのstyle.cssが参照され、保存済み投稿の2ページ目がPC幅1280pxとスマホ幅390pxで表示されました。

前節の検索とページ送りの結果も参照し、導入先では使う画面ごとにリンクと表示を確かめます。

サイドバーにウィジェットを置いていない状態では、ウィジェット用の表示が空でも配置済みとは判断しません。

戻す場合は控えておいた元のテーマを有効化し、書き換えたstyle.cssとfooter.phpも原本へ戻します。

完成テーマを有効化し、保存済み投稿の2ページ目を表示した検証画面
2026年10月2日撮影。WordPress 7.1.2の独立した検証環境で確認。

タグと日付一覧へ完成コードを適用する

完成コードのファイル名はarchive.phpです。

まとめの見出しに残っていたachive.phpは訂正しました。

名前を誤るとWordPressはそのファイルをアーカイブ用に選ばず、別のテンプレートへ進みます。

公式のテンプレート階層も照合してください。

2026年10月3日、掲載CSSの本文と同じCSSを使う独立したWordPress 7.1.2で、タグの2ページ目、空のタグ、月別一覧を確認しました。

PC幅1280pxで月別一覧のmainは幅600px、横方向のはみ出しはありませんでした。

空のタグでも白いmain内に見出しと案内文が出ます。

一覧の条件ごとの結果は制作⑥のアーカイブ確認にまとめています。

CSSの反映を見る際はmain内の記事と、別のサイドバーやフッターのリンクを分けて確認します。

今回はこの3画面のPC表示を追加確認したもので、すべてのブロックや画面幅の完成検証ではありません。

変更前のarchive.phpとstyle.cssを保存し、見出し・抜粋・番号リンクを同じ一覧で照合します。

問題があれば変更したファイルを保存済みの原本へ戻します。

掲載CSSを適用した自作テーマの月別一覧
2026年10月3日、独立したWordPress 7.1.2の自作クラシックテーマで撮影。2025年2月の2記事をmain内に表示しています。

CSSの読み込みとシリーズの適用順

style.cssはfunctions.phpのwp_enqueue_scriptsから一度だけ読み込みます。

以前のlinkタグ直書きや日付を毎回付ける方式は外します。

更新日時をバージョンに使うため、変更のないアクセスごとにURLを変えません。

まとめのfunctions.phpは追記用ではなく、重複関数を比較して置き換える例です。

検索の対象はWordPressの標準に戻しています。

投稿だけへの限定が必要なら検索回のメインクエリ限定フックを追加してください。

header.phpとパンくず関数は対で更新します。

PC・スマホ、ロゴなし、長いサイト名、検索なし、記事一覧の複数ページで確認し、問題があれば各ファイルを同じバックアップ時点へ戻します。

関連手順:WordPress自作テーマ制作④│トップページ作成

完成版のsingle.php・page.phpも、本文のページ区切りに対応するためthe_content()直後でwp_link_pages()を呼び出します。

home.phpでは一覧のページ送りに含まれる読み上げ用見出しを削除せず、get_the_posts_pagination()の出力を保持します。

旧コードを使っている場合はこの3ファイルを変更前に保存し、本文が分割された投稿・固定ページと2ページ以上の投稿一覧で確認してください。

問題があれば保存したファイルへ戻します。

全角スペースだけの検索入力も空欄として扱う

制作⑦で修正した空欄判定を、この完成コードのsearch.phpにも反映しました。

半角・全角のスペースだけを入力した場合は「検索キーワードを入力してください。」を表示します。

trim()だけの判定では全角スペースが残るため、Unicodeの空白を含めて調べる正規表現へ揃えています。

変更前のsearch.phpを保存し、上の完成コードで同じファイルを置き換えてください。

空欄、全角スペースだけ、実際の記事名を順に検索し、入力案内と通常の検索結果が切り替わることを確かめます。

問題があれば保存したsearch.phpへ戻します。

2026年10月4日、WordPress 7.1.2の独立した検証環境で、この記事のfunctions.php・header.php・footer.phpと各テンプレートを組み合わせて確認しました。

全角スペースだけの入力は修正前に案内が出ず、修正後は案内が出て記事一覧を表示しませんでした。

投稿だけに検索を限定する場合は、制作⑦の追加フックを使うと一致する固定ページを除外し、検索結果の2ページ目へ進めます。

この追加確認はサーバー側の出力を対象にしています。

自作テーマでの長い記事名の一覧、月別一覧のパンくず、分割本文、親のある固定ページ、パスワード保護本文も確認しました。

今回のコード更新後のPC・スマホ表示と検索ボタンのキーボード操作は未確認のため、前節の実画面の記録と分けて扱います。

  • URLをコピーしました!

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

WordPressのホームページ制作

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

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

サービス

Service

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

目次