WordPress:投稿記事数回毎にタグで囲む。%使う

記事4回ごとにdiv class=”row”でくくりたい

当方Bootstrapをよく利用しているので、
1行の中でに4つカラムいれたい、なんてよくあります。
そこで見つけた記事。

記事を決められた数毎にタグ(div等)で囲みたい

おぉ〜ドンピシャ。

というわけで参考にしながらfunctions.phpに記載するように作り替えたのが、

//ターム$wikiを一覧化
function wiki($wiki){
	global $post;
	$str ='';
	if(is_page()){
		$args =array(
			'orderby' => 'ASC',
			'post_type' => 'page',
			'posts_per_page' =>-1,
			'tax_query' =>array(
				array(
				'taxonomy' => 'aiueo',
				'terms' => $wiki,
				'field' => 'slug',
				),
			),
		);
		$a = new WP_Query($args);
			if($a->have_posts()):
			
				$post_count = 1;//カウンターの初期化
				$str.= '<ul class="row">'."n";//最初の囲み
				
				while($a->have_posts()):
				
					$a->the_post();
					
					if(($post_count % 4 )== 1 && $post_count != 1) // 4で割った余りが1で、なおかつカウンターが1(最初)でなければ閉じulと囲みの開始タグを出力		
					{
						$str.='</ul>'."n".'<ul class="row">'."n";
							
					}else{
							
						if (has_post_thumbnail())
						{
									$str.='<li class="col-md-3">';
									$str.='<a href="'. get_the_permalink() .'">';									
									$str .=get_the_post_thumbnail($post->ID,'size175_160').'<span class="list_2">'.get_the_title().'</span>';
									$str.='</a>';
									$str.='</li>';
						}else{
									$str.='<li class="col-md-3">';
									$str.='<a href="'. get_the_permalink() .'">'.'<img src="'.get_template_directory_uri().'/images/noimage.png" alt="" width="175" height="160" /><span>'.get_the_title().'</span></a>';									
									$str.='</li>';
						}
					}
					$post_count++; // カウンターを1増やす 
			
				endwhile;	
								
				$str.= '</ul>'."n"; //最後にulを閉じる
						
			endif;			
		
		echo $str;
		wp_reset_postdata();
	}		
}			

で、できたーと思いながら記事を追加していたら
ん?おかしい。

表示されない記事がある

wiki___ぽちのベランダガーデニングとビオトープ

表示されない記事
なぜだ。
うーん。

コードを見直す。

$post_countが5の時、このタグが追加されて〜
ん?その記事を出力するのはどれだ。

ん?

参考にしたコードを見直す。

あ!!

不要なelse発見

$post_countが◯◯の時、タグ追加、それ以外は記事表示にしていた。
記事は毎回表示、かつ$post_countが◯◯の時はタグ追加。でした。

というわけで修正。

//ターム$wikiを一覧化
function wiki($wiki){
	global $post;
	$str ='';
	if(is_page()){
		$args =array(
			'orderby' => 'ASC',
			'post_type' => 'page',
			'posts_per_page' =>-1,
			'tax_query' =>array(
				array(
				'taxonomy' => 'aiueo',
				'terms' => $wiki,
				'field' => 'slug',
				),
			),
		);
		$a = new WP_Query($args);
			if($a->have_posts()):
			
				$post_count = 1;//カウンターの初期化
				$str.= '<ul class="row">'."n";//最初の囲み
				
				while($a->have_posts()):
				
					$a->the_post();
					
					if(($post_count % 4 )== 1 && $post_count != 1) // 4で割った余りが1で、なおかつカウンターが1(最初)でなければ閉じulと囲みの開始タグを出力		
					{
						$str.='</ul>'."n".'<ul class="row">'."n";
							
					}
							
					if (has_post_thumbnail())
					{
								$str.='<li class="col-md-3">';
								$str.='<a href="'. get_the_permalink() .'">';									
								$str .=get_the_post_thumbnail($post->ID,'size175_160').'<span class="list_2">'.get_the_title().'</span>';
								$str.='</a>';
								$str.='</li>';
					}else{
								$str.='<li class="col-md-3">';
								$str.='<a href="'. get_the_permalink() .'">'.'<img src="'.get_template_directory_uri().'/images/noimage.png" alt="" width="175" height="160" /><span>'.get_the_title().'</span></a>';									
								$str.='</li>';
					}
					
					$post_count++; // カウンターを1増やす 
			
				endwhile;	
								
				$str.= '</ul>'."n"; //最後にulを閉じる
						
			endif;			
		
		echo $str;
		wp_reset_postdata();
	}		
}	

elseを消去しました。

そして、無事に全記事表示されました!

wiki___ぽちのベランダガーデニングとビオトープ

他に参考になりそうな記事

WordPressで投稿記事を1行3カラムで表示させたい時の出力方法の例

WordPress:最終更新日の表示方法

日報のやることリストにずっとあった

「最終更新日の追加」をやってみた。

参考にした記事
WordPressの記事に「最終更新日」を表示する方法

簡単過ぎてびっくりした。

使ったテンプレートタグ
日本語Codex

get the date

the modified date

記事投稿日の日付

<?php echo get_the_date(); ?>

最終更新日の日付

<?php echo get_the_modified_date(); ?>

これだけ。

パラメータが指定されない場合、管理パネル > 設定 > 一般設定 にある日付フォーマットの設定が適用されるので
なおさら簡単。

the_dateと get_the_date
だったり
the_modified_date と get_the_modified_date
とgetがついたりつかなかったりの区別は、getがつくと
シンプルに日付だけ返す。という理解でよいのかしら。
そしてその際は echo を忘れずに。と。

私はgetがあるタイプを使ったので、更新されてない場合は更新の日付はださないコードは

<?php if (get_the_modified_date() != get_the_date()) :?>	
最終更新日:<?php echo get_the_modified_date(); ?>
<?php endif; ?>

になりました。

【基礎】比較演算子

これは、多分
==」だけを気をつければなんとなくわかる気がする。

a==b aとbが等しい
a!=b aとbが等しくない
a<b aはbより少ない
a>b aはbより多い
a<=b aはbより少ないか等しい
a>=b aはbよい多いか等しい
if($a >=5) → 変数$aの値が5以上だったら〜
if($a == $b) →変数$aと$bの値が等しければ〜

PHPマニュアルから。

$a === $b → $a が $b に等しく、および同じ型である場合に TRUE 。

【基礎】論理演算子 && ||

WordPressのif文でよく使われる論理演算子。

条件A&&条件B:条件Aと条件Bを両方満たす
条件A||条件B:条件Aと条件B:のどちらかを満たす
!条件A:条件Aを満たさない

「条件Aをと条件Bの両方を満たす、もしくは
条件Cを満たすかどうか」

(条件A&&条件B)||条件C

「!is_home」:メインページが表示されていなかったら。

【基礎】論理演算子 && ||

WordPressのif文でよく使われる論理演算子。

条件A&&条件B:条件Aと条件Bを両方満たす
条件A||条件B:条件Aと条件B:のどちらかを満たす
!条件A:条件Aを満たさない

「条件Aをと条件Bの両方を満たす、もしくは
条件Cを満たすかどうか」

(条件A&&条件B)||条件C

「!is_home」:メインページが表示されていなかったら。

【基礎】PHP:foreach文

WordPressばかりやっているので、
なかなかPHPの基礎を勉強する時がない。
今日こそ。

参考にした本

最近はこればかり使っているなぁ。引用しています。

foreach文は配列の要素の数だけ繰り返せ!

while文との違いは?

while文:ある条件に当てはまっている間は、指定した処理を繰り返す
例)記事がある間繰り返して!

foreach文:配列の要素の数だけ繰り返す

基本構造

foreach($a as $b){
  配列$aの要素の数だけ繰り返す処理
}

「配列$aの1つ1つの要素を、変数$bとして扱う」
とのこと。
$がでてきただけでわけわからなかったなー。

例をだすと、
$vegetables という配列がございます。
その一つ一つの要素を$vegetable として扱うとなる。

少しわかった。

配列$vegetables には tomato、basil、eggplantの値が入ってる。

foreach($vegetables as $vegetable){
  echo $vegetable;
}

とすると、
1回目の$vegetableの値は「tomato」
2回目の$vegetableの値は「basil」
3回目の$vegetableの値は「eggplant」
が表示されて、
4回目には要素がなくなるので、繰り返しが終了される。

確かに便利だな。

これも、{}(ブレース)を使わずに書くことができる。

foreach($a as $b):
ここに繰り返す処理
endforeach;

なるほどねぇ。
この2通り書くパターンがあることに混乱したけど、
HTMLを書く時に、これがとても便利ってのはわかるようになりました。

WordPressではいつ使う?

カテゴリーの名前やURLを取得する

利用する関数
get_cat_name:IDからカテゴリーの名前を取得する
get_category_link:カテゴリーのURLを取得する

<?php
foreach($ancestors as $ancestor):
?>
	<li><a href="<?php echo get_category_link($ancestor); ?>">
		<?php echo get_cat_name($ancestor); ?></a></li>
	<li>$gt;</li>
<?php
endforeach;
?>

パンくずリストを表示させる一部分に利用。
全体を書くと、これまたわけわからないのがでてきたので、
ひとまず
foreachは配列を一つ一つ繰り返し!だけ覚えて今回は終了!

カスタムフィールド未入力時に項目ごとOFFもしくは表示する方法

はじめに

タイトルの日本語が果てしなくわかりづらいですね。
ごめんなさい。国語の偏差値2ですので、ご了承ください(´;ω;`)ウッ…

さて、お仕事で
カスタムフィールドを未入力のまま登録されると、デザインが崩れてしまっておりました。
そのための対応方法です。

まずは仕様を確認

例えば、
「果物:りんご」の「りんご」の部分がカスタムフィールドの場合
「果物:   」と表示するか、「果物:」の行すら出力しないかってことです。

1.未入力時に項目ごとOFFするかどうか

「(行すら出ない)」のパターンですね。
未入力の場合は・・・・
「if文」ですね。きたーーー!!!!苦手なif文だ!!
まずは、参考サイトがないかググってみる。
ありました。

WordPress|カスタムフィールドで値無記入の場合、項目非表示。

フリーランスWEBデザイナーの仕事

<?php if(get_post_meta($post->ID,'wpcf-fruit',true)): ?>
<div class="fruit">果物:<?php echo get_post_meta($post->ID,'wpcf-fruit',true); ?></div>
<?php endif; ?>

なるほど。タグごとif文で囲ってしまえばいいんですね。

2.未入力時は項目は残して出力する

「果物:   」のパターンですね。

基本的にこういった場合2パターンあると考えられます。

  • 「& nbsp;(←余白は抜いて記載)」を入れる
  • CSSでどうにかする

min-heightを指定すればデザインが崩れずにいけるかなと思った私は、
デザイナーさんに確認してみました。

すると
height系で調整の場合、ブラウザでフォントサイズを大きくされると崩れる危険がある
とのことでした。

なーるーほーど!!!!

なので、
「「& nbsp;(←余白は抜いて記載)」を入れる」で処理することにします。

コードは

<?php if(post_custom('fruit')): ?>
	<li><?php echo post_custom('fruit'); ?></li>
<?php else: ?>
	<li><?php echo '&nbsp;'; ?></li>
<?php endif; ?>

ん?post_costomとは?

コピペしていると何気なく使っちゃってるんですよね。
日本語CODEXではヒットしないようです。

指定したキーに対して入力した値が1つだけの場合
参考サイト→カスタムフィールドの指定したキーの値だけ表示する方法

に使えるようなので、get_post_metaで書きなおしましょう。

<?php if(get_post_meta('fruit')): ?>
	<li><?php echo get_post_meta('fruit'); ?></li>
<?php else: ?>
	<li><?php echo '&nbsp;'; ?></li>
<?php endif; ?>

ですね。

最後に

&nbsp;

↑をそのまま表示できなくて(空白になる)苦戦してしまった・・・
結局あきらめて、&の後に半角スペースいれました(´;ω;`)ウッ…

WordPressでカスタムフィールド内の改行をそのまま表示させる

はじめに

改行がうまく反映されずにぐぐっていたらドンピシャな記事がありましたので
リンク貼りますね。

WordPressでカスタムフィールドの改行を反映して表示させる

まちいろ

改行にはPHPの関数「nl2br」

PHPを全く知らずに入ったものからすると、当たり前ですが、初耳〜
そもそもなんて読むの?と思ったらあるもんですね。

えぬえるつーびーあーる
nlはnewlinesの略、brはbr要素(break)。

読み方プロトコル

&lt;?php echo nl2br(get_post_meta($post-&gt;ID,'フィールド名',true)); ?&gt;

とはいえ簡単で、これだけでちゃんと表示されます。

ただ、エスケープ処理がされていない!!

エスケープ処理をどこに入れるかが問題

初心者の私からすれば、エスケープ処理自体まだなれない。
そんなこと言ったら、カスタムフィールドすらまだ慣れてない笑

そこにさらに、改行のコードが入る〜〜〜!!!
PHPってそもそもどうやって書くのーーーー!!!!!!!!!

私「なんていうか、どんどんコードが入れ子になるんですけど(´;ω;`)ウッ…」
先輩「PHPの文法自体は問題ないっす!!!」

とのことでしたので。

&lt;?php echo nl2br(esc_html(get_post_meta($post-&gt;ID,'フィールド名',true))); ?&gt;

でOKです!

改行とエスケープ処理を入れ替えると

&lt;br /&gt; &lt;br /&gt; 

が表示されちゃいますので、順番が大事です!

WordPressで画像写真を好きなサイズに変更する方法とプラグイン紹介

WordPressの写真保存の仕組み

WordPressは、画像をアップロードすると自動的に3種類の大きさの画像が生成され、
記事の本文に挿入する時に大きさを選択する事ができます。

当初はこれすらも意味がわかりませんでした・・・
管理画面から、上記の3種類のサイズを調整することも可能ですが、
functionsに新たに違うサイズを生成する方法をご紹介します。
これを使えばいくらでも増やしていけます。

後ろの方にプラグインでなんとかする方法もあるので、
手っ取り早い方が好みの方はそちらへ。

functionsに自動生成する画像サイズのキーワードとサイズを追加

たとえば、横600、縦200のサムネイル画像を追加で作りたい場合。

functions.phpに

//自動作成する画像サイズ
add_image_size('size600_200',600,200,true);

と記載します。
()内のパラメータは
「’画像サイズを示すキーワード(好きなやつ)’,’横幅’,’高さ’,’画像の切り抜きを行うか否かを指定’」です。

詳しくはWordPressのCODEXで。
と言いつつも、最初の頃はこのCODEXがとっつきにくくて苦手でした笑

出力方法はthe_post_thumbnailで

画像の作成ができたので、今度は出力ですね。
出力したいテンプレートに

<?php the_post_thumbnail('size600_200'); ?>

でOKです。先ほどつけた名前を書いてあげて呼び出します。

今になって思うと、そんなに難しい事ではないんですよね。

いままでアップした画像の一括再生成

さて、新しく画像サイズを生成するので、今までアップロードした写真は
再度アップロードしなければいけなくなります。
が、量によっては大変。という時に、便利なプラグインがあります。
「Regenerate Thumbnails」です。使い方はググってください。

おおきな横長のサムネイルが欲しかった人向けの今までアップロードした分も新しいサイズでサムネイル作成してくれるプラグインAuto Post Thumbnail


記事の最初に細長の画像があるサイト多いですよね。
あんな目を引く画像をアイキャッチ画像といいますが、
これを勝手に生成してはたまた、記事のTOPに出力してくれるプラグインがあります。
勝手にはつくってくれませんでした・・・
twentytwelveを改造して作ったので、つい勝手にと・・・
1から作っている方は、functions.phpや表示したいテンプレートにコードを書く必要があります。(2014/09/11追加)

ちなみに投稿した画像の最初の写真を自動で持ってきます。

Auto Post Thumbnailというプラグインです。
こちらも使い方はぐぐってください。
参考サイトはこちら→新しい記事も過去の記事も全部自動でアイキャッチを作成してくれるAuto Post Thumbnail

過去の写真もちゃんと生成してくれますよ〜

勝手にサムネイル作ってくれるのはいいけど、切り取って欲しいところが違うわ!な時はPost Thumbnail Editor

なんでもプラグインで済ませられても、
こうしたい、ああしたいは尽きないんですよね。

私は、トリミングする場所をどうにか自分で調節できないかと思いぐぐってみました。
あるんですね笑

Post Thumbnail Editorというプラグイン
こちらも使い方はググってみてください。
参考サイト→サムネイル(アイキャッチ)画像のトリミング範囲を手動で決められるWordPressプラグインPost Thumbnail Editor

最後に

当初自分でサイトを作った時は、一番最初の方法で、functions.phpに追加して作成しましたが、
後に私のやりたかったことはAuto Post Thumbnailのプラグインで十分だったことに気づいてしまいました笑

いままで、みんななんでこう上手にサイトを作れるんだろう。と思っていましたが、
こういったプラグインをうまく使えば、それなりに出来上がるものなんだなぁ。
というのが、プログラマになって半年たち思うことでございます。

参考にした本・サイト

思ったより簡単!WordPressのサムネイルを別サイズも含め作り直す方法!!

LIG

【超基礎編】PHPのif分の書き方を2通り理解する

いまだになじまないPHPのif文

WEBデザインから入り、WordPressに辿り着き、そこからPHPを勉強する人向け?(私がそう)
最初にプログラミング(PHP)から入る方はなんでそこでつまづくの?かもしれないです。
私、本当に、if文で既につまづいております!!

いろいろな書き方に惑わされる

初めて買ったWordPressの本にPHPはでてくるわけですが、
if文の書き方がころころ変わってるわけですよ。

:(コロン)使ってたり、{}(中括弧、ブレースともいうらしい)だったり、;(セミコロン)だったり、
endif;あったりなかったり

は??

(´;ω;`)ウッ…

そこで、もう一度ゆっくり基礎を

PHPの基本的な書き方は2つ

基本構文1

if(条件A){
	条件Aが満たされた場合に実行する処理;
}elseif(条件B){
	条件Bが満たされた場合に実行する処理;
}else{
	条件AもBも満たさない場合に実行する処理;
}

この{}(ブレース)で囲むやり方がピュア?な書き方のようです。

メモ

  • elseif以降は省略可能
  • 処理を複数行書いてもOK

基本構文2

if(条件A):
	条件Aが満たされた場合に実行する処理;
elseif(条件B):
	条件Bが満たされた場合に実行する処理;
else:
	条件AもBも満たさない場合に実行する処理;
endif;

条件の記述の後ろがブレースの変わりに「:(コロン)」を使う。
そして、最後に「endif;(←セミコロン)」がつく。

本当にこれだけ。
なのに、なんでわざわざ二通りの書き方をするのがワケがわからなかった。

で、なんでそんな事をするのかというと、

HTMLタグを直接記述する場合に構造が見やすくなる。

<?php if(条件A): ?>
	<h3>見出しa</h3>
<?php elseif(条件B): ?>
	<h3>見出しb</h3>
<?php else: ?>
	<h3>見出しc</h3>
<?php endif; ?>

基本構文1使うと

<?php if(条件A){ ?>
	<h3>見出しa</h3>
<?php }elseif(条件B){ ?>
	<h3>見出しb</h3>
<?php }else{ ?>
	<h3>見出しc</h3>
<?php } ?>

こんな感じかしら?あってる??(;´∀`)

私の解釈ですが、「コロン」は「さーて行う処理をこれから書くよっ!」で
「セミコロン」を使うものは「はい今処理書き込ましたよ!」で「endif;」は「はいっ!これで終了!」と認識しました。
そして、セミコロンもコロンもPHPを使うときであって、HTMLの時の処理に「;」はつけなくてよい。

WordPress始めて半年くらいたつけれど、PHPはまだまだすっきりわかっていない・・・
それでも、参考にした本は今読み返すと、わかるようになった部分が増えてきた!

参考にした本

WordPressでTypesカスタムフィールドを使った日付の表示方法

はじめに

お仕事でシングルテンプレート作成中につまづきました。
ちなみにやりたいことは、カスタムフィールドを簡単に作ることができるプラグイン「Types」で作った
カスタムフィールドの日付を表示したい。

例:開始日:2014/05/21(date_s) ~ 終了日:2014/8/31(date_e)
 ↑日付部分をカスタムフィールド(カッコ内がスラグ名)で作成中

日付がうまく表示できない

そこでせんぱーーい!!!

カスタムフィールドの日付表示方法

1970-01-01 00:00:00からの秒数を表す値 = Timestamp値が入ってます

そもそも、Typesで作成したカスタムフィールドの日付にはTimestamp値が入っているらしい。

(デジタル・)タイムスタンプってなんだ?

コンピュータやデジタルカメラ等の電子機器にて記録されるタイムスタンプ(他との区別のため「デジタル・タイムスタンプ」 英: Digital timestampとも呼ばれる[2]。)は出来事(イベント)が発生した時刻そのものを指すのではなく、コンピュータにイベントが記録された時刻を指す。多くの場合、その違いは重要ではない。タイムスタンプによりイベントが記録された時刻(例: ログ書き込み時刻)と記録されたイベントの発生時刻の差は極めて0に近づくべきである。

中略

タイムスタンプは次の意味でも使われる。
UNIX時間。1970年1月1日00:00:00 UTCからの経過秒数。プログラミングにおいてはこちらをさすことが多い。

タイムスタンプ – Wikipedia

ふむふむ。

なので基本としては、以下でよい。(Typsで作成したフィールドは先頭に「wpcf-」をつける)

$date_s = get_post_meta($post->ID, 'wpcf-date_s', true);
$start = date('Y年m月d日', $date_s);
echo $start;

ですが、

PHPはわりと最近のアップデートで「タイムゾーンを明示的に設定しておかないといけません」という仕様になりました。

とのことで、以下が正解になります。

date_default_timezone_set('Asia/Tokyo');
$date_s = get_post_meta($post->ID, 'wpcf-date_s', true);
$start = date('Y年m月d日', $date_s);
echo $start;

なるほど。

そして、そのままそれを私は利用したかというと、しなかったんです←オイッ
ググってでてきた「Types Fields API」の「types_render_field」を利用したんです。

ところが・・・
時刻がずれる可能性もあるかも?というこで利用をやめました。
そして続きが。

Warning: date() expects parameter 2 to be long, string given

こんな警告がでたとのこと。
和訳:「date()関数の第2引数はlong(長精度整数型)が求められていますが、string(文字列型)が渡されました」

2行目で、wpcf-date_sカスタムフィールドから値を取得した時に、値が入力されていれば日付を表す数値が入っています。
が、「なにも入力されていない」という場合もあり得るので、3行目でそのままdate()に渡してしまうと、「空の文字列」が渡されることになって先の警告が出るとのこと。

プログラミングでは、「例外処理」といって、
「入力してくれることを期待しているけれど、入力してくれないかもしれない」とか、
「数値を入れてくれるはずだけど、文字が入っているかもしれない」とか、
期待していないデータが渡ってくるケースのことも考える必要があります。

一般的に、期間を表すときは、

・「$date_s」に値が入っていなかったら、日付は空欄にする。
・調査期間の開始日がなくて終了日だけ入っている場合も空欄にする。
・開始日〜終了日の「〜」だけ表示されてたらおかしいので、開始日がなければ「〜」も表示しない。

といったルールが多いそうです。
ということで、以下になりました。

$date_s = get_post_meta($post->ID, 'wpcf-date_s', true);
$date_e = get_post_meta($post->ID, 'wpcf-date_e', true);

if ($date_s) {
	$start = date("Y年m月d日 h:i:s", $date_s);
	$end = date("Y年m月d日 h:i:s", $date_e);
	echo $start . '〜' . $end;
}

へぇ〜〜〜!!なんか、すごいなぁ。

参考にしたサイト

「Types」プラグインが便利(2)カスタムフィールド – IMAGINATION DESIGN

セキュリティ:カスタムフィールドのデータをエスケープする

雑談

カスタムフィールドを使った最初のお仕事としてWordPressのシングルテンプレートを作成しました。
そのコードに先輩から暖かい丁寧な添削が入ります。
理解するのに恐ろしい時間かかるけど、一つ一つ理解していかねば。
更新日時は教えてもらった日に設定

カスタムフィールドのデータをエスケープ

運用担当者がヘンなデータを入れた場合に
表示が崩れたり脆弱性ができたら大変

ということで、

<?php echo get_post_meta(); ?>

に一手間加えてあげるそうです。

esc_html()を加えるだけっ!

<?php echo esc_html(get_post_meta()); ?>

エスケープってそもそもなんなの?

マークアップ言語やプログラミング言語で文字列を扱う際に、その言語の文法や処理系にとって特別な意味や機能を持つ文字や記号(およびその並び)を、一定の規則に従って別の文字列に置き換えること。

例えば、HTMLはタグの記述に「<」「>」という記号を用いるため、この記号そのものを文字として表示することは本来できない。このとき、「<」「>」という特殊な表記法に置き換えることで、それぞれ「<」「>」と表示することができる。このような置き換え操作・処理のことをエスケープ処理という。

エスケープ処理とは – IT用語辞典 e-Words

あ、そういうことだったのか。
「<」を「<」じゃなくするんだな。うん。

カスタムフィールドの数が多い時の処理にfunction.phpに関数作成

さて、さらに教わった事。
フィールド数が多いと毎回書かなきゃいけなくて面倒。そのために、function.phpにひとつ関数を作ってあげると便利らしい。
(今回は「cf」なんだろう)

function cf($post_id, $fieldname, $single) {
    $cf = get_post_meta($post_id, $fieldname, $single);
    if ($single) {
        echo esc_html($cf);
    } else {
        return $cf;
    }
}

とのこと。
引数はget_post_metaと同じにして、
第三引数の「$single」がtrueだった場合は、取得したフィールドの内容をエスケープ処理(esc_html())してからechoする。
$singleがfalseの場合は、get_post_metaと同じ動きをする。(つまり、$single = true以外で使っても意味がない。)

とのこと。

<?php echo get_post_meta($post->ID, 'fieldname', true); ?>

にしたところは、

<?php cf($post->id, 'fieldname', true); ?>

に変更すればOK!

「$single」がtrueだった場合にしたのはなぜだろう?
と疑問でしたが、

$singleは複数の値を入れる事ができ、そのときsingleにfalseを指定すると、戻り値を次のような配列で受けとるらしい。

Array
{
   [0] => これは値1です。
      [1] => これは値2です。
}

だから、falseの時にエスケープしちゃうとちゃんとひっぱってこれないよってことなのかしら?
うーんよくわからない。とりあえず、配列がある時はまたの機会に考えよう。

その他のエスケープ処理

他にもまだエスケープ処理する関数があるらしい。
ざっくり書くと

esc_attr()

HTMLの属性値として出力するとき
※現時点でesc_htmlと同じ処理をするらしい。将来はわからないから今から適切に書きましょうとのこと。

esc_url()

URLとして適切でない文字を除去

参考にした図書

ちなみに↓は全然基礎じゃないと思う(・∀・)