管理メニュー

【WordPress】投稿保存時に内容をフィルターして変更する方法

更新日:2023/06/19

WordPressで投稿を保存するとき、内容に手を加えたいことがあります。
今回は、その方法をお伝えします。

なお、ブロックエディターは登録後に再表示が行われないため、変更した内容がエディター上で反映されません。
そのため、配布を目的としたテーマまたはプラグインでは採用しない方がいいかもしれません。

 

概要

投稿をデータベースに保存する前に、wp_insert_post_dataフィルターが呼び出されます。
このフィルターで、投稿データを変更できます。

 

wp_insert_post_dataフィルター

wp_insert_post_dataフィルターは、次のように呼び出されます。

apply_filters( 'wp_insert_post_data', $data, $postarr, $unsanitized_postarr, $update )
  • $data: 投稿データの連想配列(規定値適用済み)
  • $postarr: 規定値が適用されていない投稿データの連想配列
  • $unsanitized_postarr: サニタイズされていない投稿データの連想配列
  • $update: これが更新中の既存の投稿であるかどうかの真偽値

$dataの内容は、次項で確認します。

 

投稿保存時に内容をフィルターして変更するコード

次のコードは、投稿保存時に投稿内容を変更するコードです。

受け取った引数、つまり投稿データの連想配列をダンプして結果を投稿内容の先頭に追加しています。

add_filter( 'wp_insert_post_data',function($data){
    if( isset($data['post_content'])){
        ob_start(); // バッファリング開始
        var_dump( $data );
        $dump_text = ob_get_contents(); // バッファからデータ取得
        ob_end_clean(); // バッファクリアとバッファリングの停止
        $data['post_content'] = "<pre>\n".$dump_text. "\n</pre>\n".$data['post_content'];
    }
    return $data;
});

投稿内容はpost_contentキーに格納されています。
投稿タイプによってはpost_contentキーが存在しない可能性があるので、確認しています。

結果は、次のようになります。

array(21) {
  ["post_author"]=>
  int(1)
  ["post_date"]=>
  string(19) "2023-05-25 07:42:56"
  ["post_date_gmt"]=>
  string(19) "2023-05-25 07:42:56"
  ["post_content"]=>
  string(26) "Hello World!
Hello World!"
  ["post_content_filtered"]=>
  string(0) ""
  ["post_title"]=>
  string(4) "test"
  ["post_excerpt"]=>
  string(12) "抜粋です"
  ["post_status"]=>
  string(7) "inherit"
  ["post_type"]=>
  string(8) "revision"
  ["comment_status"]=>
  string(6) "closed"
  ["ping_status"]=>
  string(6) "closed"
  ["post_password"]=>
  string(0) ""
  ["post_name"]=>
  string(14) "28-autosave-v1"
  ["to_ping"]=>
  string(0) ""
  ["pinged"]=>
  string(0) ""
  ["post_modified"]=>
  string(19) "2023-05-25 07:42:56"
  ["post_modified_gmt"]=>
  string(19) "2023-05-25 07:42:56"
  ["post_parent"]=>
  int(28)
  ["menu_order"]=>
  int(0)
  ["post_mime_type"]=>
  string(0) ""
  ["guid"]=>
  string(0) ""
}

Hello World!
Hello World!

ちなみに、登録を繰り返すとダンプが増えていきます。
実用的なものにするなら、idを付けるなどてダンプが存在しているか確認する必要がありますね。

 

登録時にhタグにidを追加する

他のページで、表示時にhタグにidを追加する方法を紹介しています。

上記ページに最後に書いていますが、表示時に追加するのは問題がいくつかあります。
そこで、保存時にidを追加してみます。

といっても、上記ページの関数を呼び出すだけです。

add_filter( 'wp_insert_post_data',function($data){
    if( isset($data['post_content'])){
        $data['post_content'] = my_add_htag($data['post_content'],false);
    }
    return $data;
});

メインループ内ではないので関数の第二引数にfalseを指定しています。
これで、投稿ページの投稿ボタンを押すと、hタグにidが付加されます。

なお、id付加後のタグをコピペするとidが重複するので注意しましょう。

更新日:2023/06/19

書いた人(管理人):けーちゃん

スポンサーリンク

記事の内容について

null

こんにちはけーちゃんです。
説明するのって難しいですね。

「なんか言ってることおかしくない?」
たぶん、こんなご意見あると思います。

裏付けを取りながら記事を作成していますが、僕の勘違いだったり、そもそも情報源の内容が間違えていたりで、正確でないことが多いと思います。
そんなときは、ご意見もらえたら嬉しいです。

掲載コードについては事前に動作確認をしていますが、貼り付け後に体裁を整えるなどをした結果動作しないものになっていることがあります。
生暖かい視線でスルーするか、ご指摘ください。

ご意見、ご指摘はこちら。
https://note.affi-sapo-sv.com/info.php

 

このサイトは、リンクフリーです。大歓迎です。