【初心者向け】functions.phpにhead情報を入れる

いつも煩雑になりがちな`header.php`に記載している情報を、メンテナンス性を向上させる目的で`functions.php`に書くことを覚えたので、共有します。

他のテーマファイルについては、以下の記事で書いてますのでお時間ありましたら合わせてご覧ください。

:::note info
ファイルの構造や解説等、Wordpress（以下、WP）のテーマを自作する際の基本的な部分は、こちらの記事で紹介しています。
+ [【初心者向け】Wordpressテーマを自作する際に分かってると良いかもしれない事](
https://qiita.com/makkie/items/dc764c2845492079c0af)
+ `index.php`のコードを知りたいよって方はこちら
[【初心者向け】Wordpressテーマを自作する[index.php]](https://qiita.com/makkie/items/b5231a9f63b076c70af8)
+ `header.php`のコードを知りたいよって方はこちら
[【初心者向け】Wordpressテーマを自作する[header.php]](https://qiita.com/makkie/items/6d19ec0da990486ec6ab)
+ `footer.php`のコードを知りたいよって方はこちら
[【初心者向け】Wordpressテーマを自作する［footer.php］](https://qiita.com/makkie/items/65cd4be0e9c4ccbf7776)
:::

:::note alert
`functions.php`はWPの基本動作をカスタマイズするファイルのため、少しでも書き方を間違えると、サイト自体が表示されなくなったり、エラーが出たりします。
下記コードをコピペする時もそうですが、既存のコードが記載されている個所に追記する場合は画面が真っ白になったり、エラーが出ても慌てず、まず追記した箇所を削除して、何が悪かったのか、検証してください。

良くあるのだと、コードの先頭に`<?php`、末尾に`?>`の書き忘れ・ダブり、コピペしたコードが、WPから削除された関数（非推奨）を使用している、関数が競合している等です。
当然ですが、`functions.php`をカスタマイズする時は、いきなり本番環境に適用するのはやめましょう。
:::

毎度の、とりあえず解説はいいからコードだけ、の方は以下をどうぞ。
## コード
`functions.php`の`<?php`から`?>`の間に入れてください。
下記コードは、`CSS`5種類（reset.css含む）、`Webフォント`を3種類読み込んでいます。
```diff_php
//header読み込みファイル////////////////////////////////////////////////
function base_structure_style() {
    //Baseなので別読み込み
        wp_enqueue_style(
            'styleBase',
            get_template_directory_uri(). '/style.css',
            array(),
            '1.0.0'
        );
        wp_enqueue_style(
            'styleReset',
            get_template_directory_uri(). '/css/reset.css',
            array(),
            '1.0.0'
        );
    }
    add_action('wp_enqueue_scripts', 'base_structure_style');

    function add_link_files() {
        //StyleSheet
        wp_enqueue_style(
          'styleL',
          get_template_directory_uri(). '/css/style-large.css',
          array(),
          '1.0.0',
          'screen and (min-width: 1025px)'
        );
        wp_enqueue_style(
          'styleM',
          get_template_directory_uri(). '/css/style-medium.css',
          array(),
          '1.0.0',
          'screen and (min-width: 600px) and (max-width: 1024px)'
        );
        wp_enqueue_style(
            'styleS',
            get_template_directory_uri(). '/css/style-small.css',
            array(),
            '1.0.0',
            'screen and (max-width: 599px)'
          );
        //webFont
        //FontAwesome
        wp_enqueue_style(
          'fontawesome',
          'https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.1.1/css/all.min.css',
          array(),
          '6.1.1'
        );
        //GoogleFont NotoSans
        wp_enqueue_style(
          'noto-sans',
          'https://fonts.googleapis.com/css2?family=Noto+Sans+JP:wght@100;300;400;500;700;900&display=swap',
          array(),
          null
        );
        //GoogleFont Poiret One
        wp_enqueue_style(
          'poiret-one',
          'https://fonts.googleapis.com/css2?family=Poiret+One&display=swap',
          array(),
          null
        );
      }
      add_action('wp_enqueue_scripts', 'add_link_files');
```
## 解説
### functions.phpとは
Codexでも書かれていますが、WordPress（以下、WP）の基本機能をカスタマイズするためのファイルです。
デフォルトで利用される方は必要ないように見えますが、使い方等覚えていて損はないかなと思います。
自作テーマを作るなら、`functions.php`はバリバリ使いますので、覚えましょう！
（細かい解説はCodexをご覧ください）

https://wpdocs.osdn.jp/functions.php_%E6%A6%82%E8%AA%AC

### コード解説（CSS読み込み）
コード自体にもコメント入れていますが、
```diff_php
function base_structure_style() {
```
は、基本的に増えたり減ったりするものではなく、一度配置すると削除することのないCSSなので（reset.cssは違いますが）私は別に読み込ませています。
うっかり消してしまった！を避ける意味もあります（時間がたつとヤラカスので）

`function`から`(){`の間はお好みのキーワード等入れることができますので、自分で後で確認しても分かる様にしていると良いですね。

`function`の中で読み込ませるファイル名等を指定します。
```diff_php
        wp_enqueue_style(
            'styleBase',
            get_template_directory_uri(). '/style.css',
            array(),
            '1.0.0'
        );
```
`wp_enqueue_style`で**ここに書いてるCSSファイルを読み込むよー**と言う指示になります。

:::note warn
複数ファイルを読み込む場合は、`);`で区切って、`function`の中に入れていきますが、`'styleBase',`の部分は、ハンドルとして利用されるので、同じ文言にならないように注視してください。
:::

`get_template_directory_uri().`はテーマファイルのフォルダの中を参照してくれるコードです。
いちいちフルパス書かなくても良いので、テスト環境から本番環境に移動しても安心。
` '/style.css',`は読み込ませたいファイル名。
別フォルダに置いている場合は`/css/style.css`になります。

:::note warn
そもそもWPのテーマファイルで`style.css`は、テーマフォルダ直下に置いておかなければならないので、`style.css`だけは移動しちゃだめです。
上記はあくまでも例えとして記載しています。
:::

`array(),`の箇所は、Codexでは`このスタイルシートが依存する他のスタイルシートのハンドル配列`とあります。
要するに、ここで指定したファイルよりも先に読み込ませたいファイルのハンドルを指定する個所です。
依存関係がない場合は、`array(),`を指定し、ある場合は、`'styleBase',`と言った感じでハンドルを指定します。
読み込ませる順番がおかしくならない様に注意して指定してください。

https://wpdocs.osdn.jp/%E9%96%A2%E6%95%B0%E3%83%AA%E3%83%95%E3%82%A1%E3%83%AC%E3%83%B3%E3%82%B9/wp_enqueue_style

`'1.0.0'`は読み込ませるスタイルシートのバージョン。バージョン管理をしていないのであれば`false`でOK。

あとは、`}`で閉じて`add_action`

```diff_php
    }
    add_action('wp_enqueue_scripts', 'base_structure_style');
```
`wp_enqueue_script`が`header`の所定の場所で上で書いたファイルを読み込ませる指定、`base_structure_style`は、この中で指定しているファイル読んで指定した動作させてねーって感じです。（ざっくり）
このコードの最初に書いた`function base_structure_style`の`function`を抜いた文言です。
他とダブらない様に注意。

### コード解説（Webフォント読み込み）
#### FontAwesome
GoogleFontsのおかげで、だいぶwebフォントの導入の敷居も低くなりました。
でもフォントごとにCDNを読み込ませる必要があり、`header.php`にわんさか追記してしまうと見難く、メンテナンス性が損なわれるので、これも`functions.php`に書いてしまいます。
```diff_php
        //FontAwesome
        wp_enqueue_style(
          'fontawesome',
          'https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.1.1/css/all.min.css',
          array(),
          '6.1.1'
        );
```
みんな大好き`FontAwesome`！
アイコンの素材を画像で用意せずに簡単にいい感じのアイコンが実装できる優れもの！

https://fontawesome.com/

以前は、すぐに実装できたのですが、最近は無料の会員登録をしないとCDNコードが取得できないようなので、会員登録をしてから行ってください。
検索すれば実装方法等はたくさん出てきますので、ここは割愛します。

`functions.php`に書いているコード自体も、読み込ませるCDNが違うだけでスタイルシートの時とほぼ変わりません。

#### Google Fonts

https://fonts.google.com/

GoogleFontは少し癖があって、ここまで来るまでにごたごたしました。
実装の仕方などは割愛します。
実装の基本がわからない人は検索して調べてください。

まず`<link rel="`で始まる個所は必須で、`functions.php`に書くことは出来ませんでした。（なんで？）
なので、これだけは`header.php`に書きます。
複数のフォントを読み込んでも、この2行さえあれば大丈夫です。

```header.php
    <link rel="preconnect" href="https://fonts.googleapis.com">
    <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
```
`header.php`に書き込んだら、GoogleFontで取得した`<link href="`の部分のURLをファイルを読み込む箇所に書きます。
```functions.php
        //GoogleFont NotoSans
        wp_enqueue_style(
          'noto-sans',
          'https://fonts.googleapis.com/css2?family=Noto+Sans+JP:wght@100;300;400;500;700;900&display=swap',
          array(),
          null
        );
```
取り合えず、読み込む書体のウエイト（太さ）はありったけ全部にしてます。
コードは`源ノ角ゴシック（NotoSans）`です。

バージョンの箇所は、Googleフォントの場合は`null`にします。
バージョンを入れると読み込んでくれません（なんで？）

使いたいWebフォントの読み込みが完了したら
```diff_php
add_action('wp_enqueue_scripts', 'add_link_files');
```
で実行します。

### どこで読み込ませるの？？？
`functions.php`にスタイルシートとWebフォントを読み込ませたら、`header.php`に読み込ませる！と私思ってました。
```diff_php
add_action('wp_enqueue_scripts', '***');
```
で読み込んだファイルは、WPでは自動的に`header.php`に読み込んでくれます。


## まとめ
規則性さえわかってしまえば案外簡単に`functions.php`にスタイルシートとWebフォントを読み込ませることができます。
私としては`header`に書き込むよりもこちらの方がバージョン管理やファイルの構造がわかりやすいので、最近のテーマは`functions.php`にほとんど書き込んでいます。
ただ、`functions.php`は他のカスタマイズコードも書き込むので、機能ごとに別ファイルにして、メインの`functions.php`で読み込ませる形がベストかと思います。

10年以上WPでWEBサイト制作をしていますが、独学のため、色々間違えている個所などありましたらご指摘いただけますと幸いです。