1 of 21

WordPressの

オリジナルテーマを作る!

WordPressの仕組みを理解することによってオリジナルテーマ作成をもっと身近に

2 of 21

テーマを作成する上での最小構成

WordPressのテーマを作るうえでの最小構成は、テーマディレクトリを作成してstyle.css、index.php

下記に任意の名前のディレクトリとファイルを設置

​

wp-content/themes/任意のディレクトリ名

wp-content/themes/任意のディレクトリ名/index.php

wp-content/themes/任意のディレクトリ名/style.css

​

※当然ですが、任意のディレクトリ名は半角英数字

​

この二つをまずは設置。

style.cssに必要なテーマの情報を記入してアップすれば

管理画面の外観メニューに反映される。

​

3 of 21

テーマを作成する上での最小構成

style.cssに記述する情報

/*

Theme Name: SampleTheme

Author: SampleUser

Author URI: http://●●●.com

Description: サンプルのテーマ

*/

Theme Name: テーマの名称(必須です)

Author: テーマの作成者(任意)

Author URI: ブログのURL(任意)

Description: テーマの説明(任意)

​

上記の記述情報が、管理画面の「外観」メニューに反映される。

これで管理画面からテーマの選択が可能になります。

4 of 21

テーマ内のindex.phpの扱い

テーマ内のテンプレートは使用される状況に応じて優先順位が決まっている。

index.phpは一番優先順位が低く、必要に応じたテンプレートが無い場合最終的にはindex.phpが表示される

​

つまり、意図せずindex.phpが表示されるときは「テンプレートが不足している時」となる。

しかしながら表面上使用されているテンプレートが分からない。なのでindex.phpに

自分で分かるようにあたりさわりのない表示にしておく方法もある。

(使用しているテンプレートを表示するプラグインもあります。)

​

例えば、「<?php echo ‘index’;」と入れておけば、

ページが表示されているときに「index」とだけ表示さたら、

テンプレートが不足している事がすぐに分かる。

5 of 21

テーマ内のindex.phpの扱い

トップページ用のテンプレートは

​

index.php

優先順位一番低い

​

home.php

管理画面の表示設定の「フロントページ」で選択されている固定ページが優先的に表示される

​

front-page.php

管理者画面の表示設定の「フロントページ」で何を選択していても影響を受けない

​

全て存在するときの優先順位は下記

index.php < home.php < front-page.php

​

※納品後の運用ポリシーなどによって使い分ける。

6 of 21

今一度テンプレートの優先順位について

たとえば、固定ページを表示させるときに、一般的にはpage.phpというテンプレートを使いますが、管理画面でスラッグが登録してあったら、「page-slug.php」というテンプレートを優先して表示させます。

​

つまり、WordPressはスラッグ登録してある固定ページを表示させる際、まず、「page-slug.php」を探しにいき、それが見つからなかったら「page.php」を探しにいき、それが見つからなかったら「index.php」を探しに行って表示させるという事を内部的にしているのです。

​

・固定ページ表示時のテンプレート優先順位

page-slug.php > page.php > index.php

​

もしindex.phpが表示されていたら、それはその状況に必要なテンプレートが不足しているという事です。

7 of 21

テーマでよく使うテンプレート、他ファイル

front-page.php //トップページ

page.php //固定ページのベーステンプレート

archive.php //投稿記事アーカイブ一覧ページ用

category.php //投稿記事カテゴリー一覧ページ用

search.php //検索結果を表示するテンプレート

single.php //投稿記事の詳細用ベーステンプレート

404.php //404エラー時に使用

index.php //基本テンプレート

​

header.php //ヘッダー用

sidebar.php //サイドバー用

footer.php //フッター用

style.css //テーマの基本情報とスタイル記述に使う(スタイルは別でも可)

screenshot.jpg //管理画面「外観」のテーマ一覧でテーマのサムネイルに使用

functions.php //独自に機能追加したり、設定を追加するためのファイル

ページ用テンプレート

パーツ用テンプレート

breadcrumb.php //パンクズ用

​

任意パーツ用テンプレート

その他ファイル

上記以外にも多数テンプレートがあるので、サイトの構造に応じて追加や削除をして必要最小限のテンプレートを使用する。※不要なテンプレートがあるとメンテナンス時に支障をきたす。

8 of 21

テーマでよく使うテンプレート、他ファイル

​

テンプレート

用途

ページ用テンプレート

front-page.php

トップページ

page.php

固定ページのベーステンプレート

archive.php

投稿記事アーカイブ一覧ページ用

category.php

投稿記事カテゴリー一覧ページ用

search.php

検索結果を表示するテンプレート

single.php

投稿記事の詳細用ベーステンプレート

404.php

404エラー時に使用

index.php

基本テンプレート

パーツ用テンプレート

header.php

ヘッダー用

sidebar.php

サイドバー用

footer.php

フッター用

任意パーツテンプレート

任意の名前.php

任意の名前でテンプレートを作成し、get_template_part('任意の名前');で呼び出す

その他ファイル

style.css

テーマの基本情報とスタイル記述に使う(スタイルは別でも可)

screenshot.png

管理画面「外観」のテーマ一覧でテーマのサムネイルに使用(jpg/jpeg/gifも使える)

functions.php

独自に機能追加したり、設定を追加するためのファイル

9 of 21

各テンプレートに情報を落とし込んでいく

<?php get_header(); ?>

<?php get_footer(); ?>

header.php

footer.php

<?php get_sidebar(); ?>

ヘッダー用

フッター用

ページ用のテンプレート

sidebar.php

サイドバー用

共通で使うソースはパーツごとにテンプレートに記述して必要に応じて読み込む。

パーツ用のテンプレート(共通部分)

ページ用のテンプレートにパーツのテンプレートをテンプレートタグ(get_header()など)で読み込む。(テンプレートタグ=WordPress独自の関数)

コンテンツ

コンテンツ

10 of 21

各テンプレートに情報を落とし込んでいく

<?php get_template_part('〇〇〇'); ?>

〇〇〇.php

任意のパーツ

ページ用のテンプレート

パーツの専用テンプレートがWordPressに無い場合は、任意でテンプレートを作成して読み込む。

WordPressには様々なテンプレートがあらかじめ用意されていますが、制作者が必要と思ったテンプレートが必ずしもあるわけではありません。もし、必要なテンプレートがWordPressに用意されてなかったら自身で任意の名前を付けて作成して使用することもできます。

​

パーツ用のテンプレート

11 of 21

多用するWordPress内の分岐

上記はテンプレートがトップページなのかそうでないのかの分岐を表しています。

左右で記述方法は異なりますが、どちらも意味合いは同じです。

左はシンプルですっきりしてますが、分岐内に大量のHTMLを記述するとなると中身に大量のechoを記述する必要があるので、その場合は左の記述の方が適しています。どちらかに統一したいところですが、どちらも利点があるので状況に応じて使い分けています。※メンテナンス性など考慮

<?php

if ( is_front_page() ) {

//トップページ用の記述

} else {

//トップページ以外の記述

}

?>

<?php if(is_front_page()): //Top ?>

//トップページ用の記述

<?php else: //その他 ?>

//トップページ以外の記述

<?php endif; //end// ?>

もしくは

12 of 21

多用するWordPress内の分岐

その他、ページ判別するテンプレートタグを使って細かく情報を出し分けることが出来る

if(is_404()) { //404

echo '<li>ページが見つかりません</li>';

} elseif((is_page('news'))) {

echo '<li>お知らせ</li>';

} elseif((is_single())) {

echo '<li><a href="'.home_url('/').'news/">お知らせ</a></li><li>',the_title(),'</li>';

} else {

echo '<li>', get_the_title(), '</li>';

}

​

13 of 21

固定ページで管理画面からの情報を取得

管理画面>固定ページからページを作成してエディタに入力した情報を固定ページ用のテンプレート(page.php)で取得する方法

page.phpには管理画面の入力情報がデフォルトで読み込まれ。

を各テンプレートによってデフォルトで読み込まれる情報が決まっておりそれを「メインループ」という。

※category.phpにはデフォルトでカテゴリ一覧の情報が読み込まれる。

​

メインループとは別に任意の情報を読み込んで表示させることを「サブループ」という

例)WP_Query()

​

14 of 21

サブループ、WP_Query()の例

WP_Query($argsなど)で指定するパラメーターは多数ある。

少し複雑な読み込みになるとパラメーターを複数絡める必要が出てくる。

https://sole-color-blog.com/blog/265/

15 of 21

推奨、非推奨

WordPressで使用できる関数をテンプレートタグと呼ぶ

テンプレートタグには現在では使用を推奨できない、非推奨タグが存在する。

非推奨タグは開発サポートされないので、今は使えてもバージョンアップなどで将来的に使えなくなるなど不具合を起こす可能性がある

​

例)query_posts

​

WordPressの情報はネット上には膨大にあるが、情報が古いかもしれない。

記事作成者が誤った解釈をしているかもしれないという事も考慮する。

​

16 of 21

使用頻度の多いテンプレートタグ

<?php echo get_template_directory_uri(); ?> //テーマのルートパス

<?php echo home_url('/'); ?>"> //サイトのルートパス

<?php bloginfo('name'); ?> //ブログ名(サイト名)

<?php echo get_the_title(); ?> //記事タイトル

<?php the_title(); ?> //記事タイトル

<?php the_time('Y.m.d'); ?> //記事日付

​

※the_title()は呼び出された時点でechoまで行っているので注意。

※<?php echo the_title(); ?>などといった記述をすると不具合をおこします。

​

レスポンシブWebデザインで使える分岐

​

<?php if ( function_exists('wp_is_mobile') && wp_is_mobile() ) :?>

スマートフォン用コンテンツを配置。

<?php else: ?>

パソコン用コンテンツを配置。

<?php endif; ?>

​

17 of 21

functions.phpで行う設定

■rssフィードの削除

■generatorを非表示にする

■EditURIを非表示にする

■wlwmanifestを非表示にする

■管理画面メニュー表示設定

■固定ページのビジュアル切り替えを非表示

■絵文字機能削除

■カスタム投稿タイプ・カスタム分類

■画像サイズの追加

etc...

管理画面のメニューの制御やカスタム投稿タイプの設定、その他独自の機能をfunctions.phpに記述する。

案件の仕様によって行う設定は変わる。不必要な機能は行わないように設定しコードの表示をスマートに。バージョンの非表示などは、セキュリティの観点から非表示にするなど。

18 of 21

カスタムフィールドを使う

通常テキスト

​

例)<?php echo $post->カスタムフィールド名; ?>

​

↓

​

さらに詳しく

<?php

if( $post->カスタムフィールド名 ) {

echo '<p>' . esc_html($post->カスタムフィールド名) . '</p>';

}

?>

​

もし値が無くてもエラーにならないように分岐をいれておく。

必要に応じてesc_htmlなどエスケープを使う。

19 of 21

パーマリンク設定

管理画面のパーマリンク設定はデフォルトでは「基本」となっている。固定ページなどページ各ページのURLは

​

http://example.jp/?p=123

​

と表示される。

​

URLにディレクトリ名を使用したように見せるためにはパーマリンク設定で「カスタム構造」を選択して入力欄に設定を入力

​

例)http://example.jp「/%category%/%post_id%/」

スラッグ名でディレクトリ構造のようなURLを作り、投稿記事のURLも記事IDを使う設定

​

※設定によっては投稿のカテゴリー名、スラッグをしっかり設定する

20 of 21

便利なプラグイン

オリジナルでテーマを作成するときに便利なプラグインの紹介

■Show Current Template

​

インストールして有効にするだけで、ログイン中は公開画面側の管理バーで使用しているテンプレートを表示してくれるので、作業するときにどのテンプレートを触ればいいのかすぐにわかる。

​

■Advanced Custom Fields

​

カスタムフィールドの設定が劇的に簡単になるカスタムフィールド設定の決定版プラグイン

​

■Custom Post Type Permalinks

​

カスタム投稿タイプを作成したときにカスタム投稿別にパーマリンクの設定が出来る。

21 of 21

ページごとのテンプレート設定(例)

NO.

第一階層

第二階層

第三階層

第四階層

ディレクトリ名

仕様

テンプレート

1

トップ

​

​

​

/

トップ

front-page.php

2

​

ニュース

​

​

news

投稿一覧

archive.php

3

​

​

お知らせ

​

info

お知らせカテゴリ一覧

category.php

4

​

​

​

記事詳細

id

記事詳細

single.php

5

​

​

採用情報

​

recruit

採用情報カテゴリ一覧

category.php

6

​

​

​

記事詳細

id

記事詳細

single.php

7

​

会社概要

​

​

summary

固定ページ

page.php

8

​

アクセス

​

​

access

固定ページ

page.php

9

​

お問い合わせ

​

​

contact

固定ページ

page.php

10

​

社員の声

​

​

voice

特設ページ

page-voice.php

11

​

サイトマップ

​

​

saitemap

固定ページ

page.php