投稿を保存するときにページテンプレート名を取得する必要があります。 $_POST('page_template')
が利用できないため、save_postフックで失敗します。 GutenbergはREST APIを介して投稿を保存し、ページテンプレートデータを保存するためにWP_REST_Post_Controller->handle_template
を使用します。そして私が言ったようにそれはsave_postで$_POST('page_template')
を利用可能にしません。また、WP_REST_Post_Controller->handle_template
フックの後にsave_post
が起動するように見えます。必要に応じて保存されている値を変更できるように、保存されているページテンプレートを確認する方法を見つける必要があります。ありがとう
そこで私は解決策を見つけました。正確なニーズに応じてこれを達成するために使用できる4つのフックがあります。フックは、関数update_metadata()
とadd_metadata()
のwp-includes/meta.php
からのものです。
フック:update_postmeta
updated_postmeta
add_post_meta
added_post_meta
これらは異なる状態で呼ばれ、名前からそれはかなり自明です。 add_post_meta
とupdate_postmeta
はDBが変更される直前に呼び出され、updated_postmeta
とadded_post_meta
はDBが変更された直後に呼び出されます。
例:
//Example usage for updated and added.
function page_template_check( $meta_id, $post_id, $meta_key, $meta_value ) {
// Stop if not the correct meta key
if ( $meta_key != '_wp_page_template' ) {
return false;
}
//Do stuff here
};
add_action( 'added_post_meta', 'page_template_check', 10, 4 ); //after add
add_action( 'updated_postmeta', 'page_template_check', 10, 4 ); //after update