save_postとsave_post_{post_type}の注意点
とあるカスタム投稿を作成して保存時にメタデータを作成しようと
save_postにフックしようと思いました。
しかし調べるとsave_post_{post_type}で特定投稿タイプの保存時のみにフックできることが判明。
いちいちsave_post後に分岐させずに済むのでこっちを採用することにしましたがためしてみると
うまく動作しません。
そして発覚。
このフィルターはpost.phpで指定されているのですが
do_action( "save_post_{$post->post_type}", $post_ID, $post, $update ); do_action( 'save_post', $post_ID, $post, $update ); do_action( 'wp_insert_post', $post_ID, $post, $update );
の順番となっています。
最初に投稿タイプ別のsave_postが実行されてその後にsave_postが実行されます。
実は別の処理でsave_postでメタボックスからカスタムフィールドに保存したのを更に別に加工しなかったので
投稿タイプ別save_postの時点ではカスタムフィールドに登録されないという状態に。
しょうがないので順番を遅らせたsave_postにフックしてその後投稿タイプで分岐させました。
これに気が付かずにしばらく悩んでしまいました。