「記事の下に毎回CTAボタンを置きたい」「ヘッダーの下にお知らせバーを表示したい」——そんなとき、テンプレートファイル(header.php や single.php)を直接書き換えていませんか? テンプレートの直接編集は、テーマをアップデートすると上書きされてしまい、せっかくの変更が消えてしまいます。
Apuraには、こうした「決まった場所にコンテンツを差し込む」ためのアクションフックが多数用意されています。フックを使えば、テンプレートには一切触れず、functions.php や子テーマに数行のコードを書くだけで、安全に・アップデートに強い形でカスタマイズできます。
この記事では、よく使う主要フックと、そのままコピペして使えるコード例を紹介します。
アクションフックとは?テンプレート編集との違い
アクションフックとは、テーマの「特定の場所」にあらかじめ用意された差し込み口のことです。たとえばApuraは、ヘッダーを出力し終えた直後に apura_after_header というフックを実行しています。私たちは、このフックに自分の関数を「引っかける(hook)」ことで、ヘッダーの下に好きなHTMLを出力できます。
仕組みはWordPress標準の add_action() とまったく同じです。テンプレートファイルを直接編集する方法と比べると、次のようなメリットがあります。
| 比較項目 | テンプレート直接編集 | アクションフック |
|---|---|---|
| アップデート耐性 | テーマ更新で上書き・消失する | 子テーマに書けば更新に強い |
| 必要なファイル | 複数のテンプレートをコピー | functions.php 1ファイルで完結 |
| 条件分岐 | テンプレート内に直書き | is_single() 等で柔軟に制御 |
Apuraの主要アクションフック一覧
Apuraには多くのフックが用意されていますが、まずは「どこに何を差し込めるか」がイメージしやすい、使用頻度の高いものを覚えておけば十分です。代表的なフックは次のとおりです。
| フック名 | 出力される場所 | 主な用途 |
|---|---|---|
| apura_after_header_open | ヘッダー要素を開いた直後(ヘッダーの一番上) | キャンペーンバー・緊急のお知らせ |
| apura_after_header | ヘッダー全体の出力が終わった直後 | お知らせバー・全ページ共通の告知 |
| apura_before_entry | 各記事カード/本文の直前(ループ内) | リード文・記事上の注意書き |
| apura_after_entry | 各記事カード/本文の直後(ループ内) | 記事下のCTA・関連リンク |
| apura_singular_article_after | 投稿・固定ページの記事領域の直後 | 著者プロフィール・シェアボタン |
| apura_before_footer | フッターの直前 | フッター前の広告・大きなCTAバナー |
| apura_after_footer | フッターの直後(ページ最下部) | 追従ボタン・チャットウィジェット |
このほかにも、コメント周り(apura_before_comments / apura_after_comments)やサイドバー(apura_before_sidebar_widget_area / apura_after_sidebar_widget_area)、モバイルメニュー周りなど、多数のフックが用意されています。全フックの一覧はフックリファレンスを参照してください。
実例1: ヘッダー下に全ページ共通のお知らせバーを表示する
まずは基本の apura_after_header を使って、全ページのヘッダー直下にお知らせバーを表示してみましょう。子テーマの functions.php に次のコードを追加します。
<?php
/**
* ヘッダー直下にお知らせバーを表示する。
*/
function my_apura_notice_bar() {
$message = 'ただいま夏のキャンペーン実施中です。';
$url = 'https://example.com/campaign/';
?>
<div class="my-notice-bar" style="background:#fff3cd;text-align:center;padding:12px;">
<a href="<?php echo esc_url( $url ); ?>">
<?php echo esc_html( $message ); ?>
</a>
</div>
<?php
}
add_action( 'apura_after_header', 'my_apura_notice_bar' );
ポイントは、出力する文字列を必ずエスケープすることです。URLは esc_url()、画面に表示するテキストは esc_html() を通します。これはXSS(クロスサイトスクリプティング)を防ぐためのWordPressの基本ルールで、フックでHTMLを出力するときも必ず守りましょう。
実例2: 投稿記事の下にだけCTAを差し込む(条件分岐)
フックの真価は、WordPressの条件分岐タグと組み合わせたときに発揮されます。「投稿(single)ページの本文下にだけCTAを出す」といった制御が、テンプレートを増やさずに実現できます。記事本文の直後で実行される apura_singular_article_after を使います。
<?php
/**
* 投稿ページの本文下にCTAを表示する。
*/
function my_apura_single_cta() {
// 投稿(single post)以外では何も出力しない。
if ( ! is_singular( 'post' ) ) {
return;
}
?>
<div class="my-cta" style="margin:32px 0;padding:24px;border:1px solid #ddd;border-radius:8px;text-align:center;">
<p><?php echo esc_html__( 'この記事は役に立ちましたか?最新情報をメールでお届けします。', 'my-child' ); ?></p>
<a class="button" href="<?php echo esc_url( home_url( '/subscribe/' ) ); ?>">
<?php echo esc_html__( '登録する', 'my-child' ); ?>
</a>
</div>
<?php
}
add_action( 'apura_singular_article_after', 'my_apura_single_cta' );
実例3: 優先度(priority)で表示順をコントロールする
同じフックに複数の関数を引っかけた場合、出力される順番は add_action() の第3引数「優先度」で決まります。数値が小さいほど先に、大きいほど後に実行されます(デフォルトは 10)。
たとえば apura_before_footer には、Apura自身がパンくずリストを出力する処理を引っかけている場合があります。自分の広告をパンくずより後に表示したいなら、優先度を大きめ(例: 20)に設定します。
<?php
/**
* フッター直前に広告枠を表示する(優先度20で後ろに配置)。
*/
function my_apura_before_footer_ad() {
// アーカイブやトップページなど、必要なページに絞ることも可能。
if ( is_admin() ) {
return;
}
?>
<div class="my-footer-ad" style="margin:40px auto;text-align:center;">
<?php
// 広告タグなど、信頼できるHTMLはここで出力する。
// 動的な値を含む場合は必ずエスケープすること。
?>
</div>
<?php
}
add_action( 'apura_before_footer', 'my_apura_before_footer_ad', 20 );
逆に、優先度を 5 のように小さくすれば、テーマ標準の出力より先に自分のコンテンツを表示できます。「思った場所に出ない」「順番が前後する」というときは、まず優先度の値を見直してみてください。
安全に使うための4つのチェックポイント
フックは強力な反面、書き方を誤るとサイト全体に影響します。次の4点を守れば、安全に運用できます。
- 子テーマに書く: テーマ本体の
functions.phpではなく、子テーマに記述してアップデートに備える。 - 出力は必ずエスケープ: テキストは
esc_html()、URLはesc_url()、属性値はesc_attr()を通す。 - 関数名はプレフィックスで衝突回避:
my_apura_のように独自の接頭辞を付け、他のプラグインと関数名がぶつからないようにする。 - 条件分岐で範囲を絞る:
is_singular()やis_front_page()で、必要なページにだけ出力する。
まとめ: フックを覚えればカスタマイズの幅が一気に広がる
Apuraのアクションフックを使えば、テンプレートを一切編集せずに、ヘッダー下のお知らせ、記事下のCTA、フッター前の広告などを自由に差し込めます。add_action() の書き方さえ覚えれば、あとは「どのフックがどこで実行されるか」を選ぶだけです。
まずは apura_after_header と apura_singular_article_after の2つから試してみてください。
子テーマに書いてエスケープを徹底すれば、アップデートにも強く、安全なカスタマイズが実現できます。全フックの差し込み位置を確認したいときは、フックリファレンスもあわせて活用しましょう。