WordPressのwp_body_openをbodyに記述してフックする

WordPressのwp_body_openをbodyに記述してフックする

WordPressではwp_body_openという関数があります。まだ使用したことがなかったのでwp_body_openとはどんなことができる関数かを把握してから、wp_body_openの使い方を実際に試しながら記事を書き覚えることにしました。

wp_body_openの使い方を覚えたい方のきっかけの記事になればと思います。

 

WordPressのwp_body_openとは

 

wp_body_openとはWordPressのバージョン5.2から新たに追加された関数です。WordPress的にはテンプレートタグとも言います。

WordPressのテンプレートタグにはwp_headとwp_footerの2つのテンプレートタグが以前からありますが、wp_body_openもwp_headとwp_footerのようにscriptなどのブラウザには表示されない要素を出力するために使用することができる関数としてWordPress5.2のバージョンアップで追加されました。

 

/ **
* wp_body_openアクションを起動します。
*
* {@ see'wp_body_open '}を参照してください。
*
* @since 5.2.0
* /
function wp_body_open(){
    / **
    *オープニングボディタグの後にトリガーされます。
    *
    * @since 5.2.0
    * /
    do_action('wp_body_open');
}

 

/wp-includes/general-template.php

 

そんなwp_body_open()関数はWordPressの/wp-includes/general-template.phpで定義されています。上記の記述はコメント文を翻訳して記載しました。

 

Advertisement

 

wp_body_openの使い方

 

wp_body_openの使い方はページの表示では見えない要素、タグやメタデータなどの出力用として使用します。

HTMLのタグを追加する目的としての使用は、ページのデザインなどが崩れてしまったりエラーが発生してしまうことがあるようなので使用しないようにします。

そのため使い方としては、例えばGoogleタグマネージャーのようなbody開始タグ直後にコードを出力する必要がある場合などにWordPressのwp_body_openにフックしてコード出力する使い方をします。

WordPressのwp_body_openの具体的な使い方は、wp_body_openをbodyに記述してフックするやり方を実際にやってみたので参考になればと思います。

 

bodyにwp_body_openを記述

 

wp_body_openはWordPressのバージョンを5.2以上にした<body>開始タグの直後に記述をします。

WordPressのbody開始タグがある場所はテーマのテンプレートファイル「header.php」にあります。

 

<body <?php body_class(); ?>
<?php wp_body_open(); ?>

 

WordPressの<body>開始タグは上記の記述のように <?php body_class(); ?>を加えて記述しているのがbodyの開始タグなので、すぐ下に<?php wp_body_open(); ?>と記述します。

bodyにwp_body_openを記述するやり方はこれで完成です。

bodyにwp_body_openを記述したことによりテーマによっては<body>開始タグの下にはscriptタグで管理画面へ移動するツールバーのコードが出力されます。

 

wp_body_openにフックする

 

WordPressのwp_body_open()をbodyに記述するとwp_body_openにフックすることができるようになります。

フックができるようになったか試しにWordPressのadd_actionでコメント文を出力する関数をwp_body_open()に登録してみたので、お試しフックで出力確認が必要な方は参考に使ってください。

 

function body_hook(){
    echo '<!--wp_body_open action hook-->';
    }

add_action('wp_body_open','body_hook');

 

テーマのfunctions.phpにbody_hook()という関数名でユーザー定義関数を作成し、echoで<!–wp_body_open action hook–>というコメント文をWordPressの<body>タグの直後に出力してwp_body_openにフックした出力結果を試します。

wp_body_openにフックするには、WordPressのアクションフックadd_actionの引数に’wp_body_open’,’body_hook’の順番で記述することで、作成したbody_hook()関数がwp_body_openに登録されます。

 

 

functions.phpを保存してテーマのトップページあたりをブラウザに表示させてから検証ツールでソースを確認すると、body開始タグの直下にコメント文が出力できているのでwp_body_openにフックすることができたのが分かります。

テスト出力のためwp_body_openにフックしたコメント文を出力しましたが、実際にはWordPressのwp_body_openをbodyに記述してフックするときには、タグやメタデータなどの出力用として使用してください。

 

Advertisement

 

WordPress5.2以前でwp_body_openを使う場合

 

WordPressのwp_body_openはWordPressのバージョンが5.2から使用が可能なフック関数です。

そのためWordPress5.2以前のバージョンでwp_body_open()をheader.phpの<body>直後に記述してしまうと、場合によってはエラーが発生して画面が真っ白になることもあります。

WordPress5.2以前のバージョンでwp_body_openを記述した画面が真っ白になる例としては、WordPressプラグインのAutoptimaizeを使用していると「bodyが行方不明」みたいなコメント文がソース上に表示して真っ白画面になりました。

 

 

プラグインのキャッシュが効いてしまっているのがダメなのかもですね。

WordPress5.2以前でもwp_body_openを使う場合には下位互換性のためwp_body_openを使用するWordPressテーマのfunctions.phpに以下のコードを記述します。

 

if ( ! function_exists( 'wp_body_open' ) ) {
    function wp_body_open() {
    do_action( 'wp_body_open' );
    }
}

 

使用するWordPressテーマのテンプレートでwp_body_openが存在するかどうかの確認をして、ない場合はwp_body_open関数を作成することで、WordPress5.2以前でもwp_body_openに関数をフックしてコード出力する使い方ができます。

調べていたら見つけた上記とは違うWordPress5.2以前でwp_body_openを使う場合の書き方のコードもあります。次のPHPです。

 

<?php
    if ( function_exists( 'wp_body_open' ) ) {
        wp_body_open();
    } else {
        do_action( 'wp_body_open' );
    }
?>

 

けっこう検索して調べた多くのページで使われていたPHPコードでしたが、WordPress5.2以前でwp_body_openを検証するために5.1.8にダウングレードした私のWordPressでは画面が真っ白になってしまいwp_body_open()にフックできませんでした。

もしかすると使用するテーマや使用プラグインによって使用可能だったり使用不可なのかもしれませんのでテスト環境のWordPressで上記2つのPHPコードを出力して検証してみるのが良いです。

 

まとめ

 

WordPressのwp_body_openをbodyに記述してフックするやり方をwp_body_openの使い方として記事にした今回の投稿。

WordPressのテーマ構成の全体で考えれば、今後は<body>の直後に記述したWordPressのwp_body_open()も必ず必要なテンプレートタグとしてwp_head()とwp_footer()と共に記述することを覚えおくと良いですね。以下のように。

 

<head>
<?php wp_head(); ?>
</head>

<body>
<?php wp_body_open(); ?>

<?php wp_footer(); ?>
</body>

WordPress使い方カテゴリの最新記事