WordPressのオリジナルテーマに必要なfunctions.phpの作成

目的

  • WordPressテーマに functions.php を追加し、基本的な機能を有効化する
  • CSS/JSファイルの読み込み を WordPressの正しい方法で行う
  • サイトカラーやアイキャッチ(投稿サムネイル)など、カスタマイズの基本設定を加える

functions.php をテーマフォルダに作成

unnhanbur フォルダ直下に functions.php というファイルを作成します。

functions.php は、テーマフォルダ直下に配置します。

  • 例)/wp-content/themes/unnhanbur/functions.php

ファイル名は必ず functions.php(スペルミスや拡張子間違いに注意!)

functions.phpとは?

functions.php は、WordPressテーマ専用の設定ファイルで、テーマに機能や命令(PHPの処理)を追加したいときに使います。

HTMLで言うと「設定をまとめて書く場所」、CSSで言うと「共通スタイルを定義する場所」と似ています。

主な用途内容
CSSやJSの読み込みwp_enqueue_style()wp_enqueue_script() を使ってファイルを読み込む
アイキャッチの有効化投稿・固定ページで画像を設定できるようにする
カスタムメニューの登録ヘッダーやフッターのナビゲーションを管理画面から操作できるようにする
サイトカラー・ロゴ設定テーマカスタマイザーで色やロゴを切り替え可能にする
独自関数の作成自作の便利な関数を追加できる(上級者向け)

functions.phpはページに直接表示されるわけではない

HTMLやPHPテンプレート(index.php, page.php など)と違って、functions.php に書かれた内容は画面には直接表示されません

  • 裏側でWordPress本体と連携し、機能を追加していると思ってください。
  • JavaScriptで言うと「イベントを設定しているjsファイル」のようなイメージです。
Webtraining - Webトレは、 初心...
PHPでユーザー定義関数を作ってみよう | Webtraining - Webトレは、 初心者から実務までのWeb学習トレーニ... 📁 作成ファイル・保存場所 XAMPPがインストールされているhtdocs フォルダに以下のファイルを作成してください。 ファイル名内容htdocs/php-basic/07.phpPHPとHTML XAMPP...

よく使う functions.php の記述パターン

目的関数の書き方(例)実行タイミング(add_action の第1引数)
CSS/JSを読み込むfunction unnhanbur_enqueue_assets() { ... }'wp_enqueue_scripts'
アイキャッチ画像を有効化function unnhanbur_setup_theme() { add_theme_support('post-thumbnails'); }'after_setup_theme'
メニューを登録function unnhanbur_register_menus() { register_nav_menu(...); }'after_setup_theme'
ウィジェットエリアを作るfunction unnhanbur_widgets_init() { register_sidebar(...); }'widgets_init'
管理画面用のCSS/JSを読み込むfunction unnhanbur_admin_custom() { ... }'admin_enqueue_scripts'
<title>タグを出力するadd_theme_support('title-tag'); を含む関数'after_setup_theme'

コード例を見てみよう

// CSSとJSの読み込み
function unnhanbur_enqueue_assets() {
  wp_enqueue_style('theme-style', get_stylesheet_uri());
}
add_action('wp_enqueue_scripts', 'unnhanbur_enqueue_assets');

// アイキャッチを有効にする
function unnhanbur_setup_theme() {
  add_theme_support('post-thumbnails');
}
add_action('after_setup_theme', 'unnhanbur_setup_theme');

補足:フックとは?

  • 'wp_enqueue_scripts''after_setup_theme' などは、WordPressが「ここで処理を追加してね」と用意しているフック(Hook)
  • これに対して、自分の関数を add_action() で登録しておくことで、決まったタイミングに実行されます

css/jsファイルの読み込み

作成したfunctions.phpに下記のコードを貼り付けておきましょう。

<?php
// ==============================
// CSSとJavaScriptの読み込み
// ==============================
function unnhanbur_enqueue_assets() {
  // ------------------------------
  // ▼ CSSの読み込み
  // ------------------------------

  // Google Fonts(外部フォント)を読み込み
  wp_enqueue_style(
    'google-fonts',
    'https://fonts.googleapis.com/css2?family=Anonymous+Pro:wght@400;700&family=Caveat:wght@500&display=swap',
    false
  );

  // リセットCSS(ブラウザ差をなくすための初期化CSS)
  wp_enqueue_style(
    'reset-style',
    get_template_directory_uri() . '/css/reset.css',
    array(), // 依存なし
    '1.0'    // バージョン
  );

  // メニュー用のスタイル
  wp_enqueue_style(
    'menu-style',
    get_template_directory_uri() . '/css/menu.css',
    array(),
    '1.0'
  );

  // カスタムスタイル(自作のCSS)
  wp_enqueue_style(
    'custom-style',
    get_template_directory_uri() . '/css/custom.css',
    array(),
    '1.0'
  );

  // テーマのメインスタイル(style.css)
  wp_enqueue_style(
    'theme-style',
    get_stylesheet_uri(),
    array(),
    '1.0'
  );

  // ------------------------------
  // ▼ JavaScriptの読み込み
  // ------------------------------

  // 自作のJavaScriptファイル(フッターで読み込み:true)
  wp_enqueue_script(
    'custom-js',
    get_template_directory_uri() . '/js/custom.js',
    array(), // 依存なし
    '1.0',
    true     // フッターで読み込む
  );
}

// WordPressのフックに登録(wp_enqueue_scriptsというタイミングで上記を実行)
add_action('wp_enqueue_scripts', 'unnhanbur_enqueue_assets');

wp_enqueue_style() とは?(ダブリューピー・エンキュー・スタイル)

CSSファイルをWordPressに「読み込んで」と伝える関数です。

wp_enqueue_style(ハンドル名, CSSファイルのURL, 依存関係, バージョン, メディア);

そのためjavascriptの時は、wp_enqueue_scriptとなります。

header.phpの修正

functions.phpでwp_enqueue_style('theme-style', get_stylesheet_uri(), array(), '1.0');を記述しましたので、header.phpのcssやscriptの読み込みコードは削除しておきましょう。

なぜfunctions.phpで記述するの? header.php に <link> で直接書く方法は、古いやり方で、手動で書いたCSSしか読み込まれず、WordPressが提供する自動処理や依存管理が使えませんので、修正しておきましょう。

テーマの基本機能を有効化

次に下記のコードをfunctions.phpに追加で貼り付けます。

// ==============================
// テーマの初期設定
// ==============================
function unnhanbur_setup_theme() {
  // ------------------------------
  // ▼ 投稿にアイキャッチ画像(サムネイル)を使えるようにする
  // ------------------------------
  add_theme_support('post-thumbnails');

  // ------------------------------
  // ▼ カスタムロゴを有効化
  // 管理画面からロゴをアップロードして表示可能になる(必要な場合)
  // ------------------------------
  add_theme_support('custom-logo');

  // ------------------------------
  // ▼ HTML5マークアップに対応
  // 例:検索フォーム・ギャラリー・キャプションなどの出力をHTML5形式に
  // ------------------------------
  add_theme_support('html5', array('search-form', 'gallery', 'caption'));

  // ------------------------------
  // ▼ titleタグをWordPressに自動で出力させる
  // <title>〜</title> を header.php に書かなくてもOKになる
  // ------------------------------
  add_theme_support('title-tag');
}

// after_setup_theme アクションでテーマ設定を登録
add_action('after_setup_theme', 'unnhanbur_setup_theme');

add_theme_support() 関数とは?

テーマに「この機能を使えるようにして」と伝える関数です。

WordPressには、使いたい機能(アイキャッチ・カスタムロゴなど)を自分で“有効化”しないと使えない仕組みがあります。
そのため、functions.phpadd_theme_support() を書いて、「このテーマはこの機能に対応している」と宣言する必要があります。

各設定の意味まとめ

機能名説明
post-thumbnails投稿・固定ページで「アイキャッチ画像(サムネイル)」を使えるようにする
custom-logoWordPressの「外観 > カスタマイズ」からロゴ画像を設定できるようにする
html5HTML5形式での出力に対応。構造がきれいになり、アクセシビリティやSEOに有利
title-tag<title> を自動出力。header.phpに手動で書く必要がなくなる

:root を基にした WordPress カラーパレット登録

ブロックエディター(Gutenberg)で編集する場合、テーマカラーを統一したい(編集者に自由に色を選ばせたくない場合)に、カラーパレットを設定しておきます。

function unnhanbur_setup_theme() {最後に下記を追加します。

  // ...既存の add_theme_support()の下に下記を追加

  // Gutenberg カラーパレット登録
  add_theme_support('editor-color-palette', array(
    array(
      'name'  => __('Primary', 'unnhanbur'),
      'slug'  => 'primary',
      'color' => '#570B0B',
    ),
    array(
      'name'  => __('Primary Hover', 'unnhanbur'),
      'slug'  => 'primary-hover',
      'color' => '#F11E1E',
    ),
    array(
      'name'  => __('Background Primary', 'unnhanbur'),
      'slug'  => 'bk-primary',
      'color' => '#ffffff',
    ),
    array(
      'name'  => __('Background Secondary', 'unnhanbur'),
      'slug'  => 'bk-secondary',
      'color' => '#F5F5F5',
    ),
    array(
      'name'  => __('Text Default', 'unnhanbur'),
      'slug'  => 'text-default',
      'color' => '#1d1d1d',
    ),
    array(
      'name'  => __('Text Secondary', 'unnhanbur'),
      'slug'  => 'text-secondary',
      'color' => '#00000080',
    ),
    array(
      'name'  => __('Line Default', 'unnhanbur'),
      'slug'  => 'line-default',
      'color' => '#0000001A',
    ),
    array(
      'name'  => __('Pink', 'unnhanbur'),
      'slug'  => 'pink',
      'color' => '#f184846b',
    ),
    array(
      'name'  => __('Gray', 'unnhanbur'),
      'slug'  => 'gray',
      'color' => '#5c5c5c',
    ),
    array(
      'name'  => __('Light Gray', 'unnhanbur'),
      'slug'  => 'lightgray',
      'color' => '#ddd',
    ),
    array(
      'name'  => __('Dark Gray', 'unnhanbur'),
      'slug'  => 'darkgray',
      'color' => '#ababab',
    ),
  ));

対応する CSS クラスを併せて書くとさらに便利

WordPressブロックエディターでは、スラッグ(例:primary)が以下のようなクラス名になります。custom.cssに追加しておきましょう。

.has-primary-background-color {
  background-color: var(--primary);
}
.has-primary-color {
  color: var(--primary);
}

.has-text-secondary-color {
  color: var(--text-secondary);
}

カラーパレットと CSS 変数を一致させることで、Gutenberg でもフロントでも色の整合性を保てます。

色以外(フォントなど)のカスタム設定もできます

:root にはフォント変数もある場合は、以下も function unnhanbur_setup_theme() { に追記可能です

add_theme_support('editor-font-sizes', array(
  array(
    'name' => __('Small', 'unnhanbur'),
    'slug' => 'small',
    'size' => 14,
  ),
  array(
    'name' => __('Medium', 'unnhanbur'),
    'slug' => 'medium',
    'size' => 18,
  ),
  array(
    'name' => __('Large', 'unnhanbur'),
    'slug' => 'large',
    'size' => 24,
  ),
  array(
    'name' => __('Title', 'unnhanbur'),
    'slug' => 'title',
    'size' => 36,
  ),
));