WordPressには特定のタイミングで処理を追加することができるフックという機能が備わっている。フックには2種類あり、それぞれアクションフックとフィルターフックという。フック学習をスタートさせる。
アクションフックとフィルターフック
アクションフックとは情報を受け取って変化させて返す仕組み、フィルターフックとはフックのタイミングで何かを実行する仕組みのこと。
フック | アクションフック | フィルターフック |
---|---|---|
設置 | add_action() | add_filter() |
作成 | do_action() | apply_filters() |
優先度
フックには優先度が設定されている。1から実行され数が大きいほどあとで実行される。
フックの探し方
- 「[使いたい部分の関数名]+フック」でネット検索。
- WordPressのソーズを読む
WordPress標準フックを使ってみる
the_titleフック記事タイトルを取得している部分で使われるフック
add_filter('the_title', function () {
return 'タイトル変えるよ';
});
全記事のタイトルが「タイトル変えるよ」になる。ダッシュボードも同様。
つづいて引数を渡す。
add_filter('the_title', function ($title, $id) {
return $title . '/' . $id;
}, 10, 2);
- 引数を2つ使うため、第4引数に
2
を渡さなければならない。 - 第3引数の優先度はデフォルトの
10
だとしても、必ず明示しなければならない
上の方法ではナビゲーションにもフックが追加されてしまうので、コンテンツの部分にだけフックの処理を与えてみる。
add_filter('the_title', function ($title, $id) {
// ループの中のコンテンツにのみ $id を付け加える
if (in_the_loop()) {
return $title . '/' . $id;
}
// それ以外は何もしない
return $title;
}, 10, 2);
ホームの投稿リストで、特定のカテゴリを非表示にする。
add_action('pre_get_posts', function ($query) {
if ($query->is_home() && $query->is_main_query()) {
$query->set('cat', '-1');
}
});
ホームの投稿リストで、特定の記事を非表示にする。
add_action('pre_get_posts', function ($query) {
if ($query->is_home() && $query->is_main_query()) {
$query->set('post__not_in', array(1)); /* アンスコの数は2+1 */
}
});
wp_body_open
body開始タグのするあとにアイコンを挿入する。
<?php
// Googleマテリアルアイコン読み込み
add_action('wp_head', function () {
?>
<link rel="stylesheet" href="https://fonts.googleapis.com/css2?family=Material+Symbols+Outlined:opsz,wght,FILL,GRAD@20..48,100..700,0..1,-50..200" />
<?php
});
// wp_body_openフックにhtmlを追加
add_action('wp_body_open', function () {
?>
<div class="body_open_container">
<p><a href="<?php echo home_url(); ?>"><span class="material-symbols-outlined">home</span></a></p>
</div>
<?php
});