表示前にフックして出力テキストを置換する

WordPress 6.4.3
広告WordPress・PHP を学べる本

Amazonのアソシエイトとして、WordPress functions.phpは適格販売により収入を得ています。

概要説明

WordPressにて生成したhtml出力を行う手前で置換作業が必要な際に活用しているテクニック。プラグイン内やどこを触ったら良いかわからないといった場合に、最終出力前に置換してソースを変更することができます。フロントページ、管理画面どちらも置換可能です。

管理画面だけ置換対象とする

functions.php
/*----------------------------------------------------
 表示前にフックして出力テキストを置換する
----------------------------------------------------*/
if ( !function_exists( 'final_processing_replace' ) ){
    if ( is_admin() ) {
        function final_processing_replace($buffer) {
            $buffer = str_replace('ダッシュボード', 'HOME', $buffer);
            return $buffer;
        }

        function buf_start() { ob_start('final_processing_replace'); }
        function buf_end() {
            if( ob_get_length() ){
                ob_end_flush();
            }
        }

        add_action('after_setup_theme', 'buf_start');
        add_action('shutdown', 'buf_end');
    }
}

フロントページでもプラグインでも置換の対象にできる

置換対象の条件を指定しなければ、どこでも実行されます。置換しやすいようにclassやidなどを事前に付与しておけば、それぞれのプラグインで調整を行わなくても、最終的な置換処理で文言変更やタグの調整などが行なえます。

表側のページだけを置き換えたいときは、HTML コメントを一括で削除する記事のように、template_redirect でバッファを始めると、REST API(ブロックエディターの読み込み)などを壊しません。

記事の本文だけが置換対象ならこちら

functions.php
/*----------------------------------------------------
 記事本文だけの置換
----------------------------------------------------*/
if ( !function_exists( 'replace_the_content' ) ){
    function replace_the_content($the_content) {
        $the_content = str_replace('あああ','いいい',$the_content);
        return $the_content;
    }
    add_filter('the_content','replace_the_content');
}

アクションフックの処理の順番

1. after_setup_theme

テーマの最初で実行されるアクションフック
functions.php ファイルが読み込まれた後に実行

~

あまり指定しないものは省略
widgets_init、registered_taxonomyなど

2. wp_default_scripts

scriptの処理

3. wp_default_styles

cssの処理

4. init

プラグインの初期化処理

~

あまり指定しないものは省略
wp_register_sidebar_widgetなど

5. wp

is_page( 126 ) 等の処理が判定可能になる

~

あまり指定しないものは省略
admin_menuなど

6. shutdown

一番最後ではないが最後の方の処理

よってafter_setup_theme~shutdownまでの間の出力を取得することで一通りの出力内容をバッファさせることができるという仕組み。

※ widgets_init は init の中(優先度 1)で動き、wp_default_scripts はスクリプトを最初に使うときに動くので、実際の順番はサイトやプラグインによって前後します。下のコードで、自分のサイトの順番を確認してください。

アクションフックの実行順を実際に確認して見る方法

functions.php
/*----------------------------------------------------
 アクションフックの実行順をコンソールに表示
----------------------------------------------------*/
if ( ! function_exists( 'console_output_action_hook' ) ) {
    function console_output_action_hook() {
        // 管理者のときだけ出す
        if ( ! current_user_can( 'manage_options' ) ) {
            return;
        }
        global $wp_actions;
        $order = 1;
        echo '<script>';
        foreach ( $wp_actions as $action => $count ) {
            // 順番 : アクションフック名
            echo 'console.log(' . wp_json_encode( $order . ' : ' . $action ) . ');';
            $order++;
        }
        echo '</script>';
    }
    add_action( 'wp_footer', 'console_output_action_hook', 9999 );
    add_action( 'admin_footer', 'console_output_action_hook', 9999 );
}

以前のコードは shutdown で書き出していたので、REST API や Ajax の応答の最後にも script が付き、データが壊れることがありました。表のページと管理画面のフッターで、管理者のときだけ出す形に直しました(2026/10/18)。

表示前にフックして出力テキストを置換する

フック処理を使用したカスタマイズ例

WordPress Developer Resources