本記事は広告が含まれる場合があります WordPress

【テーマ自作】WordPress オリジナルテーマの作り方と基本

今回はWordPress(ワードプレス)でオリジナルのテーマ作成にチャレンジしたいという方向けに、静的HTMLサイトを例にWordPressテーマの作成方法の基本について説明していきます。
 

■今回WordPress化する静的サイトの例
自作テーマ作成解説用に準備した静的サイト

 
ここでは前半に最小構成のテーマの作り方を説明、後半に投稿・固定ページなどの各種テンプレートの追加の仕方を説明していきます。

 

 

※本記事はWordPressバージョン6.4.3の環境で説明しています。ここでは従来のクラシックテーマの作り方を解説しています。フルサイト編集(ブロックテーマ)の作り方に関する解説はしていませんのでご注意ください。
 

WordPressとは 基本のおさらい

WordPressの概要構成

以下はWordPressの構成、いわゆるシステムの実体の概要図です。

ワードプレスの構成

 

静的サイトの場合HTMLや画像などのファイル類で構成されますが、WordPressはさらにPHPというプログラム言語とMySQLと言われるデータベース(データの蓄積される場所)を利用しています。

ブログ情報(文章)などもデータベースに蓄積され、このデーターベースとHTML・CSS・PHPなどのファイル類と連携して、WordPressのシステムを提供しています。

 
 

WordPressのフォルダ・ディレクトリ構成

つぎに、WordPressのフォルダ・ディレクトリ構成(下図の赤枠の部分)について説明します。

WordPressのディレクトリ構成

 

以下はWordPressのインストールフォルダの中身です。

WordPressのインストールフォルダの中身

 

主要なファイル・フォルダは下記の通り。

フォルダ・ファイル名 内容
wp-content WordPressのテーマやプラグイン、画像データなどが入ったフォルダ。WordPressをカスタマイズする際には、主にこのフォルダの中のファイル類に対して作業していきます。
wp-admin WordPressの管理画面用のファイル類が格納されているフォルダ
wp-includes WordPressのシステム全般に関するファイル類が格納されているフォルダ。
wp-config.php WordPressの設定ファイル。データベースとの通信に必要な情報なども記述されており、とても重要なファイル
wp-login.php WordPressのログイン画面に関するファイル
wp-load.php WordPressの動作に必要なプログラム類を読み込むファイル
index.php サイトにアクセスがあった時に最初に読み込まれるファイル

(関連)【WordPressディレクトリ構成】フォルダ・ファイル構成を解説
 

wp-contentは、WordPressのテーマやプラグイン、画像などを格納するフォルダです。

下記はwp-contentの中身です。この中の「themes」にWordPressのテーマが格納されています。
テーマを作成・カスタマイズ する時に触るフォルダ
 

「themes」フォルダの中には、デフォルトのWordPressテーマがあるほか、このフォルダに独自テーマを追加することでそのテーマを利用できるようになります。

ワードプレスのテーマフォルダの中身

 

管理画面の外観>テーマから見たWordPressのテーマ画面です。themesフォルダの中にあるテーマがここに表示されて選択することができます。

ワードプレス テーマ選択画面

ワードプレス テーマ選択画面

 
 

【超基本】WordPressの最小構成テーマを作成する

ここからは、実際にHTML・CSSファイルの静的サイトから、最小構成のWordPressテーマを作成する方法をご紹介します。

なお、ここでは従来のクラシックテーマの作り方を解説しています。フルサイト編集(ブロックテーマ)の作り方ではないのでご注意ください。(参考)【フルサイト編集】WordPress有名ブロックテーマと従来テーマとの違い
 

WordPressテーマ必要最小の構成と準備環境

WordPressテーマの最小構成は「index.php」と「style.css」の2ファイルです。

WordPressテーマの最小構成。style.cssとindex.php

 

今回は、themesフォルダの中にテーマフォルダ「webst8」を作成して、index.phpとstyle.cssを作ってWordPressのテーマを表示させる最小構成で説明していきます。

今回説明する最小構成

  • webst8:themesに格納するテーマフォルダ名
  • index.php:テーマの基本テンプレート
  • style.css:テーマの名前などを記述する

 

事前に準備したローカル環境

今回はLocal(旧Local by flywheel)というアプリで、ローカル環境(webst8.local)にWordPressをインストールした状態で進めていきます。

ここでは割愛しますが、ローカル開発環境Localの導入からWordPressのインストールまでの手順は「local by flywheelインストールと使い方・WordPress環境構築」をご覧ください。

local by flywheelのトップページ
 

合わせて読みたい記事

インターネット上に公開して試したい場合は、レンタルサーバーが必要です。国内で有名なレンタルサーバーについては「【徹底解説】レンタルサーバーおすすめ比較12選・選び方」をあわせてご参考ください。

 

準備したフォルダをWordPressのテーマディレクトリにコピーする

事前準備した「webst8」フォルダをWordPressのテーマフォルダにしていきます。事前に下記のようなページと、HTML・CSS・画像ファイルを準備して説明していきます。

■事前準備するHTMLフォルダとファイル類  デモサイトはこちら
事前準備しているwebst8フォルダとファイル類
 

項目 内容
webst8 htmlファイル類を格納しているフォルダ。あとでWordPressのthemesフォルダに移動します。
index.html 今回WordPress化するウェブページ
mystyle.css index.htmlを整形するスタイルシート
images 画像を格納しているフォルダ
外部から読み込んでいるCSSやJavascriptファイル CSSやJavascriptはBootstrap5.3を利用しています。ここではBootstrapの使い方については割愛します。

 
■トップページ(index.html)
自作テーマ作成解説用に準備した静的サイト

 

■index.htmlのソースコード

 

■mystyle.cssのソースコード

 

(※)画像をはじめHTMLファイルなどはご自身の好きなものを準備して読み替えて進めてください。CSSやJavascriptはBootstrap5.3を利用しています。ここではBootstrapの使い方については割愛します。
 

まずは、事前準備した「webst8」フォルダをWordPressのthemesディレクトリにコピーします。
WordPressのthemesフォルダにwebst8フォルダをコピーする

Localを利用したローカル開発環境の場合(MacOSの場合)、/Users/ユーザー名/Local Sites/ドメイン名/app/public/wp-contentにthemesフォルダがあります。

 

 

必須ファイルstyle.cssを作成する

つづいてwebst8フォルダのなかに、必須ファイルであるstyle.cssを新規作成します。
WordPressに格納したwebst8フォルダにstyle.cssを追加する

 

style.cssにはテーマの名前など必須の情報を入力します。ここではstyle.cssに以下のように記載します。

 

Theme NameはWordPressのテーマの名前(必須)です。他にも必要に応じて下記のような項目などを記載することができます。
WordPress style.cssファイル
 

項目 名称
Theme Name: テーマの名前(必須)
Theme URL: テーマのURL
Description: テーマの説明
Author: テーマ制作者の名前
Version: テーマのバージョン

 

必須ファイルindex.phpを作成する

つぎにindex.phpを作成します。

ここでは、トップページとして用意していたindex.htmlのファイル名を「index.php」に変更します。
index.htmlをindex.phpに変更する

 

WordPress管理画面からテーマを適用する

これでテーマが適用できるようになります。
 

WordPressの外観>テーマで「ウェブストエイト」を有効化します。
テーマ「ウェブストエイト」を有効化

 

補足 テーマのサムネイルを表示する

880x660pxの「screenshot.png」という画像をwebst8フォルダに格納すると、テーマ選択画面でサムネイルが表示できます。

「screenshot.png」を格納すると、テーマ選択画面の画像が設定される

 

テーマ選択画面でサムネイルが表示されました。
テーマ選択画面でサムネイルが設定されている

 

テーマ適用後に、トップページを表示します。設定したテーマが表示されていればいったん完了です。

"テーマを有効化したばかりの状態。CSSが崩れており、画像もきちんと表示されていない。
 

この状態ではまだCSSファイルのスタイルが適用されていなかったり、画像が表示されいないので、さらに修正していきます。

 

相対パスをWordPress独自の関数に修正する

さきほどWordPressの最小構成のテーマを作成することができましたが、CSSが適用されていなかったり、画像が表示されなくなっていました。

 

■トップページ スタイルが崩れていて、画像が表示されていない
"テーマを有効化したばかりの状態。CSSが崩れており、画像もきちんと表示されていない。

 

本来画像がある場所は「WordPressインストールフォルダ(webst8.local)/wp-content/themes/webst8/images/xxx.png」ですが、WordPress化したことで下記のように「webst8.local/webst8/images/xxx.png」となっていてファイルが見つからず画像が表示されなくなっています。

指定している相対パスにファイルが存在せず、エラーが発生しているため、正しいパスに修正する必要がある
 

そこで、相対パスで記述している箇所をWordPress独自の関数を入れて修正していきます。(CDNを利用している場合など、絶対パスで指定している箇所は修正不要です。)

 

CSSファイルの相対パスの修正

デモサイトのCSSの読み込み指定を下記のように変更します。

 

JavaScriptなども相対パスで設定している場合は、必要に応じて上記の方式で変更してあげましょう。

画像ファイルのパスの修正

また、画像ファイルのパス(src=の部分)も以下のように修正します。

 

画像が多い場合はVisual Studio Code(エディタ)上でcommand+Shift+H(ウインドウズの場合は、ctrl+Hを押して下記のように入力して一括置換すると手間が削減できます。
Visual Studio Code(エディタ)上で「command+Shift+H」(ウインドウズの場合は、ctrl+H」を押して下記のように入力して一括置換
 

設定変更後にCSSファイルや画像が適用されているか、画面が更新されていることを確認します。
自作テーマ作成解説用に準備した静的サイト

 

「get_template_directory_uri();」について

get_template_directory_uri()は、現在利用しているテーマ(親テーマ)のパスを戻り値として返すWordPress独自の関数です。

本例では、get_template-directory_uri()が、http://webst8.local/wp-content/themes/webst8という文字列を出力しています。

HTMLファイルの中に記述する際は「<?php echo get_template_directory_uri(); ?>」のように記述します。

get_template_directory_uri()がhttp://wp-content/themes/webst8/を出力している

■参考サイト
get_template_directory_uri() – Function | Developer.WordPress.org

 

WordPress関数(wp_head()とwp_footer())を追加する

つぎにWordPressで実質必須の関数であるwp_head()wp_footer()を追加します。

下記のように<?php wp_head(); ?>を</head>タグの直前に、<?php wp_footer(); ?>を</body>タグの直前に挿入してください。

 

上記設定後にログインしてトップページを表示すると、画面上部に管理バーが表示されるようになっています。
WordPressのwp-head()、wp-footerがセットされた後の画面

 

トップページのソースコードを確認すると、wp_head()を記述した箇所にはWordPressのオリジナルのコードやプラグインのコードが出力されていることを確認できます。
wp-head()タグを記述することで、headタグの閉じタグ直前にWordPressのオリジナルコードが追記されている

 

また、wp_footer()を記述した箇所には上部管理バーを表示させる記述などが出力されています。

上部管理バーを表示させる記述などが出力されている

 

<?php wp_head(); ?>と<?php wp_footer(); ?>は必須の関数

<?php wp_head(); ?>を</head>タグの直前に、<?php wp_footer(); ?>を</body>タグの直前に挿入することで、それぞれの関数を経由してWordPressの基本機能やプラグイン機能のコードが出力されて使うことができるようになります。

これらの基本機能やプラグインを使わない運用は通常ありえないので必須の関数として忘れずに挿入しておきましょう。

 
 

jqueryとjavascriptをWordPress独自のやり方で設定でする

現状では、下記のように<script src="https://code.jquery.com/jquery-3.2.1.min.js"></script>と記述してjqueryを読み込む設定をしています。

 

しかし、WordPressにはもともと標準でjQueryが読み込まれているため、重複して読み込みをさせると競合して予期せぬ不具合やパフォーマンス劣化を起こす場合があります。

異なる二つのjQueryファイルを読み込んで競合するのを防ぐため、一般的にはもともとWordPressに備わっているjQueryを利用します。

(参考)WordPress標準で読み込まれるjqueryファイルの場所)<WordPressインストールフォルダ>/wp-includes/js/jquery/jquery.js
(参考)WordPressでjQueryを利用する際の書き方と注意点

 

wp_enqueue_script()関数でjqueryやjsファイルを読み込ませる

WordPressに備わっているjQueryを使用するにはwp_enqueue_script()関数を使用します。<?php_head();?>の上にwp_enqueue_script('jquery')と記載しましょう。

代わりに、<script src="https://code.jquery.com/jquery-3.2.1.min.js"></script>が不要になるのでこの一行をコメントアウト(または削除)します。

 

■修正ステップ1

(新たにfunctions.phpというファイルを作ってそこに記述して制御する方法もありますが、簡略化のためここでは割愛します。)

 

上記の設定後にトップページのソースコードを見るともともとWordPressに備わっているjqueryが読み込まれるようになったことが確認できます。
もともとWordPressに読み込まれているjQueryが出力されている

 

また、bootstrap用のjavascriptファイル<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js"></script>はjqueryを利用しているため、jqueryを読み込んだ後で読み込ませる必要があります。

そこで、<?php wp_enqueue_script('jquery'); ?>の後の行に下記のコードを追加します。

 

最後のarray('jquery')指定で、bootstrap.bundle.min.jsをjqueryの後で読み込ませるという指定をしています。

代わりにもとの<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js"></script>は不要になったため、コメントアウト(または削除)します。
 

■修正後のindex.php

 

wp_enqueue_scriptの詳細は、wp_enqueue_script() – Function | Developer.WordPress.orgをご確認ください。(※公式ドキュメントは英語で記載されていますが、日本語で記載されているブログ記事も多くあるのでそちらを参考にしてみてください。)

ここでは、割愛しますが、他のCSSファイルやJavascriptファイルの読み込み順番も同様にして制御することができます。

■詳細の説明はこちらをご覧ください。
wp_enqueue_script() – Function | Developer.WordPress.org

(補足)通常jQueryで使っている「$」が使えない件

jQueryを利用した書き方で「$」を使った書き方が多いですが、WordPressでは基本的にそのまま使えません。

WordPressに備わっているjQueryはno-conflictモードになっていて「$」が使えなくなっています

WordPressの他のライブラリで「$」の文字が使われいた時に不具合がおきないようにこのような仕様になっています。

従ってネットで探したjQueryのコードをそのままコピー&ペーストしても「$」が原因で動かないケースがよくあります。

簡単にできる対処方法としては「$」を「jQuery」に全て変換する方法があります。

あるいは「$(function(){・・・})」を「jQuery(function($) {・・・})」のようにカプセル化した書き方をしても解決できます。

jQuery.noConflict() | jQuery API Documentation

 

テンプレートを分割する

つぎに、下記のようにindex.phpをheader.phpとfooter.phpとsidebar.phpに分割していきます。

分割することで、ファイルを共通化して効率よくメンテナンス・更新ができるようになります。
index.phpをheader.php・footer.php・sidebar.php・index.phpに分割する

 

まずは、空のheader.phpとfooter.phpとsidebar.phpを新規作成してください。
空のheader.phpとfooter.phpとsidebar.phpを新規作成する

 

上記のテンプレートはindex.php側(呼び出し側のファイル)で、以下の関数で呼び出すことができます。

各テンプレートの呼び出し方

  • header.phpを「get_header();で呼び出します
  • footer.phpを「get_footer();で呼び出します
  • sidebar.phpを「get_sidebar();で呼び出します

 

header.phpを作成してindex.phpに読み込ませる

まずはheader.phpを作っていきます。ここではヘッダー画像までを共通化したいので、index.phpから下記の部分を切り取り(削除して)、header.phpに貼り付けます

 

■header.php (index.phpから切り取ってheader.phpに貼り付けするコード)

 
共通化したいところまでをコピーすれば良いので、切り取る部分は必ずしも上記と同じにする必要はありません。

次に、index.php上部(切り取りした部分)に<?php get_header(); ?>を追記して分割したheader.phpを読み込む設定をします。

 

■index.phpに追記するコード<?php get_header(); ?>

 

get_header()はWordPress独自の関数で、header.phpを読み込む処理をしてくれます。

 

footer.phpを作成してindex.phpに読み込ませる

つづけて、footer.phpを作成します。ここでは、<footer>から</html>までを切り取って(削除して)、footer.phpに貼り付けます

 

■footer.php(index.phpから切り取ってfooter.phpに貼り付けするコード)

 

共通化したいところまでをコピーすれば良いので、切り取る部分は必ずしも上記と同じにする必要はありません。

次に、index.phpの最終行(切り取りした部分)に<?php get_footer(); ?>を追記して分割したfooter.phpを読み込む設定をします。

 

■index.phpに追記するコード <?php get_footer(); ?>

 

get_footer()はWordPress独自の関数で、footer.phpを読み込む処理をしてくれます。

 

sidebar.phpを作成してindex.phpに読み込ませる

最後にsidebar.phpを作成します。ここでは、<div id="sidebar" class="col-md-3">タグの中身を切り取って、sidebar.phpに貼り付けます。

 

■sidebar.php(index.phpから切り取ってsidebar.phpに貼り付けするコード )

共通化したいところまでをコピーすれば良いので、切り取る部分は必ずしも上記と同じにする必要はありません。

つぎに、index.phpの<div id="sidebar" class="col-md-3">タグの中に(切り取りした部分)に<?php get_sidebar(); ?>を追記して分割したsidebar.phpを読み込む設定をします。

 

■index.phpに追記するコード <?php get_sidebar(); ?>

 

get_sidebar()はWordPress独自の関数で、sidebar.phpを読み込む処理をしてくれます。

最後に表示がうまくいっているかを確認しましょう。トップページを表示してこれまで通り画面が正常に表示されていれば完了です。

自作テーマ作成解説用に準備した静的サイト
 
 

投稿や固定ページおよび主要テンプレートを作成する

ここからは固定ページや投稿ページなどを作成して、それぞれに応じたページが表示されるようにしていきます。

現時点ではindex.phpしか表示できるテンプレートがないので、WordPressで投稿や固定ページを作成しても全てindex.php(現状はトップページ)が表示されます。
固定ページを作成してもindex.phpの内容が表示される

固定ページを作成してもindex.phpの内容が表示される

 
このままだとWordPressの管理画面で投稿や固定ページ機能が使えないので、ここからテンプレート(phpファイル)を増やしていきます。

 

WordPressの主要なテンプレートファイルと優先順位

WordPressでよく利用する主要なテンプレートファイルをいくつかピックアップして記載します。

テンプレートファイル名 概要
index.php WordPress必須のテンプレート。他に優先順位の高いテンプレートがないときに最終的に適用される汎用テンプレート
single.php 投稿用のテンプレート
page.php 固定ページ用のテンプレート
archive.php アーカイブ用のテンプレート
category.php カテゴリーページのテンプレート
404.php ページが見つからないエラー(404エラー)用のテンプレート
search.php 検索結果用のテンプレート
front-page.php トップページ用のテンプレート
home.php トップページ・投稿一覧用のテンプレート 
※front-page.phpが存在せず設定>表示設定でフロントページに「最新の投稿」が設定されているときにトップページに適用される
※設定>表示設定で投稿一覧に固定ページが設定されているときに投稿一覧ページとして適用される

 

これらのテンプレートには「優先順位」があり、優先度の高いテンプレートが優先的に使われます。

最初に作成したindex.phpは他に優先順位の高いテンプレートがないときに最終的に適用される汎用テンプレートです。

優先順位の全体像は下記にありますので、ご興味のある方は確認してみてください。
WordPressのテンプレート階層を表した図

テンプレート階層 – Japanese Team – WordPress.org 日本語

ここからは、トップページと固定ページと投稿ページの優先順位について説明していきます。

 

トップページ用テンプレートの優先順位

トップページ用テンプレートの優先順位です。

優先順位 テンプレートファイル名 備考
1 front-page.php
2 (フロントページに固定ページを設定している場合)
固定ページに適用されるテンプレート階層が適用される
設定>表示設定でフロントページにいずれかの固定ページが設定されている必要がある
2 home.php 設定>表示設定でフロントページに「最新の投稿」が設定されている場合
4 index.php

 

トップページの設定は、WordPressの設定>表示設定でホームページ設定の内容により、適用されるテンプレートが変わるので少し複雑です。

設定>表示設定>ホームページの表示設定

今回紹介している例では、index.php以外のテンプレートが存在しないため、トップページにindex.phpが適用されています。

 

固定ページ用テンプレートの優先順位

固定ページ用テンプレートの優先順位です。

優先順位 テンプレートファイル名 備考
1 $custom.php カスタムテンプレートが選択されている場合
2 page-{スラッグ名}.php
3 page-{ID}.php
4 page.php
5 singular.php
6 index.php

 

今回紹介している例では、index.php以外のテンプレートが存在しないため、どの固定ページを表示してもindex.phpが適用されます。

このままだとWordPressの管理画面で固定ページを作成できないので、後ほど固定ページ用のテンプレート「page.php」の作り方を説明していきます。

 

投稿ページ用テンプレートの優先順位

投稿ページ用テンプレートの優先順位です。(カスタム投稿タイプを除く。)

優先順位 テンプレートファイル名 備考
1 $custom.php カスタムテンプレートが選択されている場合
2 single-post.php
3 single.php
4 singular.php
5 index.php

 

今回紹介している例では、index.php以外のテンプレートが存在しないため、どの投稿ページを表示してもindex.phpが適用されます。
 

補足:現在表示されているテンプレートファイルを確認する方法

WordPressのプラグイン「Show Current Template」をインストール・有効化すると、上部ツールバー上に現在表示されているテンプレートファイルが表示されるようになります。

Show Current Template

 

◾️上部ツールバーにテンプレートファイルの確認項目が追加される

上部ツールバーにテンプレートファイルの確認項目が追加される

 

WordPressでテーマを開発する際、現在表示されているテンプレートファイルを確認できると作業が捗るので、必要に応じてインストールしてあげてみてください。

 

 

固定ページ用テンプレート(page.php)を作成する

ここでは、固定ページ(page.php)の作り方を説明します。

固定ページのテンプレートが適用される順番は下記です。page.phpを作成すればindex.phpよりも優先されるのでpage.phpを作成していきます。

優先順位 テンプレートファイル名 備考
1 $custom.php カスタムテンプレートが選択されている場合
2 page-{スラッグ名}.php
3 page-{ID}.php
4 page.php ★今から作成
5 singular.php
6 index.php

 

固定ページ用テンプレートpage.phpを作成する

固定ページ用テンプレートpage.phpを作成していきます。ここでは、index.phpを流用して作ります。

index.phpをコピーしてpage.phpにリネームします。
index.phpをコピーしてpage.phpを作成する
 

まずはこのpage.phpが固定ページに適用されるかを確認してみましょう。

<div id="main" class="col-md-9">〜</div>の中を削除して代わりに以下のようにh1タグを追記します。

 

次にWordPressの管理画面から何か適当な固定ページを作成して、公開してみてください。

 

先ほど作成したpage.phpのテンプレートが適用されていることがわかります。
作成したpage.phpが適用されていることがわかる

 

ただし管理画面で固定ページに記述したタイトルや本文が反映されていません。これを管理画面で入力したタイトルや本文の内容が反映されるようにpage.phpを編集して行きます。

WordPressのページタイトルおよび本文中身を出力するには、以下の構文を使います。
ワードプレスのループ文
※h1,sectionタグはこちらで任意に決めたHTMLタグなので、h2でもdivでも構いません。
 

ここでは、そのまま固定ページ用のテンプレート「page.php」に以下のように追記すると、固定ページの中身を出力してくれます。

■page.phpのソースコード

 

これで、固定ページを表示してみると、管理画面で記述した内容が表示されていることを確認できます。

ブロックエディターで設定した内容が表示されている

 

■上記のWordPress関数の説明

項目 内容
ループ WordPressの投稿や固定ページなどの中身を表示するために使われる構文です。以下のような形でセットで使われます。

the_title() 投稿や固定ページのタイトルを表示します。前述のwhileループの中で使用します。

the_title() – Function | Developer.WordPress.org

the_content() 投稿や固定ページの本文を出力します。 前述のwhileループの中で使用します。

参考:the_content() – Function | Developer.WordPress.org

 

このように、HTMLで作成したテンプレートの中にWordPress用の関数を組み込むことでWordPressの管理画面で入力した設定値や文字列を出力できるようになります。

ここでは、タイトルと本文を出力していますが、他にも投稿日時やカテゴリーなど色々なものを出力できます。これらに関しては投稿(single.php)の作り方の解説の際に紹介します。
 
 

スラッグ付き固定ページ(page-{スラッグ名}.php)を作成する

独自のレイアウトの固定ページを作りたい場合は、ファイル名を「page-{該当ページのスラッグ名}.php」と変更することで、page.phpよりも優先させることができます。
 

下記のように静的サイトでもともと「contact.html」と「about.html」がある前提で、これをWordPressの固定ページとして読み込む方法を説明します。
 
webst8フォルダ内にcontact.htmlとabout.htmlを用意する

contact.htmlとabout.htmlのデザイン

 

STEP1. 固定ページを作成する

まず固定ページを作成していきます。

固定ページ>新規作成より「お問い合わせ」と「会社情報」ページを作成します。本文は空で構いませんので、スラッグ名を「contact」と「about」と入力して公開します。

■固定ページ「お問い合わせ」を作成。スラッグを「contact」に変更して公開
固定ページでお問い合わせページを作成し、スラッグを「contact」に変更して公開する

 

■固定ページ「会社情報」を作成。スラッグを「about」に変更して公開

固定ページで会社情報ページを作成し、スラッグを「about」に変更して公開する

 

STEP2. htmltのファイル名を変更する

つぎに、テーマフォルダ内のhtmlファイルをリネームします。

ここでは下記のように変更します。

  • contact.html → page-contact.php
  • about.html → page-about.php

ファイル名をabout.html→page-about.php、contact.html→page-contact.phpに変更する

 
ただし、このままだとパスやそのほかWordPressの設定ができておらずレイアウト崩れなどが起きた状態です。
パスがあっていないためレイアウトが崩れている状態

 

STEP3. WordPressの関数を組み込む

最初に実施したindex.phpのようにget_template_directory_uri();で画像のパスを合わせたり、ヘッダー、フッター、サイドバーもそれぞれ<?php get_header(); ?><?php get_footer(); ?><?php get_sidebar(); ?>に置き換えるようにしましょう。

以上で完了です。あとは、サイトを確認してページが反映されていることを確認しましょう。

 
お問い合わせフォームからのメール通知機能などの実装については、Contact Form 7などを利用すると良いでしょう。詳しくは WordPressプラグイン 【Contact Form 7の使い方】問い合わせフォーム作成方法をご覧下さい。
 
 

別の固定ページテンプレートを作成する

固定ページ「page.php」を作成しましたが、1カラムのテンプレートを利用したい場合やヘッダー・フッターを変えたい場合など、複数のレイアウトがあった方が便利な場合があります。

WordPressでは、そういった要件にあわせて任意の固定ページ用のテンプレートを作成することができます。

ここで作成するファイル名は、「pagetemplate-onecolumn.php」にします。名前はなんでも構いません。管理しやすい名前がおすすめです。

元になるテンプレートファイルの「page.php」をコピーして、「pagetemplate-onecolumn.php」を作成します。
page.phpをコピーして、pagetemplate-onecolumnを作成

 

pagetemplate-onecolumn.phpの冒頭にコメントで「Template Name」を記載します。

 

こうすることで、固定ページの編集画面のテンプレート設定箇所で「1カラムテンプレート」が選択できるようになります。

「Template Name:」で設定したテンプレート名が選べるようになっている

 

なお、pagetemplate-onecolumn.phpはワンカラム用のテンプレートにするので、サイドバーの以下セクションを削除します。

また、メインカラムのdivのクラスcol-md-9をcol-md-12に変更します。

 

これで、1カラムのテンプレートが作成できました。

管理画面の固定ページで1カラムテンプレートを選択できるようになったので、タイトルと文章を適当に記述してみましょう。

テンプレートに「1カラムテンプレート」を選択して、公開してみましょう。

1カラムテンプレートを選択して固定ページを公開する

1カラムのページができていることがわかります。

1カラムテンプレートで作成されたページ

 

以上で、固定ページの別テンプレートの作成方法は完了です。このテンプレートは固定ページの中で最も高い優先順位になります。

 

投稿ページ用テンプレート(single.php)を作成する

つづいて、投稿ページ用のテンプレートを作成していきます。

投稿ページのテンプレートの優先順位は下記の通り。single.phpを作成すればindex.phpよりも優先されるので、single.phpを作成していきます。

優先順位 テンプレートファイル名 概要
1 $custom.php カスタムテンプレートが選択されている場合
2 single-post.php
3 single.php ★今回作成
4 singular.php
5 index.php

 

投稿ページ用テンプレートsingle.phpを作成する

投稿ページ用テンプレートsingle.phpを作成していきます。

基本的にpage.phpを作成した時と同じ手順で作成できます。

ここでは、page.phpを流用して作ります。page.phpをコピーしてsingle.phpにリネームして下さい。
page.phpをコピーしてsingle.phpにリネーム
 

続けて管理画面の投稿から適当な記事を公開してみて下さい。
固定ページのPHPファイルを複製し、single.phpに変更してからテスト投稿をお行ってみる

 

投稿に書いた内容が表示されていることがわかります。
投稿に書いたタイトルと本文が表示されている

 

これもpage.phpの際に解説した以下の構文により、WordPressが投稿用の中身を探してくれて表示してくれています。

ワードプレスのループ文

固定ページと中身が同じなのに、そのままコピーしただけで投稿の中身も同様に出力させてくれるんですね。

上記の構文のif (have_posts()) : while (have_posts()) : the_post();は、メインループという機能でWordPressのテンプレートファイルに応じた中身(page.phpなら固定ページの内容/single.phpなら投稿ページの内容)を出力してくれています。

このメインループ内で、タイトルや本文をはじめ、次の章で説明する投稿日時やカテゴリー、アイキャッチなどの属性値を取得することができます。

 

投稿の投稿日時を表示する

お知らせなどで利用することが多い投稿ページの場合は、投稿された日付を表示してあげると親切です。

そこで、single.phpのタイトルの下に以下のように日付が入る箇所を追記してあげましょう。作成日時を表示するには、get_the_date()関数を使用します。

 

これで、投稿が作成された日時を表示することができます。

get_the_date()関数を使用することで投稿の公開日を表示させられる

 

なお、上の例では「年(Y)-月(M)-日(D)」といった形式で日付が表示されていますが、こちらはWordPressの「設定>一般」にある日付形式から変更できます。

設定>一般の日付形式から日付の表示の仕方を変更できる

 

投稿のカテゴリー情報を表示する

日付の下にカテゴリー情報も表示させましょう。

カテゴリー情報を表示させるには、the_category()関数を使用します。

 

<?php the_category(); ?>ではul・liタグを使って設定されているカテゴリー情報が全てリンク付きで出力されるので、必要に応じてスタイルを変更してあげましょう。

<?php the_category(); ?>ではul・liタグで設定されているカテゴリーが全てリンク付きで出力される

 

functions.phpを作成して投稿アイキャッチ画像を表示する

最後にタイトル下にアイキャッチ画像が表示されるように設定します。

初期状態ではアイキャッチ機能は有効化されておらず、アイキャッチの設定ができない状態になっています。

デフォルトではアイキャッチの設定欄が表示されていない

 

1. WordPressのアイキャッチ機能を有効化する

まず、テーマフォルダ内にWordPressの動作を制御するファイル「functions.php」を作成し、その中にアイキャッチ機能をONにする関数を記述します。

テーマフォルダ(ここでは、webst8)の直下にfunctions.phpを新規作成しましょう。
functions.phpを新規作成する
 

functions.phpができたら、下記のような記述をして保存しましょう。

 

functions.phpに記述した内容の解説

上記は、任意の名前の関数(function webst8_setup())を定義し、その中に引数としてpost-thumbnailsを指定したadd_theme_support()関数を記述しています。

add_theme_support()は、テーマがパラメータで指定した機能を有効化するようにする関数です。

本例では、add_theme_support( "post-thumbnails" ); でアイキャッチ画像を有効化しています。

このwebst8_setup関数をアクションフック(add_action)機能を利用してテーマ初期化のタイミングで呼び出しました。

 

これでテーマが初期化された後に関数が実行され、アイキャッチ画像の指定画面が表示されるようになります。

WordPressの編集画面でアイキャッチが設定できるようになっていればOKです。

アイキャッチの設定欄がONになっている

 

2. テンプレートにアイキャッチ画像を出力する設定をする

次にsingle.phpを編集して、アイキャッチ画像が実際に表示させるように設定していきます(現状は設定できても表示されない状態)

設定されたアイキャッチ画像を表示させるには、the_post_thumbnail()関数を使用します。今回は、記事タイトルの下にアイキャッチ画像を設定します。

 

上のように<?php if (has_post_thumbnail()):?><?php endif; ?>とセットで記述することで、サムネイルが設定されている場合のみサムネイルを表示させることが可能です。

なお、the_post_thumbnail()に引数を入れることで、アイキャッチ画像の出力サイズを変更することもできます。詳しくは「the_post_thumbnail() – Function | Developer.WordPress.orgをご参照ください。
 

トップページと投稿一覧ページを作成する

つぎに、現状のトップページを、トップページと投稿一覧ページに分けていきます。

やり方はいくつもありますので、ここではあくまで一例としてご紹介していきます。

 

トップページ用テンプレートfront-page.phpを作成する

トップページ用テンプレートの優先順位です。現在は、トップページを表示するのにindex.phpが使用されているので、こちらを複製してfront-page.phpを作成します。

優先順位 テンプレートファイル名 備考
1 front-page.php ★今から作成
2 (フロントページに固定ページを設定している場合)
固定ページに適用されるテンプレート階層が適用される
設定>表示設定でフロントページにいずれかの固定ページが設定されている必要がある
2 home.php 設定>表示設定でフロントページに「最新の投稿」が設定されている場合
4 index.php

 

index.phpを複製してトップページ用のテンプレートとしてfron-page.phpを作成する

 

投稿一覧用テンプレートindex.phpを作成(編集)する

次に、投稿一覧用テンプレートを改めて作成していきます。

投稿一覧ページの優先順位を見ると、home.phpかindex.phpの2つが使えますが、今回は既存のindex.phpを使って投稿一覧ページを表示させることにします。

順位 テンプレートファイル名 概要
1 home.php
2 index.php

 

次に、index.phpの中身を以下のように編集します。

 

これで、投稿一覧ページに使用したいテンプレートファイルが準備できました。

管理画面でフロントページと投稿一覧ページの設定をする

この投稿一覧ページをドメイン名/blog(本例ではwebst8.info/blog)にアクセスした際に表示させたい場合は、別途固定ページを用意してあげる必要があります。

以下のように、タイトルとパーマリンク(今回は「blog」とする)のみ設定し、投稿一覧ページ用の固定ページを公開しましょう。

投稿一覧ページ用の固定ページを用意し、タイトルとパーマリンクのみ設定し固定ページを公開する

 

また、トップページ用の固定ページも用意しましょう。タイトル・パーマリンクは何でも問題ありませんが、今回はタイトルを「トップページ」、パーマリンクを「home」としておきます。(※トップページ用の固定ページを用意する理由は後ほど解説します。)

トップページ用の固定ページを用意し、タイトルとパーマリンクのみ設定し固定ページを公開する

 

あとは「設定>表示設定」のホームページの表示から「ホームページの表示」から、「ホームページ」に先ほど作ったトップページ用の固定ページ、「投稿ページ」に投稿一覧ページ用の固定ページを割り当てます。

ホームページの表示でホームページに「トップページ」投稿ページに「記事一覧」の固定ページを割り当てる

 

これで、トップページ(http://webst8.local)を表示するとfront-page.phpのテンプレートファイルが表示され、「http://webst8.local/blog」にアクセスすると記事一覧ページ(index.php)が表示されるようになりました。

 

なお投稿一覧ページ(ここでは/blog/)で11記事以上かある場合は古いものから見えなくなります。ページネーションをつけて表示件数以上を表示させたい場合は、WP-PageNaviというプラグインを使う方法などあります。ご興味がある方は調べてみてください。

 

なお、「ホームページの表示」箇所で投稿一覧ページのみ設定している場合は、トップページにfront-page.phpが適用されなくなります。

投稿ページのみ設定している場合はトップページにfront-page.phpが適用されなくなる

 

そのため、設定>表示設定で投稿一覧ページに固定ページを割り当てる際は、トップページ用の固定ページも準備・割り当てるようにしましょう。

トップページと投稿一覧ページは、上記の設定>表示設定の設定内容によって、適用されるテンプレートが変わるので少し複雑です。

 

そのほかのいろいろなテンプレートを作る方法

続けて、そのほかのいろいろなテンプレートを作る方法をご紹介します。

前述のトップページや投稿・固定ページに比べると優先順位は比較なりますが、必要に応じて試してみてください。
 

​日付別アーカイブページ(archive.php)を作成する

つづいて、日付別の投稿一覧を表示するテンプレートを作成します。

日付別アーカイブページの表示に使用されるテンプレートファイルの優先順位は下記の通りです。

archive.phpを作成すればindex.phpよりも優先されるので、ここでは、archive.phpを作成します。

優先順位 テンプレートファイル名 概要
1 date.php カスタムテンプレートが選択されている場合
2 archive.php ★今回作成
3 index.php

 

これまでと同様にsingle.phpをコピーしてarchive.phpを作成します。

single.phpをコピーしてarchive.phpを作成する

 

つぎに、archive.phpを下記のように編集します。

 

■各関数の意味

関数名 意味
get_permalink(); 記事のパーマリンク(URL)を出力する関数。whileループ内で使用します。
the_title(); 記事タイトルを出力する関数。whileループ内で使用します。
get_the_date(); 日付を出力する関数。whileループ内で使用します。

 

これで「ドメイン/yyyy(西暦を入れる)」のようにアクセスすると、その年月日の一覧が表示されます。

■http://webst8.local/2024/にアクセスした際の表示画面

http://webst8.local/2024/にアクセスした際の表示画面

 

固定ページや投稿ページの作成の際にも以下のループ処理の構文を使いましたが、日付別アーカイブやカテゴリーアーカイブページ、投稿一覧ページなどで使用すると、該当する記事の数だけループが繰り返されるようになります。

ワードプレスのループ文

 

2024年に投稿した記事が上の例では3つだったため、http://webst8.local/2024/で表示される画面には3つの記事情報が取得されていますが、5つあれば5つ、7つあれば7つの投稿情報が表示されます。

日付別アーカイブやカテゴリーアーカイブページなどでループ処理の構文を使用すると、該当する記事の数だけループが繰り返される

 

なお、繰り返される回数は「設定>表示設定」の「1ページに表示する最大投稿数」より設定することができます。

1ページに表示する最大投稿数

 

カテゴリー別アーカイブページ(category.php)を作成する

つづいて、投稿のカテゴリー一覧を出力する方法を紹介します。

 
カテゴリーアーカイブページの表示に使用されるテンプレートファイルの優先順位は下記の通りです。

順位 テンプレートファイル名 概要
1 category-{slug}.php カテゴリーのスラッグが news ならば WordPress は category-news.php を探す。
2 category-{id}.php カテゴリー ID が 6 ならば WordPress は category-6.php を探す。
3 category.php -
4 archive.php -
5 index.php -

 

archive.phpとレイアウトが同じで良い場合は、新たにcategory.phpを作らなくても、archive.phpが適用されるので新規作成する必要はありません。

デザインを変更したい場合だけarchive.phpを複製して作成しましょう。

 

検索結果ページ(seach.php)を作成する

WordPressでは、search.phpファイルを準備してあげることで簡単にページ内の検索結果ページを作成できます。

投稿一覧ページ用に作成したindex.phpファイルを複製して、search.phpを作成しましょう。

index.phpを複製してsearch.phpを作成する

 

search.phpのタイトルには検索されたキーワードが表示されるようにしたいので、the_search_query()関数を使用して以下のように書き換えます。

 

次にheader.phpに記述されている検索フォームのfromタグを作成してみます。

action属性の値にはトップページのURL、method属性には「get」、name属性には「s」を指定します※その他記載のクラス名は主にbootstrap側で用意されているものです。

 

action属性の値を<?php echo esc_url( home_url() ); ?>としていますが、home_url()関数を使用することでトップページのURLを取得することができます。esc_urlは不正な処理を実行しないようにする関数(サニタイズ)です。

以上で、実際に検索をしてみるとそのキーワードが含まれたページのみ検索結果に表示されるようになります。

 

WordPressの関数を使って内部を作り込む

WordPressにはいろいろな関数が用意されており、より細かく内部を作り込んでいくことができます。

ここではいくつかの方法をご紹介します。

管理画面で設定したタイトルをtitleタグとして出力する

現状、header.phpでタイトルタグを「 <title>ウェブストエイト</title>」で設定していますが、このままでは全てのページで同じタイトルが出力されてしまいます。

header.phpのタイトルタグ。全て同じ中身が出力される
 

そこで下記のような命名規則で、各ページによって動的にタイトルタグを出力するように変更します。
トのタイトル「大阪の個別指導WEBスクールWEBST8」、キャッチフレーズ「
 

1. 管理画面からサイトタイトルやキャッチフレーズを設定する

まずは、管理画面からサイトタイトルやキャッチフレーズを設定してみましょう。

設定>一般設定を選択します。
設定>一般設定
 

一般設定が表示されます。ここでは下記のように変更して保存します。
WordPress一般設定>サイトのタイトルとキャッチフレーズを変更
 

2. 既存のtitleタグの部分を削除またはコメントアウトする

つぎに、header.phpの既存のtitleタグの部分を削除またはコメントアウトします(2重で出力されるのを防ぐため)

 

3. functions.phpでタイトルの挿入機能を有効にする

最後に、functions.phpでタイトルの挿入機能を有効にします。functions.phpに下記のように追記してみてください。

 

そうすると、設定>一般設定で設定したサイトタイトル・キャッチフレーズ、および固定ページのタイトルがtitleタグとして出力されるようになります。

トップページのタイトルタグ

トップページのタイトルタグ

固定ページ・投稿(下層ページ)のタイトルタグ

固定ページ・投稿(下層ページ)のタイトルタグ

 

メニューバーのリンクを繋げる

ページを複数作った場合は、メニューバーのリンクを繋げてあげましょう。

WordPressではhome_url()関数を使用することで、トップページのURLを簡単に取得することができます。下層ページには引数を入れてhome_url("/ページ名/")で出力することが来ます。

なお、esc_url()はセキュリティ対策の一つで不正なコードを実行しないようにしています。ここでは割愛しますが、気になる方は調べてみてください。

 

これで各ページにナビゲーションを繋げることができました。

 

(応用)管理画面からメニューを設定できるようにする

最後にheader.php内にあるナビゲーションメニューを管理画面から設定できるようにする方法を解説します。

 

外観>メニューからナビゲーションの編集ができるようにする

WordPressの管理画面には自由にメニューを編集できる「ナビゲーションメニュー」という機能が用意されています。

こちらの機能を使ってナビゲーションを表示させておくと、ナビゲーションの追加や削除などがダッシュボード上から簡単にできるようになるため便利です。

ナビゲーションメニューは外観>メニューから設定できますが、アイキャッチ画像の設定と同様に、初期状態ではOFF状態で表示されていません。

外観>メニューがない

 

そこでfunctions.php内のwebst8_setup()関数の中に、add_theme_support('menus')を追加し、メニュー機能を有効化します。

 

カスタムメニューが有効になると、管理画面の「外観」の中にメニューという項目が表示されるようになります。
外観>メニューが表示された

 

早速、外観>メニューから「main-manu」という名称でメニューを新規作成しましょう。メニューの位置には「ヘッダーナビゲーション」にチェックを入れておきます。

「main-manu」という名称でメニューを新規作成する

 

合わせて読みたい

メニューバーの設定方法についてはこちらをご参照ください。

関連記事:【WordPressメニューバー】作り方とカスタマイズ方法を解説

 

これでWordPressの管理画面から設定できるようになりましたが、まだ設定した内容が表示されない状態です。

そこで、テンプレート(header.php)にメニューバーを表示するように修正していきます。

<ul class="navbar-nav me-auto mb-2 mb-lg-0">...</ul>のセクションを削除して、代わりにメニュー用の関数wp_nav_menu()を追記します。

 

これで、外観>メニューで設定したメニューが表示されます。

wp_nav_menu()で外観?メニューで作成したナビゲーションを表示させている例

 

しかし、この方法では元々ul・lli・aタグに付与されていたクラス名がなくなってしまっているので、ナビゲーションのデザインが崩れてしまっています。

元々ul・lli・aタグに付与されていたクラス名がなくなったためデザインが崩れてしまっている

 

ここで、同じスタイルをそれぞれのタグに指定してあげることでデザインを元に戻すこともできますが、wp_get_nav_menu_items()関数を使用する方法でもul・lli・aタグに対してクラス名を付与することができます。

参考:wp_get_nav_menu_items() – Function | Developer.WordPress.org Building simple menu listより

 

これで、クラス名を残したまま外観>メニューでメニューを追加したり削除したりすることができるようになりました。

 

まとめ

まとめです。今回はWordPressでオリジナルのテーマ作成にチャレンジしたいという方向けに、静的HTMLサイトを例にテーマの作成方法の基本について説明しました。

WordPressでテーマを作るためには、どの名前のテンプレートがどんな役割を持っているか・どんな優先順位になっているかや、主要な関数や使い方を覚えたうえで、HTMLに組み込んでいく必要があります。

たくさんのテンプレートや関数がありますが、必要最低限はindex.phpとstyle.cssですので、まずは最小構成のテーマから徐々に作り始めていけば良いかと思います。

 

以下に本記事で紹介したテンプレートと関数を再掲しますのでご参考ください。

■主要なWordPressのテンプレート役割

テンプレートファイル名 概要
index.php WordPress必須のテンプレート。他に優先順位の高いテンプレートがないときに最終的に適用される汎用テンプレート
page.php 固定ページ用のテンプレート
single.php 投稿用のテンプレート
archive.php アーカイブ用のテンプレート
category.php カテゴリーページのテンプレート
front-page.php トップページ用のテンプレート
home.php トップページ・投稿一覧用のテンプレート 
※front-page.phpが存在せず設定>表示設定でフロントページに「最新の投稿」が設定されているときにトップページに適用される
※設定>表示設定で投稿一覧に固定ページが設定されているときに投稿一覧ページとして適用される
search.php 検索結果ページ用のテンプレート

 

■主要なWordPress独自の関数

項目 内容
ループ WordPressの投稿の中身を表示するために使われるWordPress用の構文(メインループ)です。以下のような形でセットで使われます。

参考:The Loop – Theme Handbook | Developer.WordPress.org

参考:have_posts() – Function | Developer.WordPress.org

参考:the_post() – Function | Developer.WordPress.org

the_title() 投稿や固定ページのタイトルを表示します。whileループの中で使用します。

参考:the_title() – Function | Developer.WordPress.org

the_content() 投稿や固定ページの本文を出力します。 whileループの中で使用します。

参考:the_content() – Function | Developer.WordPress.org

get_the_date() 日付を出力する関数。whileループ内で使用します。
the_category() カテゴリー情報一覧を出力する関数。whileループ内で使用します。
the_post_thumbnail() アイキャッチ画像を表示する関数。whileループ内で使用します。
get_permalink() 記事のパーマリンク(URL)を出力する関数。whileループ内で使用します。
the_search_query() 検索されたキーワードを出力する関数。
wp_nav_menu() 外観>メニューで設定されたナビゲーションメニューを出力する関数。

 

これまで紹介した方法は、初学習用にある程度簡略化しています。実運用上を考えると、もう少し作り込んでいくべき箇所もあります。

より本格的に勉強したい方は本などを購入して勉強してみると良いかと思います。

今回は以上になります。最後までお読みいただきありがとうございました。

 

「業者に任せたけど、更新ができない」「本で独学は時間がかかりすぎる・・」そんなお悩みの方も多いのではないでしょうか。

個別指導形式のスクールでは、自分の知りたいことをピンポイントで学習・達成でき、自分で更新もできるというメリットもあります。

教室の無料事前相談もしておりますので、まずはお気軽にご登録ください。

詳細はこちら

YouTubeチャンネル開設しました!

WEBST8 YouTube Channel 開設
最大月間50万PVの当ブログをベースに、Youtube動画配信にてWordPress、ホームページ作成、ブログのことについてお役立ち情報を随時配信していきます。

ご興味ある方はぜひチャンネル登録をしていただけますと幸いです。

検索して記事を見つける

探したいキーワードを入力・検索して記事を見つけたい方はこちら

-WordPress
-