Lightningでアクションフックを使用したカスタマイズ

できる!WordPressカスタマイズ #04 アクションフックを使ったカスタマイズに挑戦! | 株式会社ベクトル

WordPressの拡張性を高める機能にアクションフックとフィルターフックがあり、これがあったから世界中で使われる事になったと言っても過言ではない重要な特徴の一つです。…

Chick

下記は、上記の公式サイトのものを書き写しています。

アクションフックとは、WordPress本体やテーマ、プラグインなど、アクションフックが用意されている場所で任意のPHPが実行できるしくみです。
テーマファイルを改変する事なく任意のHTMLを追加する事ができます。
「アクションフックが用意されている場所」というのは、PHPのプログラムの中で do_action( 'フック名' );という記述がある場所です。

ポイントです。

<?php do_action( 'フック名' ); ?>

wp_head() という関数の中身

多くのテーマにおいて、header.php には <?php wp_head(); ?> という記述があるのが確認できると思います。
この wp_head() という関数の中身は以下のようになっています。

function wp_head() {
    /**
     * Prints scripts or data in the head tag on the front end.
     *
     * @since 1.5.0
     */
    do_action( 'wp_head' );
}

do_action( ‘wp_head’ ); という記述が確認できます。これがアクションフックです。


Chick

では、やってみます!

下記のコードを子テーマのfunctions.phpに書きました。

function example01(){
    echo 'ここに出力';
}
add_action( 'wp_head', 'example01' );

⬇️


ポイントです。

アクションフックの基本の書式

function実行する関数名(){
    // ●実行する処理内容●;
}
add_action( '★フック名★', '■実行する関数名■' );


ほんの一部分改変したいだけなのにファイルごと変更してしまうと、テーマのアップデートで影響を受けやすくなってしまいます。そんな場面でアクションフックはテーマなどを直接改変したくないときに使用します


テーマやプラグイン内で do_action( )でフック名を検索する

テーマやプラグインによってはカスタマイズしやすいようにファイル内にアクションフックが沢山用意されています。例えば改変したいテーマのテンプレートファイル(index.phpなど)がある場合は、そのファイルを開いて do_action( )で検索してみましょう。

例えば WordPressテーマ Lightning ではテーマファイル内に do_action() がいろいろ置かれているので、必要に応じてHTMLを挿入できます。

以下ではヘッダーの直後にHTMLを追加しています。
このカスタマイズ方法は非常に有効で、ご利用中のテーマのファイルから do_action( )の記載を探してやるということです。

Chick

では、やってみます!

下記のコードを子テーマのfunctions.phpに書きました。

function my_lightning_header_after(){ ?>
	<div class="text-center">do_action の書かれた場所に好きなようにHTMLを挿入できます</div>
 <?php }
 
 // G3版以降の場合
 add_action( 'lightning_site_header_after', 'my_lightning_header_after' );

⬇️


アクションフックの優先順位

例えば wp_head() に対してアクションはいくらでも追加できます。しかし、その実行順番を指定したい時は、add_action() 関数の3つ目の引数が優先順位になり、値が小さい方が先に実行されます。未記入の場合は10で処理されます。

Chick

では、やってみます!

下記のコードを子テーマのfunctions.phpに書きました。

function example03(){
    echo 'こんにちは';
}
add_action( 'wp_head', 'example03', 10 );

function example04(){
    echo 'おはよう';
}
add_action( 'wp_head', 'example04', 5 );

優先度5の方が先に出力される事が確認できます。

⬇️


アクションフックは外部から外せる remove_action( )

// wp_head にアクセス解析タグを追加
function example01(){
    echo '<!-- [ アクセス解析タグ ] -->';
}
add_action( 'wp_head', 'example01' );

// 登録済みのアクションを外す
remove_action( 'wp_head', 'example01' );

テーマやプラグインですでに誰かの手によって書かれているアクションフックの処理を、使う人が必要に応じて外す事ができるという便利な機能です。

外す時も順番指定は重要

優先順位の指定がある場合は、remove_action する時も add_action の時と同じ優先順位を指定しないと外せないので注意してください。

// wp_head にアクセス解析タグを追加
function example01(){
    echo '<!-- [ アクセス解析タグ ] -->';
}
add_action( 'wp_head', 'example01', 5 );

// 優先順位が一致していないので外せない( 5 に変更すれば外せます )
remove_action( 'wp_head', 'example01', 10 );

アクションフックやフィルターフックに追加されている処理を調べる方法

WordPressのアクションフックやフィルターフックに追加されている処理を調べる方法

global $wp_filter;
echo '<pre>';
print_r($wp_filter['hook_name']);
echo '</pre>';

上記のコードでは、hook_name の部分に調査したいフックの名前を入れます。これにより、指定したフックに追加されたすべてのアクションやフィルターが表示されます。

このコードはWordPressの内部動作を可視化し、特定のフックに対するカスタム処理がどのように実装されているかを理解するための手段を提供しています。これにより、WordPressの動作やカスタマイズに関する知識を深めることができます。

Chick

では、やってみます!

⬇︎

上記の出力された画像は下になります。

WP_Hook Object
(
    [callbacks] => Array
        (
            [10] => Array
                (
                    [veu_change_vk_components_image_default_url] => Array
                        (
                            [function] => veu_change_vk_components_image_default_url
                            [accepted_args] => 1
                        )

                    [000000000000031f0000000000000000] => Array
                        (
                            [function] => Closure Object
                                (
                                    [parameter] => Array
                                        (
                                            [$options] => 
                                        )

                                )

                            [accepted_args] => 1
                        )

                )

        )

    [priorities:protected] => Array
        (
            [0] => 10
        )

    [iterations:WP_Hook:private] => Array
        (
        )

    [current_priority:WP_Hook:private] => Array
        (
        )

    [nesting_level:WP_Hook:private] => 0
    [doing_action:WP_Hook:private] => 
)

〜 上記の説明 〜

上記はWordPressのWP_Hookオブジェクトのダンプです。このオブジェクトは、WordPressのアクションフックやフィルターフックを管理するために使用されます。
(※ダンプ"とは、プログラムやシステム内のデータ構造や変数の内容を表示することを指します。一般的には、デバッグや解析のために使用されます。)

このダンプから読み取れる情報は次のとおりです:

  • callbacks: フックに関連付けられたコールバック関数の配列です。ここでは、10番の優先度を持つ2つのコールバックが示されています。
    • veu_change_vk_components_image_default_url: veu_change_vk_components_image_default_url関数が10番の優先度で登録されています。
    • 000000000000031f0000000000000000: 無名関数(クロージャ)が10番の優先度で登録されています。この無名関数は引数$optionsを受け取ります。
  • priorities: 登録されたコールバック関数の優先度の配列です。ここでは、唯一の優先度として10が示されています。

この情報から、特定のアクションまたはフィルターフックがどのように登録され、どの関数がそれに関連付けられているかを理解できます。

ChatGPT

アクションフックのsave_post と user_register

HTMLを挿入する以外にありとあらゆる操作が可能

  • save_post : 投稿が保存されたタイミング。一緒に他のステータスを自動でアップデートしたりする処理など。
  • user_register : ユーザーが新規登録されたタイミング。一緒に他のステータスを自動でアップデートするなど。



これらの説明は、WordPressのアクションフックの2つ、save_postuser_registerについて述べています。

  1. save_post: このアクションフックは、投稿が保存された際に実行されます。WordPressでは、投稿が保存されるときに様々な処理が行われます。例えば、投稿のメタデータを更新したり、関連するカスタムフィールドを処理したりすることがあります。save_postアクションフックを使用すると、投稿が保存されたときにこれらの追加の処理を実行することができます。
  2. user_register: このアクションフックは、新しいユーザーが登録された際に実行されます。WordPressでは、ユーザーが登録されると、その後の処理が実行される場合があります。例えば、ユーザーが登録した際にウェルカムメールを送信したり、カスタムユーザーメタデータを更新したりすることがあります。user_registerアクションフックを使用すると、ユーザーが登録されたときにこれらの追加の処理を実行することができます。

要するに、これらのアクションフックは、WordPressの特定のイベントが発生したときに、それに関連する追加の処理を実行するためのものです。例えば、投稿が保存されたときや新しいユーザーが登録されたときに、これらのアクションフックを使用して、自動的に他のステータスを更新する、メールを送信する、あるいはカスタム処理を実行するなどの処理を追加できます。

Lightningのフックに関する解説

フックとは 
フックには2つの種類があります。

アクションフック


do_action( 'フック名' ); は、フックを提供し、それに関連するカスタムコードや機能を呼び出して実行します。そのため、関連する処理を起動するという役割を果たしています。

do_action() – Function | Developer.WordPress.org Calls the callback functions that have been added to an actio developer.wordpress.org



`add_action()`
は、WordPressのアクションフックにコールバック関数を追加するためのメソッドです。特定のイベント(フック)が発生した際に、それに関連付けられたコード(コールバック関数)を実行することができます。つまり、アクションフックに対して、ある処理を追加する際に使用します。

add_action() – Function | Developer.WordPress.org Adds a callback function to an action hook.developer.wordpress.org

`add_action()`は、特定のアクションフックに後から実行するコード(コールバック関数)を追加する手段です。これにより、アクションフックがトリガーされた際に、関連付けられたコードが実行されます。

`do_action()`は、アクションフックを手動でトリガーするためのもので、指定したアクションフックに関連付けられた処理を手動で実行します。

簡潔に言うと、`add_action()`はコードをフックに追加し、`do_action()`はそのフックを実際に起動して関連するコードを実行します。

フィルターフック


apply_filters
( 'フィルター名', 'フィルターする値' );は、コンテンツやデータを変更するための場所を提供する。 

apply_filters() – Function | Developer.WordPress.org Calls the callback functions that have been added to a filter developer.wordpress.org



add_filter( 'フィルター名', 'コールバック関数' );を使って、フィルターフックにコールバック関数を追加する。

add_filter() – Function | Developer.WordPress.org Adds a callback function to a filter hook.developer.wordpress.org


`apply_filters()`関数は、フィルターフックに登録されたフィルター関数を呼び出し、フックに渡された値を変更する機能を提供します。これにより、コンテンツやデータをフィルター処理して、変更することが可能です。

`add_filter()`関数は、フィルターフックにコールバック関数を追加するために使用します。この関数により、指定したフィルターフックに対して、後から呼び出されるコールバック関数を追加・登録することができます。その後、`apply_filters()`で指定のフィルターフックが実行されると、登録されたコールバック関数が実行されます。


"コールバック関数(Callback Function)とは、他の関数に引数として渡される関数のことです。その名の通り、呼び出されて実行される関数です。"

コールバック関数

Callback function (コールバック関数) - MDN Web Docs 用語集: ウェブ関連用語の定義 | MDNコールバック関数とは、引数として他の関数に渡され、外側の関数の中で呼び出されて、何らかのルーチンやアクションを完了させる関 developer.mozilla.org
 

Lightning G3でホームページを作成します G3無料テーマでプラグインを追加して作成します