web-dev-qa-db-ja.com

投稿が更新されたときにWordPressグーテンベルクは、ページテンプレートの値を取得しますか?

投稿を保存するときにページテンプレート名を取得する必要があります。 $_POST('page_template')が利用できないため、save_postフックで失敗します。 GutenbergはREST AP​​Iを介して投稿を保存し、ページテンプレートデータを保存するためにWP_REST_Post_Controller->handle_templateを使用します。そして私が言ったようにそれはsave_postで$_POST('page_template')を利用可能にしません。また、WP_REST_Post_Controller->handle_templateフックの後にsave_postが起動するように見えます。必要に応じて保存されている値を変更できるように、保存されているページテンプレートを確認する方法を見つける必要があります。ありがとう

2
David Labbe

そこで私は解決策を見つけました。正確なニーズに応じてこれを達成するために使用できる4つのフックがあります。フックは、関数update_metadata()add_metadata()wp-includes/meta.phpからのものです。

フック:update_postmetaupdated_postmetaadd_post_metaadded_post_meta

これらは異なる状態で呼ばれ、名前からそれはかなり自明です。 add_post_metaupdate_postmetaはDBが変更される直前に呼び出され、updated_postmetaadded_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
2
David Labbe