復習3日目_20251125
🔷 Day3:WordPress テーマ改善(UI向上)
🧩 STEP 1:テーマ構造の全体把握
✔ wp-content/themes の中にあるフォルダは?
どちらかの方法で確認できる。
① WordPress 管理画面か、またh、② Docker 環境から確認
②の手順は以下
↓EC2 に SSH 接続
↓WordPress コンテナに入る
docker exec -it wordpress bash
このコマンドの意味は
docker:Docker(コンテナ仮想化)のコマンドを使うよ、という宣言。
exec: 既に動いているコンテナの中でコマンドを実行する という意味
-i:コンテナの中で “入力” ができる状態にする(interactive)
t:ターミナル(シェル)を割り当てて、人間が操作できるようにする
-it:コンテナの中に入って、人間が操作できるようにする というオプション。
wordpress:コンテナ名
bash:Linuxのコマンドを操作できる bashシェル を立ち上げる。
↓themes ディレクトリへ移動
cd /var/www/html/wp-content/themes
↓フォルダ一覧を表示
ls -la
↓表示結果は以下
astra index.php my-original-theme twentytwentyfive twentytwentyfour twentytwentythree
📌 インストール済みテーマ一覧
My Original Theme(有効) ← 今使ってるテーマ
Astra
Twenty Twenty-Five
Twenty Twenty-Four
Twenty Twenty-Three
↓テーマの中身を確認
cd /var/www/html/wp-content/themes/my-original-theme
ls -la
🎨 テーマ構造(完全版)
my-original-theme の中身は以下:
| ファイル名 | 役割 |
|---|---|
| header.php | サイト全体で共通のヘッダー(メニュー・タイトル周り) |
| footer.php | サイト共通のフッター(著作権表記など) |
| front-page.php | トップページ専用テンプレート |
| index.php | テンプレート階層の最終フォールバック。一覧ページやアーカイブも担当 |
| page.php | 固定ページ用テンプレート |
| single.php | 投稿記事(ブログ記事)用テンプレート |
| functions.php | テーマ固有の処理(スクリプト読み込みなど) |
| style.css | テーマ情報+スタイルシート |
*一覧ページテンプレートが無い
このテーマには archive.php がなく、カテゴリ一覧・タグ一覧・年月別アーカイブなど すべての一覧ページが index.php にフォールバック されている。
archive.php が無いため、一覧系ページのデザインがトップページや記事ページと統一されていない可能性がある。
何故ならば、WordPress テンプレート階層では、一覧ページを表示する優先順位は下記のため。
archive.php
→ index.php(フォールバック)
✨ 今日やること:
①archive.php を新規作成
→ ブログ一覧が“ブログらしく”なる
②single.php を整える
→ 記事の読みやすさが大幅UP
③page.php を調整
→ 固定ページがスッキリわかりやすく
④front-page.php を強化
→ サイト全体の印象UP(最優先効果)
作業に着手
①archive.php を新規作成
↓archive.php ファイルを作る
my-original-themeにいるので、
touch archive.php
↓archive.php を編集する
nano archive.php
以下を記載
<?php get_header(); ?>
<main class=”archive”>
<header class=”archive-header”>
<h1 class=”archive-title”>
<?php the_archive_title(); ?>
</h1>
<?php if ( get_the_archive_description() ) : ?>
<div class=”archive-description”>
<?php the_archive_description(); ?>
</div>
<?php endif; ?>
</header>
<?php if ( have_posts() ) : ?>
<div class=”archive-post-list”>
<?php while ( have_posts() ) : the_post(); ?>
<article <?php post_class( ‘archive-post-item’ ); ?>>
<a href=”<?php the_permalink(); ?>” class=”archive-post-link”>
<?php if ( has_post_thumbnail() ) : ?>
<div class=”archive-post-thumb”>
<?php the_post_thumbnail( ‘medium’ ); ?>
</div>
<?php endif; ?>
<div class=”archive-post-body”>
<h2 class=”archive-post-title”>
<?php the_title(); ?>
</h2>
<time class=”archive-post-date” datetime=”<?php echo esc_attr( get_the_date( ‘c’ ) ); ?>”>
<?php echo esc_html( get_the_date() ); ?>
</time>
<div class=”archive-post-excerpt”>
<?php the_excerpt(); ?>
</div>
</div>
</a>
</article>
<?php endwhile; ?>
</div>
<div class=”archive-pagination”>
<?php
the_posts_pagination( array(
‘mid_size’ => 1,
‘prev_text’ => ‘«’,
‘next_text’ => ‘»’,
) );
?>
</div>
<?php else : ?>
<p class=”archive-no-posts”>記事がありません。</p>
<?php endif; ?>
</main>
<?php get_footer(); ?>
Ctrl + O → Enter(保存)
Ctrl + X(終了)
🔥 archive.php が使われるページはどこ?
https://xxxx/category/カテゴリ名/
↓カテゴリ名でソートされているか?を確認する。
私の場合は、https://k-stone.click/category/it/
見た目を整えるフェーズへ
CSSで一覧デザインを整える
↓style.css を開いて編集
nano style.css
↓一覧ページ用のCSSに下線内を最後に追記
「壊したら怖い…」というときは、
今の style.css を 一回コピーしてバックアップ にしてから触るのもあり。
cp style.css style.css.backup-$(date +%Y%m%d-%H%M)
✅ nano の Undo(ひとつ前に戻る)
Alt + U
🔁 Redo(やっぱり戻したやつをやり直す)
Alt + E
1行づつけすときは、
Ctrl+K
/* ========================================
Archive Page Layout (Post List)
======================================== */
.archive {
max-width: 960px;
margin: 0 auto;
padding: 40px 16px;
}
/* Heading */
.archive-header {
margin-bottom: 24px;
}
.archive-title {
font-size: 1.8rem;
margin: 0 0 8px;
}
.archive-description {
color: #555;
font-size: 0.9rem;
}
/* Card List Wrapper */
.archive-post-list {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(280px, 1fr));
gap: 24px;
}
/* Each Card */
.archive-post-item {
background: #ffffff;
border: 1px solid #eee;
border-radius: 8px;
overflow: hidden;
box-shadow: 0 2px 4px rgba(0,0,0,0.04);
transition: transform 0.15s ease, box-shadow 0.15s ease;
}
.archive-post-link {
display: block;
text-decoration: none;
color: inherit;
}
/* Thumbnail */
.archive-post-thumb img {
display: block;
width: 100%;
height: auto;
max-height: none;
object-fit: contain;
}
/* Card Body */
.archive-post-body {
padding: 12px 14px 16px;
}
.archive-post-title {
font-size: 1.1rem;
margin: 0 0 6px;
}
.archive-post-date {
display: block;
font-size: 0.8rem;
color: #777;
margin-bottom: 8px;
}
.archive-post-excerpt {
font-size: 0.9rem;
line-height: 1.6;
}
/* Hover Effect */
.archive-post-item:hover {
transform: translateY(-3px);
box-shadow: 0 4px 10px rgba(0,0,0,0.08);
}
/* Pagination */
.archive-pagination {
margin-top: 32px;
text-align: center;
}
.archive-pagination .page-numbers {
display: inline-block;
margin: 0 4px;
padding: 6px 10px;
border-radius: 4px;
border: 1px solid #ddd;
font-size: 0.9rem;
}
.archive-pagination .page-numbers.current {
background: #333;
color: #fff;
border-color: #333;
}
/* Responsive Layout for Small Screens */
@media (max-width: 600px) {
.archive {
max-width: 100%;
padding: 24px 12px;
}
.archive-post-list {
grid-template-columns: 1fr;
gap: 16px;
}
}
↓✅ CSSでカードレイアウト(2カラム)実装
▼ style.css が反映されない場合のチェックポイント
もし archive.php を作って CSS を書いたのに反映されない場合は、functions.php に style.css を読み込むコードが必要
function my_original_theme_enqueue_styles() {
wp_enqueue_style(
‘my-original-theme-style’,
get_stylesheet_uri(),
[],
‘1.0.0’
);
}
add_action( ‘wp_enqueue_scripts’, ‘my_original_theme_enqueue_styles’ );
また、style.css が反映されない場合、多くは wp_enqueue_style が無い ことが原因。
<span style=”color:red”>/**
* Load main stylesheet
*/
function my_original_theme_enqueue_styles() {
wp_enqueue_style(
‘my-original-theme-style’,
get_stylesheet_uri(),
[],
‘1.0.0’
);
}
add_action( ‘wp_enqueue_scripts’, ‘my_original_theme_enqueue_styles’ );</span>
🟥【追記:style.css が反映されないときのチェックリスト】
- テーマのヘッダーコメントが崩れていないか
- functions.php に wp_enqueue_style があるか
- ブラウザキャッシュを削除したか
(プライベートモードで更新すると反映されることが多い)
以下にする。
<header>
タイトル
日付
カテゴリ
</header>
アイキャッチ画像
<article class=”post-content”>
本文
</article>
<footer>
タグ
前後記事リンク
</footer>
↓single.php の編集
まずバックアップ取っておくと安心:
cp single.php single.php.bak-$(date +%Y%m%d-%H%M)
cp:copy(コピー)の意味
→ ファイルを複製する
single.php:コピー元(元ファイル)
single.php.bak-$(date +%Y%m%d-%H%M):コピー先のファイル名
single.php.bak-:「バックアップですよ」という目印
$(date +%Y%m%d-%H%M): シェルの”日付コマンド”を実行して、結果を文字として挿入する という意味
<?php get_header(); ?>
<main class=”single”>
<?php if ( have_posts() ) : while ( have_posts() ) : the_post(); ?>
<article <?php post_class(‘single-post’); ?>>
<!– POST HEADER –>
<header class=”single-header”>
<h1 class=”single-title”><?php the_title(); ?></h1>
<div class=”single-meta”>
<time class=”single-date” datetime=”<?php echo esc_attr( get_the_date(‘c’) ); ?>”>
<?php echo esc_html( get_the_date() ); ?>
</time>
<?php
$cats = get_the_category();
if ( $cats ) :
?>
<span class=”single-category”>
<?php echo esc_html( $cats[0]->name ); ?>
</span>
<?php endif; ?>
</div>
</header>
<!– FEATURED IMAGE –>
<?php if ( has_post_thumbnail() ) : ?>
<div class=”single-thumbnail”>
<?php the_post_thumbnail( ‘large’ ); ?>
</div>
<?php endif; ?>
<!– CONTENT –>
<div class=”single-content”>
<?php the_content(); ?>
</div>
<!– FOOTER –>
<footer class=”single-footer”>
<!– tags –>
<div class=”single-tags”>
<?php the_tags( ‘<span class=”tag”>’, ‘</span><span class=”tag”>’, ‘</span>’ ); ?>
</div>
<!– prev/next –>
<div class=”single-nav”>
<div class=”prev-post”><?php previous_post_link(); ?></div>
<div class=”next-post”><?php next_post_link(); ?></div>
</div>
</footer>
</article>
<?php endwhile; endif; ?>
</main>
<?php get_footer(); ?>
上の線内の意味は以下
部分 内容
single-header タイトル、日付、カテゴリ
single-thumbnail アイキャッチ画像
single-content 記事本文
single-tags タグ一覧
single-nav 前後記事リンク
post_class() WordPressが自動で post, category, tag などを付与
もとのバージョンとの変更点
1️⃣ 囲い方・クラス名の整理
2️⃣ メタ情報の中身
3️⃣ フッター部分(タグ+前後記事ナビ)
③page.php を調整
→ 固定ページがスッキリわかりやすく
| 改善効果 | 内容 |
|---|---|
| 🎨 デザインがしやすい | クラスがキレイに整理され、CSS が当てやすい |
| 📱 レスポンシブ対応が楽 | 固定ページだけスマホ調整が可能 |
| 🏗 コードが美しい | 構造が分かりやすく、あとで見返しても迷わない |
| 🔍 SEO にも良い | 意味のある HTML 構造になる |
| 🔧 拡張しやすい | 独自デザインに簡単に成長させられる |
↓page.phpの編集
nano page.php
<?php get_header(); ?>
<main class=”page”>
<?php if ( have_posts() ) : while ( have_posts() ) : the_post(); ?>
<article <?php post_class(‘page-post’); ?>>
<!– PAGE HEADER –>
<header class=”page-header”>
<h1 class=”page-title”><?php the_title(); ?></h1>
</header>
<!– CONTENT –>
<div class=”page-content”>
<?php the_content(); ?>
</div>
<!– Optional: ページの更新日を表示したければここに追加 –>
<!–
<footer class=”page-footer”>
<p class=”page-updated”>最終更新日:<?php the_modified_date(); ?></p>
</footer>
–>
</article>
<?php endwhile; endif; ?>
</main>
<?php get_footer(); ?>
CSSもあてなおした。←ここは実はよく理解していない。
④front-page.php を強化
→ サイト全体の印象UP
ここはChatGPTであまり、うまくいっていない。
<?php get_header(); ?>
<main class=”front-page”>
<!– Hero section –>
<section class=”front-hero”>
<h1 class=”front-hero-title”>K_StoneのPAGE</h1>
<p class=”front-hero-lead”>
家庭菜園とIT学習の記録サイト。AWS / Docker / WordPress / AI アプリのメモを残しています。
</p>
</section>
<!– Latest posts section –>
<section class=”front-latest”>
<h2 class=”front-latest-title”>最新の投稿</h2>
<?php
$front_query = new WP_Query( array(
‘post_type’ => ‘post’,
‘posts_per_page’ => 3,
) );
if ( $front_query->have_posts() ) : ?>
<div class=”archive-post-list”>
<?php while ( $front_query->have_posts() ) : $front_query->the_post(); ?>
<article <?php post_class( ‘archive-post-item’ ); ?>>
<a href=”<?php the_permalink(); ?>” class=”archive-post-link”>
<?php if ( has_post_thumbnail() ) : ?>
<div class=”archive-post-thumb”>
<?php the_post_thumbnail( ‘medium’ ); ?>
</div>
<?php endif; ?>
<div class=”archive-post-body”>
<h3 class=”archive-post-title”><?php the_title(); ?></h3>
<time class=”archive-post-date” datetime=”<?php echo esc_attr( get_the_date( ‘c’ ) ); ?>”>
<?php echo esc_html( get_the_date() ); ?>
</time>
<div class=”archive-post-excerpt”>
<?php the_excerpt(); ?>
</div>
</div>
</a>
</article>
<?php endwhile; ?>
</div>
<?php else : ?>
<p>まだ投稿がありません。</p>
<?php endif;
wp_reset_postdata();
?>
</section>
</main>
<?php get_footer(); ?>
CSSもあてた
/* Front page layout */
.front-page {
max-width: 960px;
margin: 0 auto;
padding: 32px 16px 48px;
}
.front-hero {
margin-bottom: 32px;
padding: 24px 20px;
background: #f5f7ff;
border-radius: 8px;
}
.front-hero-title {
margin: 0 0 8px;
font-size: 2.1rem;
}
.front-hero-lead {
margin: 0;
font-size: 1rem;
line-height: 1.7;
}
.front-latest-title {
font-size: 1.4rem;
margin: 0 0 16px;
}