特徴
- HTMLがPHPファイル内で書ける
- <?php 処理 ?>これだけでコードが走る
- 終わりの ?> の部分は省略できる
- エントリーポイントがわかりにくい(PHPを扱う環境によって調べ方があるようだ。)
変数
- 頭に【$】をつける。
- 変数の型は推論型で型指定不要。
- 予約語が使えるが非推奨。
- floatはdoubleで返される。正確な型を知るには【var_dump(変数)】を使用する。
- ブール型は true で 1 だが false は何も入らない。
- 文字、文字列を扱う時はシングルコーテーションを使う。HTMLは普通にダブルコーテーション。
コメントアウト
C言語と同じ。
// 一行
/**/ 範囲
配列
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
<?php $aaa = array(2); $aaa[0] = 1; $aaa[1] = 2; $bbb = array('ああ', 'いい'); $ccc = ['ああ', 'いい'] //多次元 $ddd = [ ['ああ', 'いい'],['うう', 'ええ'] ]; echo ($ddd[1][0]); //結果 //うう |
演算子
演算子はC言語とほぼ同じ。
イコール3つ === は厳密等価演算子と呼ばれ、値と型の両方が一致しているかを比較する
if文の書き方
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
<?php $a = 1; if($a == 1){ echo ('あ'); }else if ($a == 2){ echo ('い'); }else{ echo ('う'); } ?> //結果 //あ |
繰り返し処理
foreachはC言語とかと変数の配置が逆かつ as を表記
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 |
<?php //for(スタート値; 継続条件; 増減){} for($i = 0; $i <= 3; $i++){ echo $i.'\n' //'\n'は改行'<br>'でも可 } ?> //break continue は使用可能 //結果 //1 //2 //3 //while <?php $i = 0; while($i < 3){ echo $i.','; $i++; } ?> //結果 //0,1,2 //foreach <?php foreach($配列とか as $取り出されて入る変数){ 処理 } ?> |
関数の書き方
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
<?php function aaa($a){ echo $a.'\n'; return $a++; } $b = aaa(1); //変数に代入が可能 $c = function($d){ echo $d; }; //セミコロン必須 $c($b); //結果 //1 //2 |
クラス
変数や関数にアクセスするには -> を使う、その時変数の$が取れる。
public protected private 使用可能。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
<?php class Aaa { //PHPではクラスの頭文字を大文字にするのが慣習 public $a; public function __construct(){ //コンストラクタ、アンダーバー2つ echo 'hello'.'\n'; $this->a = 0; //$取れる } function aaa(){ echo 'あ' } } $b = new Aaa(); //インスタンス化 $b->a = 1; //$取れる $b->aaa(); echo $b->a.'\n'; //結果 //hello //あ //1 //未定義の変数は使用してもエラーが出ない、そして何も代入されない |
連想配列の書き方
通常の配列の宣言に => を使うと左がキー、右が値の連想配列ができる。
1 2 3 4 5 |
<?php $a = array('aaa' => '1', 'bbb' => '2'); $b = [ 1 => 'a', 2 => 'b' ] |
コロン構文
{}を使わない書き方 : と end~ に置き換える書き方。
これを使うと処理をまとめて書ける。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
<?php for(): //処理 endfor; while(): //処理 endwhile; foreach(): //処理 endforeach; ?> //複数処理をまとめて書く <?php if ( have_posts() ) : while ( have_posts() ) : the_post(); ?> //表示処理 <?php endwhile; endif; ?> |
使いそうな関数(getが付く物はHTML内で使う時はechoを頭につける)
- echo
- 値を出力できる
- var_dump
- echoでは出力されない詳細なデータを出力できる
- 型 + 値で出力される
- get_theme_file_url(‘テーマディレクトリからのパス’)
- テーマディレクトリまでのパスを取得する。
- HTMLで使うならechoを頭につけて使う。(取得するだけでhtmlのhref=””等の中に文字列として表示されないから)
- テーマ以下のファイルを読み込むときに便利
- home_url(‘必要なファイルのパス’)
- WordPressのトップのURLまでのパスを取得する。
- HTMLで使うならechoを頭につけて使う。(取得するだけでhtmlのhref=””等の中に文字列として表示されないから)
- get_header() & get_footer
- header.php footer.php をインクルード出来る
- header.phpの<head></head>内に<?php wp_head(); ?>必須
- footer.phpの</body>の直上に<php? wp_footer(); ?>必須
- header.phpの<body>の直下に<?php wp_body_open(); ?>必須
- header.php footer.php をインクルード出来る
- have_posts()
- 投稿(記事)存在判定
- the_posts()
- 投稿リストから最新の投稿を取り出して取り出した投稿を消す
- 恐らくオブジェクトで取得して一件ずつ吐き出す感じ
- これの下で投稿の何を表示するかとかの処理をするのが一般的
- the_title()
- タイトルの取得、表示
- the_date()
- 日付の取得、表示
- 引数で表示形式を変えれる(‘Y.m.d’で2025.9.10)
- 同じ日付がある場合2回目以降は出力しない
- 常に出力する場合はget_the_dateにする
- HTMLで表示させるにはechoを頭につける
- the_content()
- 記事の内容を取得、表示
- the_permalink()
- URLの取得、表示
- get_sideber()
- サイドバーの取得
- is_admin()
- 現在のリクエストが管理画面ページであるかどうか
- 現在のユーザーが管理者権限を持つかどうかを判定するものではなく、管理画面が表示されている状態かどうかを確認する目的で使用される
- is_main_query()
- メインクエリかどうか
- クラスのメソッド
- is_front_page()
- front.php存在確認
- frontはサイト全体のトップページを自由にカスタマイズするためのテンプレート(最優先にロードされる)
- is_home()
- home.php存在確認
- homeはブログの投稿一覧ページ(投稿インデックス)をカスタマイズするためのテンプレート(最新の投稿一覧)
- is_single()
- 投稿記事存在確認
- is_singulare()
- 引数に投稿タイプを入れてそれの存在確認をする
- カスタム投稿タイプを使用しているときに使える
- the_posts_pagination()
- ページタブの表示
- add_action()
- アクションフック、第一引数にフックする関数(アクション)
- 第二引数に追加する関数名(自分で作った関数)
- add_filter()
- フィルターフック、第一引数にフックする関数(アクション)
- 第二引数に追加する関数名(自分で作った関数)
- アクションとはフックする関数が呼ばれるタイミングと内容で使い分ける
サブクエリ(任意のページのデータをDBから取得する)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
<?php $a = [ //クエリする条件を連想配列にする 'post_type' => 'post', //記事の種類 通常の記事(カスタムではない) 'posts_per_page' => 5 //ページ数 ]; $b = new WP_Query($a); //引数の条件のデータを取得するクラスをインスタンス化 ?> <?php //通常のデータ表示処理にインスタンス化した変数を追加 if ($b->have_posts()){ while ($b->have_posts()){ $b->the_post(); //表示灯の処理 } } wp_reset_postdate(); //メモリの解放(the_post()の)、必須 ?> |
アクションフック
特定の関数に処理を追加、または変更することができる
例:メインクエリで取ってくる最新の投稿10件分を特定の投稿タイプの時だけ9件に変更する
※functions_php に書く
1 2 3 4 5 6 7 8 9 10 11 12 |
<?php function change_set_post($query){ if(is_admin() || !$query->is_main_query()) { return; } if(&query->is_post_type_archive('works')) { //worksタイプの投稿なら $query->set('posts_per_page', 9); //取ってくる最新の投稿記事数を9件に return; } } add_action('pre_get_posts', 'change_set_post'); //フック関数、第一引数にフックする関数第二引数に自作関数 //pre_get_postsはメインクエリが実行される直前の関数 |
xmlを扱う
準備として
file_get_contents()でxmlファイルを読み込み、
simplexml_load_string()でオブジェクト化する。
simplexml_load_file(‘ファイルパス’)でもok、これなら一行。
出来たオブジェクトからアロー演算子でアクセスする。
1 2 3 4 5 6 7 8 9 |
//xml中身 <Body>あああ</Body> <?php $a = simplexml_load_file('~~.xml'); echo $a->Body; //結果 //あああ |
xpathが使用可能
要素にアクセスする場合に xpath で指定することができ、直接アクセス可能。
ただし xml に名前空間(xmlns属性)がある場合、SimpleXMLElement
のxpath
はそのままでは要素を見つけられません。
xmlns= “~~” がある場合は registerXPathNamespace(‘変数’, ‘~~’) を使用してからパスの前に : を使って記述する。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
<?php //xml中身 <Control><Body>あああ</Body></Control> <?php $a = simplexml_load_file('~~.xml'); echo $a->xpath('//Body')."\n"; //xml中身 <Report xmlns="~~/" xmlns:jmx="~~" xmlns:jmx_add="~~"> // <Control><Body>いいい</Body></Control> $b = simplexml_load_file('~~.xml'); $c->registerXPathNamespace('変数', '~~'); // 実際のXMLの名前空間URIに合わせて変更(目的のパスの直上にあるxmlns=" ") echo $c->xpath('//変数:Body'); //結果 //あああ //いいい |
json変換
1 2 3 4 5 |
<?php $obj = simplexml_load_file('~~.xml'); $json = json_encode($obj, JSON_UNESCAPED_UNICODE | JSON_PRETTY_PRINT); //json形式へ $test = json_decode($json, true); //配列にデコード |
コメント