概要と目標
テーマ開発の基本を知り、
オリジナルテーマを反映させよう。
いよいよ、WordPressのオリジナルテーマを作成していく。
まずは、テーマ制作の基本学習しましょう。
いよいよ、WordPressのオリジナルテーマを作成していく。
まずは、テーマ制作の基本学習しましょう。
今回は、WordPressのテーマ開発部分に焦点を合わせるため、
HTML + CSS + JSによるコーディングはすでに完成している状態から始める。
コーディングデータは、「wordpress-lessons」 の中の 「dummy-html」フォルダにある。
WordPressは様々ファイルから構成されている。
基本的には「wp-content」フォルダ内以外触ることはない。
WordPressでテーマやプラグインの開発を行う際、エラーが発生すると画面が真っ白になる。
デバッグモードを有効化することで、エラーが表示されるようになる。
define('WP_DEBUG', true);
/* 編集が必要なのはここまでです ! WordPress でのパブリッシングをお楽しみください。 */
WordPressのテーマは、「wp-content」内の「themes」フォルダに配置する。
なお、テーマには最低限「index.php」と「style.css」が必要となる。
「themes」フォルダ内に必要なファイルを配置したら、
管理画面からテーマを有効化できる。
スタイルが全く効いていないが問題ない。
WordPressにおいて「style.css」は単なるCSSファイルではない。
CSSを書くだけではなく、正しくテーマを認識されるために必須なファイルになっている。
なお、「style.css」は、テーマフォルダの直下に配置する必要がある。
「style.css」の冒頭にコメントを記述することで、
テーマの詳細画面でテーマの情報を表示させることができる。
| 項目 | 説明 |
|---|---|
| Theme Name | テーマ名 |
| Theme URI | テーマの詳細情報が書かれているURL |
| Author | テーマの開発者名や組織名 |
| Author URI | 開発者や組織のURL |
| Description | テーマの簡単な説明 |
| Version | バージョン |
| License | テーマのライセンス |
| License URI | ライセンスのURL |
| Text Domain | 翻訳用のテキストドメイン |
| Tags | テーマを検索するためのタグ |
@charset "UTF-8";
/*
Theme Name: Dummy
Author: Shibata Hironori
Description: WordPressの授業で使うサンプルテーマ
Version: 1.0
Text Domain: dummy
*/
これからテーマ開発を行うにあたり必要な「画像ファイル」、「JSファイル」をコピーしたり、
テーマ開発に欠かせない「functions.php」を作成しておく。
まずは、画像ファイル、JSファイルなどをテーマフォルダ内コピーする。
「functions.php」は、テーマで使うPHPの関数をまとめて管理するためのファイルで、
自動的に読み込まれる。(管理画面も)
この「functions.php」を使って、コアファルを触らずに、
デフォルトの動作を変更したり、機能を追加したりする。
<?php
echo 'Hello WordPress';
<?php
テーマを作成するときは、「function.php」にコンテンツの最大幅を設定する
コンテンツ幅は、「$content_width」という変数に代入する。
この幅は、プラグインや埋め込みコンテンツや投稿内の画像などといったあらゆるところで使われる。
今回用意したデザインは、記事の投稿エリアのコンテンツ幅は「776px」のため、
「$content_width」に776を代入する。
<?php
/*======================================
コンテンツ幅
======================================*/
if ( !isset( $content_width ) ) {
$content_width = 776;
}
<title>タグは、<head>タグ内に直接記述することも出来るが、
テーマサポートという機能使って出力することもできる。
今回は、「functions.php」にテーマサポートによるタイトルを出力する記述を行う。
その際、初期設定用の独自関数を作成し、テーマが読み込まれた時に実行するように設定する。
「functions.php」に「dummy_setup」という独自関数を作って、
そこに、add_theme_support()関数で、タイトルタグを出力する命令を記述する。
add_theme_support関数 ・・・ テーマやプラグインが特定のテーマ機能をサポートすることを許可する関数add_theme_support(追加する機能, オプション)
省略可
オプション ・・・ オプションを配列形式で指定指定。省略時は「true」となる。
引数の詳細はWordPress Codex 日本語版を参照
<?php
/*======================================
コンテンツ幅
======================================*/
if ( ! isset( $content_width ) ) {
$content_width = 776;
}
/*======================================
初期設定
======================================*/
function dummy_setup() {
/*
Titleタグ
----------------------------------- */
add_theme_support( 'title-tag' );
}
先程の「dummy_setup」という独自関数は、処理を登録しただけで実行はしていない。
WordPressでは、「フック」という仕組みを使って、
任意のタイミングで処理を実行させることができる。
今回は「after_setup_theme」という、テーマが読み込まれた後に実行するというフックを使う。
add_action関数 ・・・ テーマやプラグインが特定のテーマ機能をサポートすることを許可する関数add_action(実行タイミングのフック名, 実行する関数名)
引数の詳細はWordPress Codex 日本語版を参照
<?php
/*======================================
コンテンツ幅
======================================*/
if ( ! isset( $content_width ) ) {
$content_width = 776;
}
/*======================================
初期設定
======================================*/
function dummy_setup() {
/*
Titleタグ
----------------------------------- */
add_theme_support( 'title-tag' );
}
add_action( 'after_setup_theme', 'dummy_setup' );
<head>要素内を操作できないので、まだ何も変更されていない。add_action()を、フィルターフックの場合は、add_filter()で、関数を登録する。テーマを作る場合は、<head>タグ内に、wp_head()関数を、</body>タグの手前に、wp_footer()関数を配置する。
これにより、WordPress本体やプラグインなどが、metaタグや、スクリプト、スタイルを
要素内に追加することが出来る。
wp_head()とwp_footer()をまずは、画像ファイル、JSファイルなどをテーマフォルダ内コピーする。
<title>要素を削除して、wp_head()関数を記述する
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<?php wp_head(); ?>
<link rel="stylesheet" href="assets/css/common.css">
<link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Noto+Sans+JP:400,700|Quicksand:400,700&display=swap&subset=japanese">
</head>
<body>
</body>の手前に、wp_footer()関数を記述する
</footer>
<script src="http://code.jquery.com/jquery-1.12.4.min.js" integrity="sha256-ZosEbRLbNQzLpnKIkEdrPv7lOy9C27hHQ+Xp8a4MxAQ=" crossorigin="anonymous"></script>
<script src="assets/js/app.js"></script>
<?php wp_footer(); ?>
</body>
</html>
現在スタイルが適用されなくなった理由は、CSSファイルへのパスが成立していないことが原因。
相対パスは現在アクセスしているページからのパスなので、
現在は「wp-lesson/assets/css/common.css」を参照していることになる。
しかし、その場所にCSSファイルが無いためスタイルが適用されていない。
かといって、絶対パスに変更しても、ローカル環境と本番環境ではURLが異なるので、
メンテンス性が低下する。
そこで、WordPressでは、テーマで使用するCSSファイルを安全に追加する関数があるため、
その関数を使いCSSファイルを追加し、スタイルを適用させる方がよい。
今回のテーマでは、テーマ直下に配した「style.css」ではなく、「assets」 ›「css」 フォルダにある、「common.css」を適用させたい。
そこで、wp_enqueue_style()関数を使って、「common.css」を追加する。
なお、テーマフォルダまでのパスはURLを直接記述することは避けて、 get_theme_file_uri()関数を使って、パスを取得する。
wp_enqueue_style 関数 ・・・ WordPressが生成したページに CSSファイルを安全に (キューへ)追加する関数wp_enqueue_style(ハンドル名, ファイルパス, このCSSファイルより前に読み込まれる必要があるCSSファイルの配列, バージョン番号, メディア媒体)
省略可
メディア媒体 ・・・ 'all'、'screen'、'handheld'、'print' など
引数の詳細はWordPress Codex 日本語版を参照
get_theme_file_uri関数 ・・・ 有効化しているテーマフォルダのURIを取得する関数get_theme_file_uri(ファイルパス)
省略可
引数の詳細はWordPress Developer Resourcesを参照
/*======================================
初期設定
======================================*/
function dummy_setup() {
/*
Titleタグ
----------------------------------- */
add_theme_support( 'title-tag' );
}
add_action( 'after_setup_theme', 'dummy_setup' );
/*======================================
スタイルの追加
======================================*/
function dummy_scripts() {
wp_enqueue_style( 'dummy-common', get_theme_file_uri() .'/assets/css/common.css' );
wp_enqueue_style( 'google-font', 'https://fonts.googleapis.com/css?family=Noto+Sans+JP:400,700|Quicksand:400,700&display=swap&subset=japanese' );
}
add_action( 'wp_enqueue_scripts', 'dummy_scripts' );
<link>要素を削除する
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<?php wp_head(); ?>
</head>
<body>
get_stylesheet_uri()という関数で、「style.css」ファイルのURLを取得できる。
function dummy_scripts() {
wp_enqueue_style( 'dummy-style', get_stylesheet_uri() );
}
add_action( 'wp_enqueue_scripts', 'dummy_scripts' );
現在JavaScriptもスタイルと同様の理由で適用されていない。
従って、スクリプトを適用させるにも「functions.php」でJSファイルを追加する必要がある。
今回は、「assets」 ›「js」 フォルダにある、「app.js」を適用させたい。
そこで、wp_enqueue_script()を使って、app.jsを追加する。
wp_enqueue_script 関数 ・・・ WordPressが生成したページに JavaScript を追加する関数wp_enqueue_script(ハンドル名, ファイルパス, このJSファイルより前に読み込まれる必要があるJSファイルの配列, バージョン番号, </body>の手間で読み込むか?)
省略可
</body>の手間で読み込むか? ・・・ true(</body>の手間で読み込む) / false(</head>要素内で読み込む)【初期値】
引数の詳細はWordPress Codex 日本語版を参照
/*======================================
初期設定
======================================*/
function dummy_setup() {
/*
Titleタグ
----------------------------------- */
add_theme_support( 'title-tag' );
}
add_action( 'after_setup_theme', 'dummy_setup' );
/*======================================
スタイル・スクリプトの追加
======================================*/
function dummy_scripts() {
/*
CSS
----------------------------------- */
wp_enqueue_style( 'dummy-common', get_theme_file_uri() .'/assets/css/common.css' );
wp_enqueue_style( 'google-font', 'https://fonts.googleapis.com/css?family=Noto+Sans+JP:400,700|Quicksand:400,700&display=swap&subset=japanese' );
/*
JS
----------------------------------- */
wp_enqueue_script( 'dummy-app', get_theme_file_uri() .'/assets/js/app.js', ['jquery'], '1.0.0', true );
}
add_action( 'wp_enqueue_scripts', 'dummy_scripts' );
<script>要素を削除する
</footer>
<?php wp_footer(); ?>
</body>
</html>
<head>要素内に、jQuery本体が、</body>の手前付近に「app.js」が読み込まれていることを確認。
WordPressのデフォルトで用意されているjQueryは、「no-conflict」モードで読み込まれているため「$」が使えない。
そこで、「no-conflict」モードでも「$」が使えるようにコードを修正する。
$(function() {})の「$」を「jQuery」に変更し、引数に「$」を渡せばよい。
jQuery(function ($) {
/* ==============================
Drawer
============================== */
$('.js-drawer').click(function () {
$('body').toggleClass('is-drawerActive');
if ($(this).attr('aria-expanded') == 'false') {
$(this).attr('aria-expanded', true);
} else {
$(this).attr('aria-expanded', false);
}
});
})
wp_deregister_script()という関数を使って登録解除し、
自分で用意したjQueryを wp_register_script()という関数で登録する必要がある。function dummy_scripts() {
// 登録解除
wp_deregister_script('jquery');
// 登録
wp_register_script( 'jquery', 'http://code.jquery.com/jquery-1.12.4.min.js', [], '1.12.4', true );
wp_enqueue_script( 'dummy-app', get_theme_file_uri() .'/assets/js/app.js', ['jquery'], '1.0.0', true );
}
add_action( 'wp_enqueue_scripts', 'dummy_scripts' );
WordPressのテーマには、必要なファイルが存在する。
テーマの情報を「style.css」に書いたり、「functions.php」に機能に関する処理を書いたりする。
wp_head() やwp_footerは忘れずに