こんにちは。
投稿や固定ページを更新した時に何か処理を行いたいと思った事はありますよね。
という訳で今回は記事を更新した時に処理を追加する方法を綴っていきます。
save_post
save_postは投稿や固定ページが作成または更新されたとき実行されるアクションフックです。
使用例
カスタム投稿「news」を更新した時にカスタムフィールド「custom_num」に投稿IDを自動入力します。
functions.phpに以下を追記↓
(「my_function」は任意の関数名)
function my_function(){
global $post;
if($post->post_type == 'news'){
update_field( 'custom_num', $post->ID);
}
}
add_action( 'save_post', 'my_function');
注意点
save_postアクションフックで呼び出す関数の中にwp_update_post()など投稿を更新する動作を入れてしまうと、無限ループを引き起こしてしまいます。
無限ループから逃れるためにはフックを一旦削除して、更新してからもう一度追加すると良いようです。
使用例
functions.phpに以下を追記↓
(「my_function」は任意の関数名)
function my_function($post_id) {
if(!wp_is_post_revision($post_id)){
remove_action('save_post', 'my_example_save_post');
wp_update_post($my_args);
add_action('save_post', 'my_example_save_post');
}
}
add_action( 'save_post', 'my_function');
wp_is_post_revision()は指定した投稿がリビジョンであるかを判定します。
WordPressのリビジョンとは、編集した記事の内容を保存して差分を見たり復元できたりする機能です。
リビジョンは記事が保存や更新・公開された時に作られるため、上記の例でははじめにリビジョンかどうかを確認する必要があります。
まとめ
今回も記事を書くにあたり色々調べたのですが、wp_update_post()など投稿を更新する動作に対する挙動は知りませんでした。
save_postフックで記事を更新した時に処理を追加するのは今まで活用していたので、この機会により深く知れて良かったです。
この記事を読んでいただきありがとうございました。
あなたのお役に立てれば幸いです。ではまた。