Warning: Use of undefined constant user_level - assumed 'user_level' (this will throw an Error in a future version of PHP) in /home/gogoweb/55w.jp/public_html/techblog/wp-content/plugins/ultimate-google-analytics/ultimate_ga.php on line 524
Facebook にシェア
[`evernote` not found]
LINEで送る

とあるカスタム投稿を作成して保存時にメタデータを作成しようと
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にフックしてその後投稿タイプで分岐させました。
これに気が付かずにしばらく悩んでしまいました。