クロピグログ

職業訓練で学んだことまとめ

【WordPress授業三日目】PHPの基本,WP特有のルール

PHPの基本

サーバに入れたフォルダ「wp-content」以外はWardPress更新時に変更になる可能性があるので、基本いじっても更新されるので注意

 

WordPressでは連想配列をレコード取得の条件によく使う

$args = [
  'posts_per_page' => 3,
  'category_name'  => 'bookreview',
  'orderby'        => 'date',
];

部屋の名前が「条件名」

部屋の値が「条件に対する値」

'posts_per_page'は「何件分取得?」(データベースのLIMITと一緒)

'category_name'は「何カテゴリ?」

'orderby'は「並び替えどうする?」

 

●まとめ

変数argsには連想配列でレコード取得の条件を作成

 

get_postsはDBからページ情報を取得する関数

$posts_array = get_posts($args);
echo '<pre>';
var_dump($posts_array);
echo '</pre>';

引数:連想配列で指定した条件

戻り値:DBから得たページ情報

elearn.jp

wpdocs.osdn.jp

 

 

●よく使うループ

<?php while (have_posts()) : the_post(); ?>
 
 ページ情報
<?php endwhile?>

WordPressの世界で「ループ」といった時は主にDBから取得したページ情報をページの数分繰返し処理することを言う

 

■ have_posts()

DBから取得したデータのポインタ位置にレコードがあるか真偽値を返す

戻り値:レコードがある「true」ない「false」

最後まで進んで「false」を返す際にポインタ位置を先頭に戻す

 

■ the_post()

ポインタ位置のレコード(ページ情報)をWordPressが用意している$postにセットする

ポインタ位置を次に移動

WordPress内で暗黙的に用意されている変数がいくつかあるので注意

例)$post等

 

■ オブジェクトとは

●1番目のコード

function return_price()
{
 
  global $date;
  if ($date >= 20191001) {
    $price = 1240;
  } else {
    $price = 1200;
  }
  return $price;
}
 
$date = date('Ymd');
$price = return_price();
echo $price;

globalキーワード付きで変数名を指定するとその変数はグローバルスコープ(今回は関数外)にある変数を参照しにいくようになる

 

date関数:日付の書式を取得
Y:4桁年
m:2桁月
d:2桁日
2020年11月5日の場合は「'20201105'」

 

●2番目のコード

//プログラムの世界には値や処理をまとめて
//オブジェクトとして管理するという概念がある
//このオブジェクトをPHPで実装するときは「class」を利用する

//「class」キーワードを使ってクラスを作成
//クラス名は命名規則に則っていれば好きにつけてOK
//ただし暗黙ルールとしてクラス名は頭文字大文字

 
class Price
{
  クラス名の変数は「プロパティ」
  protected $price;
  public $date;
  アクセス修飾子:参照できる範囲
  ・public:どこからでも参照可能
  ・protected:同一クラス名と継承クラスから参照可能
  ・private:同一クラス内のみ

  クラス内の処理は「メソッド」
  public function return_price()
  {
    if ($this->date >= 20191001) {
      this:自分自身(Priceインスタンス)
      $this->price = 1240;
    } else {
      $this->price = 1200;
    }
    return $this->price;
  }
}
Priceクラスのインスタンス(クラスのコピー)を生成
Price():コンストラクタの呼出し
※教科書だと()と省略しているが()は必ず書いたほうがよい
出来上がったインスタンスを変数priceに代入
$price = new Price();
左辺:$priceと紐づけられているインスタンス内のdateプロパティ
右辺:本日の日付文字列を取得
まとめ:インスタンス内のdateプロパティに本日の日付文字列を代入
$price->date = date('Ymd');
インスタンス内のreturn_priceメソッドの呼出し返り値の価格をechoで出力
echo $price->return_price();

 

 

JSの場合

プロパティの参照

オブジェクト . プロパティ名

メソッドの呼び出し

オブジェクト . プロパティ名 ( ) 

 

PHPの場合

プロパティの参照

オブジェクト(クラス) -> プロパティ名

メソッドの呼び出し

オブジェクト(クラス) -> プロパティ名 ( ) 

 

PHPでオブジェクトを使用する方法


◇クラス(設計図)を作成
class クラス名(頭文字大文字) {
 //スタティックプロパティ:アクセス修飾子 プロパティ名
 public static $プロパティ名;
 protected static $プロパティ名;
 private static $プロパティ名;

 //インスタンスプロパティ:アクセス修飾子 プロパティ名
 public $プロパティ名;
 protected $プロパティ名;
 private $プロパティ名;

 //スタティックメソッド:アクセス修飾子 メソッド定義
 public static function メソッド名(引数) {
  //メソッドの処理

  return 戻り値;
 }

 //インスタンスメソッド:アクセス修飾子 メソッド定義
 public function メソッド名(引数) {
  //メソッドの処理

  return 戻り値;
 }
}


◇クラスを利用する場合はインスタンス化する
$変数 = new クラス名();

 

インスタンス内のプロパティ利用
インスタンスプロパティ)
$変数(インスタンス)->プロパティ名;

 

インスタンス内のメソッド利用
インスタンスメソッド)
$変数(インスタンス)->メソッド名(引数);

 

◇クラスのプロパティ
(スタティックプロパティ・静的プロパティ)を利用
クラス名::プロパティ名;

 

◇クラスのメソッド
(スタティックメソッド・静的メソッド)を利用
クラス名::メソッド名(引数);

 

オブジェクトからデータを取り出す

$postdata = get_post(1);
 
echo $postdata->post_title;
echo $postdata->post_date;
echo $postdata->post_name;
echo $postdata->comment_count;

 

配列からデータを取り出す

$cat = get_the_category(1);
echo $cat[0]->cat_name;

 

型と変換

$val = 10;
var_dump($val);
var_dump((string)$val);

「(データ型)値」と記述することで明示的に型変換することができる

明示的変換を「キャスト」と呼ぶ

 

WordPress特有のルール

■ テンプレートタグとの違い

DBから必要な情報を取得して利用する

 

1.the_○○ ( )

・DBから値を取得して出力する

・echo不要

サニタイズをして出力してくれている

サニタイズXSS対策(悪意ある値対策)

 

2.get_the_○○ ( )

・DBから値を取得する

・生の値のみ取得

 出力時はHTMLタグを自前で組む必要あり

 ただしカスタマイズしやすい

・echoしないと出力されない

・出力時にサニタイズしなければいけない

 

●the_category()とget_the_category()の違い

the_category()の場合

the_category();

↓この記述だけで下が出力される

 

<ul class="post-categories">
  <li>
    <a href="http://localhost/mdn01/category/uncategorized/" rel="category tag">
      未分類
    </a>
  </li>
</ul>

 

get_the_category()の場合

$cat = get_the_category();
echo '<pre>';
var_dump($cat);
echo '</pre>';

↓この記述で出力される

array(1) {
[0]=>
object(WP_Term)#3804 (16) {
["term_id"]=>
int(1)
["name"]=>
string(9) "未分類"
////略
["cat_name"]=>
string(9) "未分類"
["category_nicename"]=>
string(13) "uncategorized"
["category_parent"]=>
int(0)
}
}