web-dev-qa-db-ja.com

投稿が公開された後にメタフィールドを追加する

投稿が公開または保存されたときにevent_monthのカスタムフィールドを追加しようとしています。私は、save_postアクションを使用して、日付を含むカスタムフィールドの内容を取得し、これを月だけで別のカスタムフィールドに格納しようとしています。既に作成された投稿を保存するとき、これは完璧に機能します。私のコードを以下に示しました。

add_action('save_post', 'update_event_date');

function update_event_date($post_id){

    $post_type = get_post_type($post_id);
    $event_datee = get_post_meta($post_id, '_EventStartDate', true);

    if ($post_type == 'tribe_events'){

        $month = date("m",strtotime($event_datee));
        update_post_meta($post_id, 'event_month', $month);

    }

}

新しい投稿を作成するときに問題が発生します。これは、_EventStartDateメタが作成される前にアクションが起動されるため、月を取得できないためと考えられます。

フックは正しく発砲され、投稿を保存/更新するときに意図したとおりに動作しますが、新しい投稿を作成するときにメタから月を正しく取得できません。

誰かが私に何らかのガイダンスを提供できたら私はそれを本当に感謝します。

1
Neil K

投稿のデータafterにアクセスしたい場合は、 post_updated アクションにフックできます。このフックは、投稿のID、あふれた投稿オブジェクト、更新された投稿オブジェクトを渡します。

add_action( 'post_updated', 'update_event_date', 10, 3 );
function update_event_date( $post_id, $post_after, $post_before ){

    $post_type = get_post_type( $post_id );
    $event_datee = get_post_meta( $post_id, '_EventStartDate', true );

    if ( $post_type == 'tribe_events' ) {

        $month = date( "m",strtotime( $event_datee ) );
        update_post_meta( $post_id, 'event_month', $month );

    }

}
1
Jack Johansson

pre_post_updateの代わりにsave_postを使用

詳しい説明は こちら

0
Anton Lukin