閉じる

WordPress「functions.php」の効果的な作り方と便利なテクニック10選

WordPressでサイト制作をすると必ず既存の機能をカスタマイズしたいという要望が発生します。そこでfunctions.phpが必要になります。当記事ではfunctions.phpとは何かや実際にカスタマイズして機能を拡張する方法を解説します。

カテゴリ: WordPress

こんにちは!エンジニアの高澤です! 今回はWordPressを柔軟にカスタマイズするためのPHPファイルであるfunctions.phpについて解説します。
functionsと名がつくぐらいなので、関数のファイルかな…?とイメージされる方が多いかと思いますが、そのイメージで間違ってはいないかなと思います。
簡単にいうとWordPressの関数を使ったプログラムを記述してWordPressのコア機能などを拡張・変更できるのがこのfunctions.phpの特徴です。
今回は下記の流れでfunctions.phpを解説したいと思います。

  • functions.phpとは
  • functions.phpでできること
  • functions.phpの使い方・設置方法
  • functions.phpで機能を拡張するテクニック10選

functions.phpを理解すれば、WordPressの機能や見た目をカスタマイズできる幅を大きく広げることができます。

functions.phpとは

functions.phpとは、WordPressのコア機能などの拡張・変更を目的としたWordPress特有のPHPファイルです。
このテンプレートファイルにWordPressの関数などを用いて書かれたプログラムを記述してカスタマイズすることで、WordPressのコア機能から小さな機能まで様々な機能を拡張・変更することができます。
そもそもこのfunctions.phpをカスタマイズする理由は、 WordPressはデフォルトの状態のままだと、機能が不足していたり必要のない機能があったりと、どうしても不十分だなと思うことが多々あるからです。
そんな時にfunctions.phpをカスタマイズすることで、自身の思う通りに機能を拡張したり変更したりすることができます
functions.phpを使ってWordPressのコア機能などをカスタマイズすることができれば、WordPressでのWebシステムを何から何まで柔軟に制作できることにつながります

functions.phpでできること

functions.phpは、例えば下記のようなことができます。

・WordPressループのメインクエリの検索条件をカスタマイズする ・アイキャッチ画像やウィジェットを設定できるようにする ・固定ページでもページネーションを設置する ・投稿画面でビジュアルモードを非表示にする ・管理画面のログインページをカスタマイズする ・投稿で自動でタグが挿入するのを防ぐ ・ショートコードを作成する ・投稿画面で任意の場所にショートコードを挿入する ・サイト内検索結果をカスタマイズする ・サイト内検索結果の内容を絞り込む

実に多くの機能を拡張できるのがおわかり頂けたかと思います。
まだまだ多くの機能を拡張できるfunctions.phpですが、今回の内容として、上記の機能拡張をご紹介します。

functions.phpの使い方・設置方法

まずfunctions.phpを使用する方法をご説明します。
方法はとても簡単で、今のテーマディレクトリの階層に「functions.php」というPHPファイルを作成し、そのファイルにWordPressの機能を拡張・変更させるプログラムを記述させればカスタマイズできてしまいます
次の解説から、functions.phpを使って機能を拡張するテクニックをご紹介いたします。
サンプルコードをコピペしていただければ簡単に機能拡張ができるので、ぜひご活用ください。

functions.phpで機能を拡張するテクニック10選

ここからはコピペするだけでWordPressをカスタマイズできてしまう便利なサンプルコードを10選ご紹介します。
使い方はfunctions.phpに貼り付けるだけなのでとても簡単です。
内容としては実際のWeb制作で使われるような内容に厳選しておりますので、ぜひWordPressのテーマ作成をされている方は、下記のサンプルコード10選をコピペして動きを確かめて見てください。

①WordPressループのメインクエリの検索条件をカスタマイズする

index.phpやcategory.phpなどのテンプレートファイルではWordPressループ(メインループ)を使って記事一覧を表示させるときが多々あるかと思います。
WordPressの仕様で、いずれのテンプレートファイルも記事の一覧を表示させるにはメインループを使って表示させることになります。
そのメインループで出力したときの記事一覧の表示件数は、「管理画面→表示設定→1ページに表示する最大投稿数」で設定した件数で決めることができます。
ただここで設定した件数を、例えば10件に設定した場合当然メインループで表示させたindex.phpの記事一覧やcategory.php、tag.phpで表示させた記事一覧もすべて10件そろって10件表示されることになります。
ここで考えられることとして、例えばトップページだけは5件のみ表示させたいという問題が発生した場合設定にひっぱられて10件になってしまうので管理画面で設定した表示件数がとても不都合となってしまいます。
そこで、この設定された件数をページごとに柔軟に変更するといったことを可能にしたソースコードが下記になります。
下記コードではトップページの記事一覧の表示件数を5件にしています。

上記がメインクエリをカスタマイズする際に必要な基本的なコードになります。
上記ソースコードは、2つ目のif文の条件をis_home()関数を使っており、開いているページのクエリが「メインクエリでかつトップページであれば表示件数を5件にする」というプログラムです。
逆に、管理画面を表示しているときか、現在のクエリがメインクエリでなければ動作をキャンセルします。

②アイキャッチ画像・ウィジェットを設定できるようにする

次は、WordPressで欠かせない機能の一つであるアイキャッチ画像の設定機能と、ウィジェットの設置機能の追加の仕方をご紹介します。
やり方はとても簡単です。
各パラメータを指定したadd_theme_support()関数を記述するだけで終わりです。
add_theme_support()関数の値にそれぞれの機能を実装するためのパラメータを指定します。

アイキャッチ画像の追加機能を設定する

add_theme_support()関数にパラメータとして「post-thumbnails」を指定し、アイキャッチ画像を設定することができる機能を追加しました。

上記のソースコードは全ページ用・投稿ページのみ・固定ページのみの3つご紹介しておりますので、場面に応じて使い分けてください。

ウィジェット機能を設定する

add_theme_support()関数にパラメータとして「widgets」を指定し、ウィジェットを管理画面上から設定することができる機能を追加しました。

上記のようにソースコードをコピペして設定を保存したあと、管理画面に戻ればウィジェット機能が追加されているのが確認できます。
いずれもfunctions.phpに記述するだけで機能を追加できますので非常に簡単です。

③固定ページでもページネーションを設置する

固定ページでページネーションを設置する方法を解説いたします。
あえて「固定ページで」ページネーションと言っていることに疑問を持たれる方がいらっしゃるかと思います。
人によっては普通にthe_posts_pagination()関数など用意されているテンプレートタグを利用すればいいのではないか?という方もいらっしゃるかと思います。
しかし、実は固定ページではthe_posts_pagination()関数などページネーション系のテンプレートタグを使ってもページネーションが機能せず表示されないといった事態が起こる場合が多いです。
なぜかというと、固定ページは本来リストを扱うページではないからです。
リストを扱うページであるindex.phpやcategory.php、tag.php、archive.phpなど、WordPressループでデータをループさせて記事のリストを表示するといったやり方であれば、the_posts_pagination()関数で簡単に出力できますが、固定ページの場合は下記のサンプルコードをfunctions.phpにコピペすることで好きな時、好きな場所でページネーションを表示することができます

functions.php

上記のコードはadd_shortcode()関数を使って固定ページで便利に呼び出せるようにショートコードとしてページネーションを定義しています。

page.php

page.phpにはページネーションを表示させたい場所で上記のdo_shortcode()関数を記述します。そうすることで、記述した任意の場所にページネーションが表示されます

④投稿画面でビジュアルモードを非表示にする

WordPressで記事の投稿画面を開くと、ビジュアルモードとテキストモードの2種類から選んで記事の投稿(執筆)ができます。
テキストモードはHTMLの中に直に文字を入れていくスタイルですが、ビジュアルモードは完全にウェブサイト上の見た目を意識して記事の投稿をすることができます。
ただ、このビジュアルモードですが、WordPressの仕様上、テキストモードで作業した後にビジュアルモードに切り替えると入力していたはずのタグが消えたり、勝手にいらないタグが挿入されてしまいます
そうなると、主にテキストモードで作業する現場であればビジュアルモードに切り替える機能は不要であり、また誤ってビジュアルモードのタブをクリックしてしまったらタグは消えてしまうため、安全な運用を考えるとビジュアルモードのボタンを非表示にできたら大変便利です。
ここで下記のソースコードをコピペしていただくと、下図のようにビジュアルモードのタブとテキストモードのタブの両方が消えて、テキストモードのみ使えるようになります。
これでビジュアルモードに切り替えた際の崩れなどを気にする必要がなくなります。



それでは下記のソースコードをfunctions.phpにコピペして動きを見てみましょう。

functions.php

上記のコードを記述すればビジュアルモードのボタンは消え、テキストモードのみ使えるようになります。

⑤管理画面のログインページをカスタマイズする

WordPressにログインするときに最初に表示されるログイン画面をカスタマイズする方法を解説します。
ログイン画面のカスタマイズは、お客様からのご要望や他WordPressで構築したサイトと区別をつけたいという場合などにメリットがあります。
また、カスタマイズすることによってオリジナリティをだすことができます。

上記のサンプルコードは下記の画像のようなログイン画面を想定しています。
それぞれサイトに合わせて色を合わせてカスタマイズして頂けるとデザイン的にも良いものが作れると思います。
具体的には、コード中の#313131の部分をお好きな色に変えていただけると下の画像の黒の線の部分が変更されて、デザインが変わります
「.login h1 a」セレクタのbackground:url()がロゴ画像の部分になります。ロゴ画像の入ったファイルにつながるパスを記述することによって表示されます。

上記のサンプルコードを入力していただくと上記のデザインになります。
ロゴ画像はあらかじめご自身のご用意されたものをお使いいただければと思います。

⑥投稿で自動でタグが挿入するのを防ぐ

functions.php

先述しましたが、WordPressはタグが自動で挿入されるという仕様になっています。その対策の一つとして、remove_filter()関数を使います。
上記の記述を利用すれば、自動で<p>タグや<br>タグが挿入される仕様を防ぐことができます
また、場合によってはremove_filter()関数をあるテンプレートだけ(例えば、固定ページのテンプレートであるpage.phpだけ)自動挿入をなくし、それ以外は自動挿入させるといったパターンもあるかと思います。
その場合は、自動挿入したくないテンプレートごとにコードを挿入すれば無効化されます。

例)page.php

上記のように記述していただけると、余計なタグが自動で挿入されるのを防ぐことができます。

⑦ショートコードを作成する

funtions.phpで作成するショートコードとは、関数として定義した様々な機能を少ない文字列で投稿画面内で呼び出せるようにしたものを言います。
このショートコードの役割として言えるのは、通常記事を執筆する投稿画面内でPHPのプログラムコードを記述したとしてもプログラムが機能しませんが、functions.phpで定義したショートコードを利用することで、投稿画面内でも関数内にある機能を呼び出して使用することができます
また、ショートコードを使うメリットは、ショートコードとして定義したプログラムを何回でも使い回すことができます
ショートコードを作成する方法は簡単で、テンプレートタグのadd_shortcode()関数を使います。

functions.php

上記はただ文字を出力するとても簡単な一例ですが、他に用途として例えばバナー画像を表示させたりサイドバーによくある新着記事一覧など、サイト内の一部の部品として作成したプログラムを定義しショートコードにして使いまわしたりすることができます。
また、テンプレートに対してfunctions.phpで定義したショートコードを使いたい場合には下記のdo_shortcode()関数を利用します。引数にはショートコードである[test]を入れ込みます。

例)page.phpにショートコードを書く場合

上記のコードをテンプレートの好きな場所へ記述すればその記述した場所でショートコードとして定義した関数を呼び出すことができます。

⑧投稿画面で任意の場所にショートコードを挿入する

先述した7のショートコードですが、例えば[test]を投稿画面の任意の場所に記述すればその場所にショートコードを出力できますが、筆者がよく作る関数として下記のようなものがあります。

functions.php

上記のサンプルコードは、投稿ページのタイトルを出力してくれるコードになります。
このショートコードの[test_title]を投稿画面で入力して記事のタイトルを出力してみるとわかると思いますが、結果的に出力したタイトルがページの上の方に来てしまい、任意の場所に出力されないのがわかるかと思います。

そこで、PHPの関数であるob_start()関数とob_get_clearn()関数の2つを利用します。
そもそもショートコードが上に来てしまう原因は、WordPressの内部処理の段階でecho文が勝手に動作してしまうために起きてしまいます。それを防ぐために、2つの関数を使ってバッファを操作します。 下記が修正したコードになります。

functions.phpに先ほどのコードを削除し、上記のコードに修正していただければ、課題であった要素が上に行ってしまうといった問題を解決し、任意の場所に出力することができます

⑨検索結果を投稿タイプ別に表示する

サイト内で検索結果をカスタマイズする方法をご紹介します。
WordPressではsearch.phpとsearchform.phpの2つのテンプレートファイルを使って、サイト内検索を実装することができます。
サイト内検索もWordPressループ(メインループ)と同じで検索キーワードをもとにforeach文でループさせて検索結果を表示させます。
その出力結果をメインループと同じようにfunctions.phpから制御する方法が下記のソースコードになります。

functions.php

上記のコードを記述していただけると、サイト内検索の結果として「投稿のみ」のデータが出力されます。
また、4行目の$query->set(‘post_type’,’post’);のパラメータ2つ目’post’の部分を’page’に変更していただくことで出力結果を固定ページに絞ることができます。用途によって使い分けてください。

⑩検索結果を日付順で表示する

サイト内検索結果を日付順で表示する方法をご紹介します。種類は下記の4つご用意いたしました。
先ほどは検索結果の投稿タイプ別で制御をしましたが、下記のソースコードでは日付ベースで順番を変えることができます。
サイトに合わせていずれかを使用していただければと思います。
1、検索結果を日付順にする 2、検索結果を昇順で日付順にする 3、検索結果を降順で日付順にする 4、検索結果を順序順にする

functions.php

上記のいずれか1つを用途に応じてコピペして使い分けてください。 いずれもフィルターフックで設定しています。
また、先ほど解説した「9、検索結果をカスタマイズする」のサンプルコードと組み合わせていただけるとより条件を絞り込むことができます。

まとめ

今回はfunctions.phpの理解とともに実際に実務レベルで使える便利なサンプルをご用意しました。
functions.phpはWordPressを使ったサイト制作にとってかなり重要なPHPファイルの1つなので、今回の記事の内容を通して使い方や仕組みを理解していただくことをおすすめします。
また、当サイトのテーマ作成の記事でテーマ作成される際に合わせて本記事を読みながら作業されると、理解の定着がより深まり効率的にスキルアップできるかと思いますので、よろしければご活用ください。

最後までお読みいただきましてありがとうございます。ご意見・ご要望などございましたら、
以下のフォームよりお問い合わせを受けつけておりますので、よろしければご利用ください。

この記事がお役に立ちましたら、"いいね!"をお願いします
minwebの最新情報をお届けします

minweb編集部(株)セルリア

”共に考え、共に創るWebの成功戦略”というスローガンのもと、お客様と一からWeb戦略を考え、
企画し実装まで支援する伴走型Webコンサルティング会社です。

こちらの記事をお読みのかたにおすすめ!完全無料のダウンロード資料

Googleサーチコンソール使い倒し活用術  <AOHON>

ダウンロード資料画像

Googleの検索エンジンに関する情報を幅広く確認できるツール「Googleサーチコンソール」の活用方法をまとめました。新サーチコンソールの機能を網羅的に紹介するだけでなく、Webサイトを最適化できる実践的な方法までわかりやすく解説します。

サーチコンソール初心者の方が知りたい導入方法から、上級者向けのコンテンツ改善の方法まで、押さえておきたい要素を1つに集めた、SEOに力を入れたいすべてのWeb担当者におすすめの一冊です。