WP: フィルター,アクション フックについて

PHP の記述もざっとチェックしたので,次は WordPress 仕様についてチェックしていきます.
フィルター,アクション フックは特徴的な機能みたいなので最初にチェックしてみます.

次のサイトの記事を見るとざっと機能について把握することが出来ました.
とりあえずは詳細な情報より,分かった気になれるまとめられた記事が良いですよね.

参考: WordPressカスタマイズの幅が劇的に広がる、フィルターフックとアクションフックの使い方

簡単にまとめると,あらかじめ定義されている処理タイミングに処理を追加する機能のようです.
では,どういう定義されている処理タイミングがあるかというと,以下のページに書かれているはずです.

参考: プラグイン API/フィルターフック一覧
参考: プラグイン API/アクションフック一覧

サンプルで1つ試してみます.
以下のフィルタを使用してみます.

the_title
画面を表示する前にデータベースから取得した投稿タイトルに適用される。(トラックバックなどの他の操作でも使用)
以下のように WordPress では使用されています.
1
2
3
4
5
<p class="wp-embed-heading">
	<a href="<?php the_permalink(); ?>" target="_top">
		<?php the_title(); ?>
	</a>
</p>

functions.php に以下の処理を追記します.

1
2
3
4
function my_the_title($title, $id) {
	return 'ID='.$id.$title;
}
add_filter('the_title', 'my_the_title', 10, 3);

WordPress を起動すると記事タイトルの先頭にIDが付加されました.

ここまで,やって以下の疑問が沸きました.
1. 処理は functions.php に追記で良いのか?
2. add_filter() の第4引数を調べる方法は?

apply_filters( 'the_title', $page->post_title, $page->ID )

ここをチェックするしかないのかな?

今後,調べたいと思います.
まぁ,フィルター,アクション フックはなんとなく分かった気になれました.

WP: セッションストレージの使い方

WordPress のコードをみていて,知らない処理があったのでメモしておきます.

「ログアウト時に保存されている投稿データをすべて削除」とあります.
HTML5で追加されたAPIなので,使用可否を行っているのでしょう.

1
2
3
4
5
6
7
8
9
10
/*
 * Remove all stored post data on logging out.
 * This could be added by add_action('login_head'...) like wp_shake_js(),
 * but maybe better if it's not removable by plugins.
 */
if ( 'loggedout' == $wp_error->get_error_code() ) {
	?>
	<script>if("sessionStorage" in window){try{for(var key in sessionStorage){if(key.indexOf("wp-autosave-")!=-1){sessionStorage.removeItem(key)}}}catch(e){}};</script>
	<?php
}

値を保存しているのは,autosave.js にありました.

1
2
3
4
5
function autosaveLocal() {
		(省略)
	function getStorage() {
		(省略)
		stored_obj = sessionStorage.getItem( 'wp-autosave-' + blog_id );

参考: javascriptでセッション?HTML5 SessionStorageの使い方

PHP: 配列操作メモ

配列の操作方法について調べてみた.
最近の言語は,map とか filter とか最初からありますね.
PHP コードの動作確認は,PaizaCloud が便利.
PHP にはプレイグラウンド的なものは,ほかにないのかなー.

1
2
3
4
5
6
7
8
9
10
11
// 配列の生成
$args = array();
$args = [];
$args = ["aaa", "bbb", "ccc"];
 
// ループでの処理
foreach ($args as $key => $value) {
    echo "キー : " . $key . "\n";
    echo "値 : " . $value . "\n";
    echo "\n";
}

is_array — 変数が配列かどうかを検査する

array_push — 一つ以上の要素を配列の最後に追加する
array_pop — 配列の末尾から要素を取り除く

array_unshift — 一つ以上の要素を配列の最初に加える
array_shift – 配列の先頭から要素を一つ取り出す
array_slice — 配列の一部を展開する(例: 0番目から2つとか)

array_merge — ひとつまたは複数の配列をマージする
in_array — 配列の要素に特定の値を含むものがあるか
array_column — 多次元配列から特定のキーの値、キー名で返す
array_map — 配列の要素全てに特定の処理
array_filter — 特定の条件の要素のみの絞り込み
array_multisort — 多次元配列での各配列の特定要素を用いてのソート

参考: PHPでよく使う配列操作まとめ
参考: [PHP] 配列・連想配列の初期化、結合、追加

PHP: exit / die どちらを使えばいいの?

exit と die は言語仕様に違いはないとのこと.
では,どちらを使用した方が良いかというと,個人的には exit() を使用したいと思います.
他のプログラミング言語にも同様な関数が提供されていますし,動作仕様も想像しやすいと思われるためです.

個人的には,こういう独自仕様というか,文化はあまり…良いとは思いませんね.
ですが,WordPress のコードをみていると,wp_die() というのが出てきます.
PHP の文化では,プログラム終了は die の方がしっくりくるのかなー.

PHP: echo / print / print_r / var_dump / var_export などありますが…どれ使えばいいの?

PHPって変数の中身を参照する関数がたくさんありますが,どれを使用すれば良いのか?考えてみました.

出力結果の書式,内容を参照して考えると…

変数の中身みるだけなら echo
デバッグ時などで,型情報もみる必要があるなら var_dump
って感じで良いのではないかと考えています.

なんで,こんなに沢山あるのかな?

PHP: クォート,エスケープの違い

PHP 関連の解説記事などを読んでいて,用語の使い方で違和感を感じたので調べてみた.
個人的には,クォートとエスケープは異なるものと感じていたのに,解説記事などでは同意として使用されているようで,少し違和感を感じました.

参考: 「クォート」「エスケープ」「エンコード」の違い

上記,QAサイトに同じようなことを質問されている方がいました.
回答として,「クォートとエスケープは現状では同じ意味として使われています。
本来は、
クォート:「決まった文法の中で特別な意味を持った文字の特別な意味をなくしその文字そのものと扱いたい時に行うこと」
エスケープ:「文字に元の意味で無い別の意味を与えるときに行うこと」
と全く別なのですが。」
とのこと.
PHP 界隈では同義として語られることが多いのでしょう.たぶん.

PHP: シングルクォーテーション,ダブルクォーテーションの違い

他の言語経験者が PHP を学んでいて少し驚く点じゃないでしょうか?
PHP では,意味が違うようです.

‘(シングル クォーテーション) : 文字列中の変数を置換しない
“(ダブル クォーテーション) : 文字列中の変数を置換する