web-dev-qa-db-fra.com

Ajouter un champ méta après la publication de l'article

J'essaie d'ajouter un champ personnalisé event_month lorsqu'un article est publié ou enregistré. J'utilise l'action save_post et récupère le contenu d'un champ personnalisé contenant la date et tente de le stocker dans un champ personnalisé distinct avec uniquement le mois. Cela fonctionne parfaitement lorsque vous enregistrez un article déjà créé. J'ai montré mon code ci-dessous.

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);

    }

}

Le problème se pose lors de la création d'un nouveau poste. Je pense que cela est dû au fait que l'action est déclenchée avant la création de la méta _EventStartDate et que, par conséquent, le mois ne peut en être déduit.

Le hook se déclenche correctement et comme prévu lors de l'enregistrement/la mise à jour d'un article, mais ne récupère pas correctement le mois dans la méta lors de la création d'un nouvel article.

J'apprécierais vraiment si quelqu'un pouvait me donner des conseils.

1
Neil K

Vous pouvez accrocher une action post_updated si vous souhaitez accéder aux données de la publication après leur publication. Ce hook transmet l'ID de la publication, son objet de publication inondé et son objet de publication mis à jour.

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

Utilisez pre_post_update au lieu de save_post

Explication complète ici

0
Anton Lukin