otaku-tokyo

 

PHP

記事の移行

①画像を移行する場合はDeMomentSomTres Exportをインストール ②ツール > エクスポート でXMLファイルをDL ➂ツール > インポートで「WordPress」の「今すぐインストール」をクリックして「インポーターを実行」をクリック ④投稿者名を変更してXMLファイルのインポート実行して完了

一部のカテゴリーの記事のHTML、CSSを変えたい

<?php if( in_category(‘スラッグの英数字’) ){ get_template_part( ‘single-special’ ); } else { get_template_part( ‘single-normal’ ); } ?>

条件分岐

トップページ<?php if( is_front_page() || is_home() ): ?>~

固定ページ<?php if( is_page() ): ?>~

固定ページ(ID) is_page(5)

固定ページ(スラッグ)is_page(‘about’)

固定ページ(タイトル)is_page(‘このサイトについて’)

複数の固定ページ <?php if( is_page(array(5,’about’,’このサイトについて’))): ?>~

個別投稿ページ<?php if( is_single() ): ?>~

個別投稿ページ(ID) is_single(5)

個別投稿ページ(スラッグ)is_single(‘about’)

個別投稿ページ(タイトル)is_single(‘このサイトについて’)

複数の個別投稿ページ <?php if( is_single(array(5,’about’,’このサイトについて’))): ?>~

アーカイブページ<?php if ( is_arhive() ) : ?>

カテゴリーページ<?php if ( is_category() ) : ?>

ID、スラッグ、タイトル、複数の場合は同様

タグページ<?php if ( is_tag() ) : ?>

ID、スラッグ、タイトル、複数の場合は同様

アイキャッチ画像が指定されている場合<?php if ( has_post_thumbnail() ) : ?>

2ページ目以降<?php if ( is_paged() ) : ?>

モバイルページの場合<?php if ( wp_is_mobile() ) : ?>

ドット

変数と文字列の連結、変数同士の連結、文字列同士の連結が可能

<?php

echo $userName.”さん”;

echo $userName.$age;

?>

 

変数展開

<?php echo “Hello,{$name}!” ?>

 

switch文

if~elseif~elseによる分岐が多く複雑な場合に用いる

switch($coin){

case 0: echo “red”; break;

case 1: echo “yellow”; break;

default: echo “green”; break;

}

 

配列の追加や上書き

$names = array(“John”,”Kate”,”Bob”);

$names[] = “Mary”;

$names[1] = “Jane”;

 

連想配列の追加や上書き

$user = array(“name”=>”John”,”age”=>14);

$user[“gender”] = “male”;

$user[“age”] += 5;

 

for

3の倍数以外を表示

for($i=1; $i<=100; $i++){

if($i%3==0){continue;}

echo $i;

}

 

while

$i = 1;

while($i<=100){echo $i.”<br>”; $i++;}

 

foreach

$towns = array(“Tokyo”,”Osaka”,”Kyoto”);

foreach($towns as $town){echo $town;}

 

$colors = array(“Apple”=>”Red”,”Banana”=>”Yellow”);

foreach($colors as $key => $value){

echo $key.”の色は”.$value;

}

 

HTMLに埋め込む際は「{」の代わりに「:」、「}」の代わりに「endforeach」と記述する。これはendif/endfor/endwhile/endswitchも同様。

<?php $words=array(“apple”,”banana”); ?>

<?php foreach($words as $word): ?>

<p><?php echo $word; ?></p>

<?php endforech ?>

 

組み込み関数

echo strlen(“Progate”); //results:7

$towns = array(“Tokyo”,”Osaka”);

echo count($towns); //results:2

echo rand(1,4); //1~4のランダムな整数を返す

 

自作関数

関数を呼び出す際echoは不要

function sum($num1,$num2){

return $num1 + $num2;

}

sum(1,7);

formタグ

$_POST=array(“email”=>”●●”)として格納される

<form action=”sent.php” method=”post”>

<input type=”text” name=”email” value=””>

<textarea name=”content”></textarea>

<input type=”submit” value=”送信”>

</form>

[sent.php]

<?php echo $_POST[“email”]; ?>

<?php echo $_POST[“content”]; ?>

セレクトボックス

<form action=”sent.php” method=”post”>

<select name=”age”>

<option value=”未選択”>選択してください</option>

<option value=”二十歳”>20代</option>

</select>

</form>

[sent.php]

echo $_POST[“age”]; //results: 二十歳

↓forを使えばこんな感じ

for($i=1; $i<4; $i++){

echo “<option value=”{$i}”>{$i}</option>”;

}

クラス

class内でプロパティやメソッドを定義

クラスを元にインスタンスを生成

<?php

class Menu{

public $name;

public function hello(){echo “Hello!”;}

}

$curry = new Menu();

 

$curry->name = “CURRY”;

echo $curry->name; //結果:CURRY

$curry->hello(); //関数なのでecho不要

?>

 

$this

メソッド内でインスタンスのプロパティやメソッド(およびインスタンス配列)にアクセスしたいときに用いる変数

class Menu{

public $name;

public function hello(){echo $this->name;}

}

$curry=new Menu();

$curry->name=”CURRY”;

$curry->hello();

 

 

__construct()

インスタンスを生成する時に、このメソッドが自動的に呼ばれる

class Menu{

public function __connstruct(){echo “Hello!”;}

}

$curry = new Menu();

 

 

このメソッドは引数をとれる

class Menu{

public function __construct($name){

echo $name;}

}

$curry = new Menu(“CURRY”);

 

引数をプロパティの値としてをセットすることも可能

class Menu{

public function __construct($name){

$this->name=$name;}

}

$curry = new Menu(“CURRY”);

echo $curry->name;

 

ファイルの読み込み

<?php require_once(“data.php”); ?>

<img src=”<?php echo $curry->image; ?>”>

 

 

カプセル化(難易度★★★)

クラス内で設定したプロパティやメソッドをクラス外から取り出せなくすること

以下の例だと$nameが使えない為エラーが発生する

class Menu{

private $name;

public function __construct($name){

$this->name = $name;}

}

$curry = new Menu(“CURRY”);

echo $curry->name; //error!

$curry->name = “COFFEE”; //error!

 

そこでプロパティを取り出すための「ゲッター」というメソッドとプロパティの値を変更するための「セッター」を用意する

class Menu{

private $name;

public function __construct($name){

$this->name=$name;}

public function getName(){

return $this->name;}

public function setName($name){

$this->name = $name;}

}

$curry = new Menu(“CURRY”);

$curry->setName(“GREENCURRY”)

echo $curry->getName();

 

フォームの作成

<?php

class Menu{

private $name;

public function __construct($name){

$this->name = $name;}

public function getName(){

return $this->name;}

}

$curry = new Menu(“CURRY”);

?>

<form action=”confirm.php” method=”post”>

<input name=”<?php echo $curry->getName() ?>” value=”0″>

<span>個</span>

<input type=”submit” value=”注文する”>

</form>

 

[confirm.php]

echo $_POST[$curry->getName()]

 

クラスプロパティ(難易度★★★)

staticをつけるとクラスプロパティになる

クラス内でクラスプロパティにアクセスする際はselfという変数を使う

class Menu{

public static $count = 0;

public function __construct(…){

self::$count++;}

}

echo Menu::$count;

クラスプロパティのアクセス権をprivateにしてみる

class Menu{

private static $count = 0;

public static function getCount(){

return self::$count;}

}

echo Menu::getCount();

継承

独自のプロパティを設定

class Drink extends Menu{

private $type;

public function getType(){

return $this->type;}

public function setType($type){

$this->type = $type;}

}

$juice = new Drink(“JUICE”);

$juice->setType(“アイス”);

 

instanceof

$coffee = new Drink(“COFFEE”);

if($coffee instanceof Drink){

echo $coffee->getName().”はDrinkクラスのインスタンスです”;}

if($coffee instanceof Food){

echo $coffee->getName().”はFoodクラスのインスタンスです”;}

protected

親クラスで定義したメソッドを子クラスで上書きする(オーバーライド)際、private $nameだと子クラスでエラーが起きる。

アクセス権をprotectedにすると、そのクラス内からと、そのクラスを継承している子クラス内からのみアクセスできるようになる。

class Menu{

protected $name;

public function __construct($name){

$this->name = $name;  }

}

class Drink extends Menu{

private $type;

public function __construct($name,$type){

$this->name = $name;

$this->type = $type;}

}