自分のWordPressで学ぶPHP講座(AIの変更を判定する)
区分2 読むための最低限★★★変数は、文字や数字を一時的に入れておく箱です。
PHPでは、名前の頭に $ を付けます。$name や $c のように書きます。
配列は、値を複数まとめて入れておく一覧です。 住所録のように、「項目の名前」と「その中身」の組が並んでいる形が、WordPressでは特によく出てきます。
関数は、「この手順をやってください」と名前で呼び出せる、まとまった処理です。 料理で言う「レシピ」で、材料(引数)を渡すと、料理(結果)が返ってきます。
| 記号・見た目 | 何か | |
|---|---|---|
| 変数 | $名前 |
中身が変わる箱 |
| 定数 | ABSPATH($ が付かない) |
一度決めたら変わらない値 |
| 配列 | array( … ) または [ … ] |
値の一覧 |
| 関数 | 名前( … ) |
手順のまとまり |
$ と = 必ず覚える$additions = "\n# ゴミURL対策\n";
$additions .= "Disallow: /*?feed=\n";
return $output . $additions;
これは子テーマの functions.php にある、検索エンジンへの案内文(robots.txt)に行を足す処理の一部です。
1行目の = は、「左の箱に、右の値を入れる」という意味です。数学の「等しい」ではありません。
2行目の .= は、「箱の中身の後ろに、右の値をつなげる」です。
3行目の .(ピリオド)は、文字をつなぐ記号で、$output と $additions をつなげた結果を返しています。return の意味は、第3章で見ます。
行の最後の ;(セミコロン)は、1つの文の終わりです。AIの差分で ; が抜けていると、サイト全体が動かなくなることがあります。
' と " 必ず覚える文字は、'…' か "…" で囲みます。違いは1つだけです。
'…'(シングル) :書いた通りの文字。\n はそのまま「\n」という2文字"…"(ダブル) :\n を改行として扱い、中の $変数 を中身に置き換える上の例の "\n# ゴミURL対策\n" は、改行を含めたいのでダブルを使っています。
迷ったら、「改行や変数を使うならダブル、そうでなければシングル」と読んでおけば足ります。
文字のほかに、次のような値があります。
8、30(引用符なし)true(はい)と false(いいえ)null(何も入っていない)'8'(引用符あり)は文字で、8 は数字です。見た目は似ていても、PHPは別の物として扱います。
コメント(動きに関係しないメモ)の書き方は3つあります。
// 1行のコメント
# これも1行のコメント
/* 何行にもわたる
コメント */
コメントの中に「危ないから消す」のような文があっても、実際の動きには関係しません。差分を見る時は、コメントの行より、コメントでない行の方を見ます。
array( … ) と [ … ] 必ず覚える配列には、2つの書き方があり、意味は同じです。
array( '駅から', '徒歩1分' )
[ '駅から', '徒歩1分' ]
array( … ) が古くからある書き方で、[ … ] は短く書ける新しい書き方です。
AIはどちらも出します。どちらが出ても、同じ物として読みます。
function lk_look_config() {
return array(
'body_class' => 'look-timee',
'hero_title' => array( '踊りたい時に、', 'サッと踊れる。' ),
'ctas' => array(
array( 'label' => '料金を見る', 'url' => 'price', 'class' => 'lk-btn lk-btn-sub' ),
array( 'label' => 'アクセス', 'url' => 'access', 'class' => 'lk-btn lk-btn-sub' ),
),
'note' => array( 'label' => '空き状況を見る', 'url' => 'schedule' ),
);
}
これは子テーマの functions.php にある、サイトの文言をまとめた設定の一部です(LINEボタンなどは省いています)。
'body_class' => 'look-timee' の => は、「名前(キー)と、その中身(値)」を結びつける矢印です。
左がキーで、右が値です。
配列の中に配列を入れることもできます。'hero_title' の値は、文字が2つ並んだ配列です。
'ctas' の値は、ボタン1つ分の配列を2つ並べた配列です。
取り出す時は、変数に [ ] でキーを付けます。
$c = lk_look_config();
$c['body_class'] // 'look-timee'
$c['hero_title'][0] // '踊りたい時に、'(番号は0から数える)
$c['note']['label'] // '空き状況を見る'
番号が付いていない配列は、先頭から 0・1・2 と数えます。「1番目」が 0 になる点だけ、覚えておいてください。
function と return 必ず覚えるfunction my_slide_max() {
return 8;
}
これは子テーマの functions.php の、一番短い関数です。
function :「ここから関数を作る」という宣言my_slide_max :関数の名前( ) :材料(引数)を受け取る所。ここは空なので、材料なし{ … } :手順の中身return 8; :「結果は 8 です」と返すつまり、呼ばれたら 8 を返すだけの関数です。 この関数が、どのタイミングで呼ばれるのかは、次の1行が決めています。
add_filter( 'lightning_top_slide_count_max', 'my_slide_max' );
この add_filter は、「Lightning がスライドの最大枚数を決める時に、my_slide_max を呼んでください」という登録です。詳しくはNo.05(後で出ます)で扱います。
( ) を付ける 必ず覚える関数を使う時は、名前の後ろに ( ) を付けて、材料を中に書きます。
mb_strlen( $t1 )
esc_html( $t1 )
get_stylesheet_directory_uri()
3つとも見た目は同じですが、出どころが違います。
mb_strlen :PHPが最初から持っている関数(日本語の文字数を数える)esc_html :WordPressが用意した関数(画面に出す文字を安全にする。No.07で扱います)lk_look_config :このサイトの作者(AI)が作った関数名前の頭が lk_ や my_ のように独自の印が付いていれば、自作です。
自作か、WordPressの物か分からない関数は、AIに「これはどこで定義されていますか」と聞けば確かめられます。
関数の名前には、もう1つ注意点があります。 同じ名前の関数を2回作ると、サイトが止まります。AIが似た名前の関数を足してきた時は、既にある関数と名前が重ならないかを見ます。
function() { … }add_action( 'wp_enqueue_scripts', function() {
// …処理…
} );
名前を付けずに、その場で関数を渡す書き方もあります。 「その場限りで使う手順」を、1か所に書けます。 名前がなくても、中の読み方は、普通の関数と同じです。
define さらっとdefine( 'LOOK_FOR_ALL', true );
define は、定数(一度決めたら変わらない値)を作ります。
名前の頭に $ が付かず、大文字で書くのが普通です。
作った後は、LOOK_FOR_ALL と名前だけで使います。
実際の functions.php では、この行の前に「もしまだ作られていなければ」という条件が付いていますが、それは次の単元(No.04)で見ます。
○ 読み方のコツ:関数の中身を読む前に、1行目の function 名前( と、return の所だけ読む。何を受け取って何を返すかが分かれば、全体の意味は大体つかめます
○ よくある勘違い:「= は等しい、という意味」→ ×。= は代入(箱に入れる)です。「等しいか」を調べる記号は、No.04で見ます
○ 関係する単元:No.04(条件)/No.05(フック)
$ は箱、=> は名前と中身の組、function は手順書、return は結果を返す合図、define は変わらない値。= は「入れる」であって「等しい」ではない。
問1 AIの差分に「$count = 5;」という行が足されていました。これは何をしていますか?
問2 $c['hero_title'][0] が取り出すのは、次の配列のどの値ですか? 'hero_title' => array( '踊りたい時に、', 'サッと踊れる。' )
問3 子テーマの functions.php の関数「function my_slide_max() { return 8; }」を読みました。正しい説明は?
問4 AIが「定数を作りました」と言い、define( 'LOOK_FOR_ALL', true ); を足しました。この定数をあとで使う時の書き方は?
出典:PHP公式マニュアル「変数の基礎」(https://www.php.net/manual/ja/language.variables.basics.php)/「文字列」(https://www.php.net/manual/ja/language.types.string.php)/「配列」(https://www.php.net/manual/ja/language.types.array.php)/「ユーザー定義関数」(https://www.php.net/manual/ja/functions.user-defined.php)/「定数」(https://www.php.net/manual/ja/language.constants.php)/あなたの子テーマ内 functions.php。