PHPとは何だったのか

今回PHPもwordpressの関数も読めないまま改装をしていたけど、折角の機会なので簡単なものをまとめておこうと思う。

PHPとは、というよりwordpressの関数についての話(ならそう書け)。

「まあ書けないけど読めればいいか…」みたいな感じでやっていこうと思う。

最初のおまじない

<?php
 defined( 'ABSPATH' ) || exit;
?>

WordPressのファイルに必ず書かれているこのおまじないは「もし『ABSPATH』が定義されていないならば、処理を終了する」という意味。今はとりあえず、Wordpressが正しく実行されるためのおまじない、と思っておけばいい。

文字列の出力

PHPは開始タグ「<?php」と終了タグ「?>」を探し、それが見つかるとコードを実行し、終了する。それ以外は無視されるので、このタグは忘れないようにする。

HTMLでPHPを使うときはechoで文字を出力する。書き方は6とおりある。

参考:【PHP入門者向け】echoによる出力方法まとめ

<?php echo("Hello world!"); ?>    //括弧書き(あまり見ない)
<?php echo "Hello world!";  ?>   //ダブルクオーテーション
<?php echo 'Hello world!';  ?>   //シングルクォーテーション
<?= echo "Hello world!"; ?>      //echoの簡易版。
                                 //括弧書き、シングルクオーテーション版も可。

セミコロンを忘れないようにする。

ちなみに懐かしのC言語はこういうの。

printf("Hello world!");

変数を定義して使う場合はこう。

<?php

$a = "Hello world!";
echo "$a";

?>

wordpressに応用

これはHTMLの段落内で「今年の西暦」と「サイト名」を出力。

<p>

<?php echo date('Y'); ?> <?php bloginfo( 'name' ); ?>

</p>

また、ファイルがPHPコードだけの場合、終了コード「?>」は書かない方が良い。でないと、予期せぬエラーが起きる場合があるらしい。

参考:PHP マニュアル言語>リファレンス>基本的な構文>PHP タグ

なので、function.phpには書かれていない

条件分岐

次はif 文。まずは簡単なものから。

参考:便利なWordPressの条件分岐16パターン:カスタマイズで活躍するものを厳選!

<?php if (条件) : ?>
  <p>条件に当てはまるときに表示する文字列(この場合は段落となる)</p>
<?php else: ?>
  <p>条件に当てはまらないときに表示する文字列(この場合は段落となる)</p>
<?php endif; ?>

個別の投稿ページのときだけ表示したい場合はこう。elseは省略できる。

<?php if ( is_single() ) : ?>
  <p>ここは投稿ページです</p>
<?php endif; ?>

「条件Aに当てはまるとき」 「条件Bに当てはまるとき」「条件AとBに当てはまらないとき」を区別してそれぞれ表示したいものを変えるときは、参考先を参照。

否定

「~以外」を指定するには「!」を使う。

<?php if ( !is_single() ) : ?>
  <p>ここは投稿ページ以外のページです</p>
<?php endif; ?>

応用編1:スタイルシート

あとはwordpressのタグと関数について分かればいい。スタイルシートの読み込みに使ったコードを解読してみる。

参考:テーマの情報をかんたんに取得!wp_get_theme()とは

if (!is_admin()) {
    $the_theme = wp_get_theme();
     wp_enqueue_style( 'us-styles',
     get_stylesheet_directory_uri() . '/style.css', array(),
     $the_theme->get( 'Version' ) );
}

if (!is_admin()) で「ダッシュボードまたは管理画面が表示されていない場合」。

wp_get_theme(); はテーマのバージョン情報を取得するために使う関数、なので $the_theme = wp_get_theme(); で「変数『$the_theme』に使用中テーマのバージョン情報を代入」。

この、何の役にも立たなそうなバージョン情報は次の、スタイルシートを呼び出す関数「wp_enqueue_style」で使用する(詳細は下記$verを参照)。

wp_enqueue_style の説明は以下のとおり。

『WordPress が生成したページに CSS スタイルファイルを安全に (キューへ) 追加します』

<?php wp_enqueue_style( $handle, $src, $deps, $ver, $media ); ?>

$handle
スタイルシートのハンドルとして使われる名前。必須。別に何でも良いけど、他のハンドル名と被らないように
上の例では「us-styles」というハンドル名を付けた。

$src
読み込みたいスタイルシートのURL。URLをベタッと直接書き込むのはよろしくないので、URLを取得する関数 get_stylesheet_directory_uri() を使ってURLを完成させる。

get_stylesheet_directory_uri() . '/style.min.css', array()

これで、phpファイルと同じディレクトリ内に置いた style.css のURLが安全に出力される。安全に。

$deps
このスタイルシートより前に読み込まれる必要があるスタイルシート。array() とはPHPの配列の書き方に従い、「空の配列」を意味している。こういうときは上から何も考えず読み込んでね!みたいな意味になる。
先に読み込みたいファイルがあれば array(‘先に読み込みたいファイルのハンドル名‘) となる。

$ver
スタイルシートのバージョン番号。先述の 「変数『$the_theme』」の中身がここに入る。
詳しいことはよく分からんけどここはコピペで良さそう。「別になくてもいいけどあった方が間違いない値」。

$media
スタイルシートが定義されているメディアを指定する文字列。なんかよく分からんけどなくてもいいので書きません。

応用編2:Javascript

次はJavascript を読み込む wp_enqueue_style 関数を解読してみる。

下は「jsフォルダ内の luminous.js を読み込む」関数。

wp_enqueue_script( 'lu-js',
  get_template_directory_uri() . '/js/luminous.js', array(),
  $the_theme->get( 'Version' ), true );

使い方は先述の wp_enqueue_style 関数とだいたい同じ。

<? php wp_enqueue_script( $handle, $src, $deps, $ver, $in_footer ); ?>

ハンドル名は「lu-js」、スクリプトのURLは get_template_directory_uri() で取得、先に読み込みたいファイルは今回特になし。バージョン情報の取得もCSSのときと同じ。

$in_footer
ここを true にすることで、普通にしているとHTMLドキュメントの<head>内に書かれるところを</body>タグの直前に書いてくれる。初期値は false なので忘れずに書こう。

でもURLの取得、template だとJavascriptが動かなくなったんだけど……なんで???

2023/1/3 追記:
別件で調べてて分かったんだけど、子テーマの場合はtemplateではなくstyleで書かないといけないらしい。
……なんで???

今回はこんな感じ。何かあったらまた追加するかも。