WordPress の functions.phpについて

functions.phpと聞いて「あっ、あれね」っと思われた方は良いのですが、「??なにそれ?」となる人も居られると思うので、functions.phpについて少し説明を。
詳しくはWordPressのちゃんとした文献を読んで欲しいのですが、そうするといきなりハードルが高くなる(私も読んでるとウーン?となったりする)ので大まかな説明に留めます。

functions.phpとは

functions.phpは、WordPressのカスタマイズが行いやすいようにWordPressに設けられたファイルで、PHPで記述され、各PHP関数やWordPress組み込みの関数を呼び出したり、独自の関数を定義することに利用します。

WordPressのテーマに必須のファイルの1つです。

全てのテーマや記事の前に処理されるので、テーマや記事の初期化ができます。この初期化をする時にショートコードと言う形式で登録しておき、記事からショートコード呼び出しだすことで、記事にPHPコードで処理した内容を表示できるようになります。

このショートコード呼び出しをもう少し詳しく知りたい場合は「WordPress フック」や「WordPress アクションフック」、「WordPress プラグインAPI」などで検索して学習してください。

今回の WordPress PHP入門では、WordPressでPHPを使ってプログラミングが出来るようになることを目標にするので、WordPress周りの仕組みについては割愛します。

functions.phpはどこにあるの?

functions.phpは上にも書いた通り、WordPressのテーマに必須のファイルですので、現在使っているテーマの中に有ります。

私のテーマはTwentyElevenですが、子テーマを使っているため、子テーマの中のfunctions.phpにショートコード形式でPHPコードを設定しています。

もし、この記事を読んでいて子テーマを使っていない人が居るなら、子テーマを使うことを強くお勧めします。子テーマを使わないとテーマの更新が有った時に、せっかくショートコードとして登録したPHPコードがテーマの更新によって上書きされ、消えてしまうのでもう一度ショートコードを設定する必要が出てくるので、とても面倒です。

私も古い記事ですし、Twenty Eleven と古いテーマですが、子テーマを記事にしていますので良ければ参考にしてください。
WordPress Twenty Eleven の子テーマ の作り方
WordPress Twenty Seventeen の子テーマの作り方

脱線してしまいましたが、ファイルはテーマの中に有ります。
レンタルサーバに付いてくるファイルマネージャーなどのレンタルサーバのファイルやディレクトリを見ることができるツールを使って「サイトのroot>wp-content>themes>使用しているテーマまたは子テーマ>functions.php」確認するか、「ダッシュボード>外観>テーマエディター」からfunctions.phpを確認します。

functions.phpを使う時の注意

functions.php はとても重要なファイルのですので、PHPコードを書く際に些細なミスを起こすと、WordPress が真っ白表示されたりします。

ですから、ファイルのバックアップを常に取るように心がけてください。真っ白表示されて、すぐに原因が分からないことも多々あります。その場合は、速やかにバックアップを戻せるようにしておきましょう。

ちなみに、WordPressが真っ白表示で表示されると管理画面にも簡単に行けません。なのでファイルマネージャーなどでバックアップを戻すことが必要になりますので、いざとなって慌て無いようにするためにログイン名やパスワード、使用方法などを事前に確認しておきましょう。

functions.php で良くあるエラー

慣れてくると良く起こすミス
・構文ミス(関数のつづりを確認しましょう)
・無駄な空白、空行を入れてしまい構文ミスに繋がる

初めての時に良く起こすミス
・「UTF-8、BOMなし」以外のファイル形式保存してしまう

functions.php を怖がる必要はありません

functions.php はちょっとしたミスで WordPress を真っ白表示にしてしまいますが、それだけ強力な機能を持ったファイルと言えます。常にファイルのバックアップとリストア(戻す)用意が出来ていれば怖がる必要はありません。
多くの経験を積めばそれだけ落ち着いて作業も出来るようになりますからね。

以上、「WordPress の functions.phpについて」簡単に説明をしました。

WordPress 始めてのPHPコード実行

WordPressでは functions.php に記述したPHPコードをショートコードとして登録し、記事内で登録したショートコード(PHPコード)を呼び出し、実行すことができます。

今回は、ショートコードをfunctions.php に登録し、呼び出し実行するメモを紹介します。

具体的に、日付を表示する下のPHPコードを登録して呼び出します。

date("Y/m/d");

WordPress ショートコードとして登録するには

ダッシュボード>外観>テーマエディターを開きます。
左端にテーマファイルを選択するメニューが表示されているので、テーマのための関数(functions.php)を選択します。
私のテーマはTwenty Eleven です。使っているテーマによってはテーマファイルの表示が異なる可能性が有りますが、いずれにせよfunctions.phpファイルを見つけて選択します。

functions.phpを選択する

下のコードをfunctions.phpにコピペします。
位置はとりあえず一番下であれば問題ないですので、一番下に追記しましょう。

ただし!ファイルの一番下に有る「?>」はPHPコードの最後を括るコードなので、一番下と言っても「?>」の前にコピペします。

//日付を表示するショートコード
function shortcode_date(){
  return date("Y/m/d");
}
add_shortcode('call_date', 'shortcode_date');

念のため私のfunctions.phpに記述した箇所の画像を貼っておきます。

?>の前にコピペする

次はショートコードを呼び出します

下のように記述するだけです。
[]でcall_dateを括って記述します。ブロックエディタの場合、段落に記述します。
段落は下の図で確認してください。

2020/12/01
ショートコードを記述するのは段落

2020/12/01
↑がショートコードを記述した箇所。

ブラウザ上では既に日付が表示されていると思うので、記述している時の画像を貼ります。

実際にショートコードを段落に記述したところ

意外と簡単だったでしょ?

PHPの関数を組み合わせればいろいろ複雑なことができるようになります。
WordPressの関数も必要かと思いますが…それもおいおい。

それかMySQLを利用すれば本格的なプログラムも組めるようになります。
それもおいおい。

以上、「始めてのPHPコード実行」でした。

PHPを始める前に

WordPressでPHPを始めるには最初に少しだけ山が有ります。

WordPressを始めて慣れてきた頃に、「ここが思ったようにならないぁ」と思い始める人も出てくると思います。

自分で思ったように表示をさせるには、それを実現してくれるテーマやプラグインを探し利用するか、WordPressをカスタマイズするためにPHPを利用するかのどちらかになります。

テーマで希望したように表示できれば楽だしそれに越したことがないのですが、少し手の込んだことをしようと思うと、いろいろと思うようにならないことも出てきます。

プラグインを利用する場合は更にプラグインの中に不具合が有ったり、酷い場合はプラグイン経由で WordPress 内部のハッキング等をされているとか、信用のおけないプラグインを使うには注意と勇気が要ります。

PHPを使って WordPress のカスタマイズをするには、PHP の知識と WordPress の構造知識が必要になります。

結果、どれも一長一短があるので自分に合った方法でなんとかするか、諦めるかを選択することになります。

PHP を利用することにした私の学習を紹介を紹介して行きます

PHP を利用するにあたりどの程度の知識が必要になるかは、実現したいことで変わってきます。簡単なことであれば、知識と言うよりもその技術について紹介している記事を検索して組み込むことで可能になります。

私の場合、現在はPHPの学習を全くしていませんが、以下のことをPHPで実現しています。
・ Gogle Analytics Code設定
・ headにAMP自動広告コードを挿入する
・ フッターにAMP自動広告コードを挿入する

どれも見様見真似でなんとかなりました。
PHP のことは知らなくても他のプログラム言語を知っているので、なんとなく理解できることも多かったのですが…。どちらにしても簡単なことであれば、諦めずに数日じっくり取り組めばなんとかなることも多いです。

PHP を利用する上での山は

PHP を利用する上での山は、何と言っても「どこに PHP を記述すればちゃんと表示できるようになるの?」ってことでしょう。

WordPress はホームページ作成ソフトですが、html ファイルをそのまま作成してくれるわけでなく、WordPress で書いた記事は MySQL と言うデータベースに記事内容データのみ保存され、記事URLにアクセスが有った時に WordPress が保存した MySQL から記事内容データのみを取り出し組み立て表示します。

記事内容の文字はHTML 言語で記述された形で保存されます。
記事内容の文字以外のデータとして、写真やビデオやその他いろいろな情報が有りますが、それらの実態はファイルとして保存され、それらを呼び出すための HTML 形式データとして保存します。
WordPress に保存しているデータは、HTML形式のデータかファイルのみとなっています。

上のことを理解できると、「じゃ PHPコードはどこに書けばいいの?」となります。
WordPress の標準エディターとなっているプロックエディターではPHPコードを書いてもHTML 形式データとなるため、PHP コードは実行されずコードが表示されるだけになります。

具体的に、日付を表示するPHPコードは下のように書きます。

<?php echo date("Y/m/d"); ?>

しかし、これをそのまま記述しても、<p><?php echo date(“y/m/d”); ?></p>とHTML のパラグラフタグ<p>で囲まれてしまうため、上のようにそのまま表示されPHPコードとは認識されず、PHPコードは実行されません。

このことをしっかり理解することが、第一の山になります。

では、PHPコードはどこに書けばいいの?

PHPコードは「functions.php」と呼ばれるphpファイルに記述します。
また、PHPでは外部ファイルを参照する方法としてrequire, require_once, include, include_once 関数が用意されていますので、全てを functions.php ファイルに記述する必要はありません。少し凝ったプログラムになる場合は、別ファイルにして見やすく構造化した方が管理しやすいです。

functions.php は利用しているテーマの中のフォルダに入って居ます。
ダッシュボード > 外観 > テーマエディターからも編集ができます。

尚、functions.php はWordPressの根幹のファイルの一つですので、コード記述にミスがあると、いとも簡単にWordPress は表示されなくなります。なので、functions.php の編集を行う際はバックアップを取るなど注意をする必要があります。

functions.php に書けば簡単に表示されるの?

また、functions.php は全ての記事の共通のファイルです。なので、functions.php にPHPコードを書いただけでは全ての記事に反映されてしまうため、うまく機能しているとは言えません。全記事共通のPHPコードなら問題ないのですが……。
なので個別の記事にPHPコードで何かを処理させたいのなら、functions.php内にPHPコードの基本的な使い方の「ショートコード」という形で記述して、該当記事内から登録した任意のショートコード(PHPコード)を呼び出すことでPHPコードを実行させ結果を表示させます。

この「ショートコード」の仕組みは、多くのプラグインでも利用されていますので、使ったことがある人も居ると思います。

まとめると
1)functions.php にショートコードとしてPHPコードを記述する
2)記事の中からショートコードを呼び出す
です。

以上がPHPを利用するための概略です。
そんなに難しくなかったですよね?
次回は私がPHPを学びつつ、具体的な例を挙げて説明していければと思います。

以上、「PHPを始める前に」でした。

MySQL データ保存(データバックアップ)

久々にWordPressを触ってみたら、5.4.1までバージョンがアップしていました。
放置してしまい反省中…

で、早速バージョンアップをしようと思い、ダッシュボードから [5.4.1に更新]ボタン をクリックしたところ、いつもの「重要: 更新の前にデータベースとファイルをバックアップしてください。更新についてヘルプが必要な際は WordPress の更新解説ページをご覧ください。」が先頭に表示され、バックアップしなくちゃなぁと。

「WordPress サイトのバックアップ」と言う記事を書いたのですが、書いた当時のphpMyAdmin のバージョンが古く、現在のバージョンと表示内容が大きく異なっていました。
そこで、今回は phpMyAdmin version 4.4.15.10 のMySQL データ保存(データバックアップ)を書いた次第です。

まずは、phpMyAdminを起動します。
レンタルサーバから起動するのが楽で一般的かと思います。

phpMyAdmin でMySQLのデータを保存する画面1
phpMyAdmin でMySQLのデータを保存する1

1)バックアップを取りたいデータベースを選択(クリック)する
2)データベースを確認する
3)[エクスポート]タグを選択(クリック)する

phpMyAdmin でMySQLのデータを保存する画面2
phpMyAdmin でMySQLのデータを保存する2

1)[実行]ボタンを選択(クリック)する。それ以外は特に何もする必要はありません。

phpMyAdmin でMySQLのデータを保存する画面3
phpMyAdmin でMySQLのデータを保存する3

実行ボタンをクリックするとデータの抽出が行われ、PC側に勝手にダウンロードされます。ダウンロード先は一般的にダウンロードです。ファイル名に日付も付加されて来るのでわかりやすと思います。

以上でデータの保存は終わりです。

で、データ保存とタイトルを付けましたが、実際にはテーブルCrateをしているSQLも吐き出されていました。
吐き出されたSQLの頭の部分だけコピペすると以下のようになっています。

——————————————————————————————————————-以下

— phpMyAdmin SQL Dump
— version 4.4.15.10

— https://www.phpmyadmin.net

— Host: mysql2.***.ne.jp
— Generation Time: 2020 年 5 月 20 日 16:32
— サーバのバージョン: 5.7.27
— PHP Version: 5.4.16

SET SQL_MODE = “NO_AUTO_VALUE_ON_ZERO”;
SET time_zone = “+00:00”;

/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
/*!40101 SET NAMES utf8mb4 */;

— Database: -----_Database名 <<<データを戻す場合このデータベース名


— テーブルの構造 wp_brog_commentmeta

CREATE TABLE IF NOT EXISTS wp_brog_commentmeta (
meta_id bigint(20) unsigned NOT NULL,
comment_id bigint(20) unsigned NOT NULL DEFAULT ‘0’,
meta_key varchar(255) DEFAULT NULL,
meta_value longtext
) ENGINE=MyISAM AUTO_INCREMENT=14012 DEFAULT CHARSET=utf8;

— テーブルのデータのダンプ wp_brog_commentmeta

INSERT INTO wp_brog_commentmeta (meta_id, comment_id, meta_key, meta_value) VALUES


——————————————————————————————————————-以上

Create Table if not Exists は、テーブルが存在していなければテーブルを作ると言うことです。
今回保存したデータを戻す場合は、Create Databese は実行されないので、予めデータベースを作成してあげる必要があります。
phpMyAdminの中からでもデータベースの作成の権限が有れば可能ですが、基本的にデータベースはレンタルサーバのコントロールパネルで作成しないと後々厄介になると思うので、そこだけ注意が必要です。

で、データを戻す際、もし、前のデータが残って居るような場合は、データを消してあげる必要があります。サクッとデータを消す方法はいくらでもありますが、delete かdrop 文を使うのが楽かと。元からあるデータベースを消してレンタルサーバのコントロールパネル新しいデータベースを作るのも有りかと。

Webサイトを一から構築していく場合のリストアも有るし、条件設定が多岐にわたるし、この辺りの説明を書いていくと長々と書かないといけないので、割愛します。
ダウンロードされたSQLファイルは、そんなに難しくないので一読するとリストア作業もわかりやすいかも。

最後は中途半端になってしましましたが、「MySQL データ保存(データバックアップ)」でした。
以上。