J'ai écrit la fonction suivante qui copie tous les termes de publication de la taxonomie "tribe_events_cat" dans la taxonomie "categoria" lorsque la publication est enregistrée. Il y a un bogue dans lequel, pour que les termes soient copiés, je dois cliquer deux fois sur "mettre à jour" (c'est-à-dire enregistrer le message deux fois).
Je crois que cela se produit car lorsque j'appelle get_the_terms
, le message n'a pas encore été enregistré.
Existe-t-il un moyen de contourner ce problème afin que get_the_terms
récupère les termes du nouveau message mis à jour?
function bam_save_event_cat( $post_id ) {
$taxonomy = 'categoria';
$tribe_cats = get_the_terms( $post_id, 'tribe_events_cat');
foreach($tribe_cats as $tribe_cat) {
if( empty($tribe_cat->name) ) continue;
$catname = $tribe_cat->name;
$cats[] = $catname;
}
wp_set_object_terms( $post_id, $cats, $taxonomy );
}
function bam_save_event($post_id) {
if ( defined( 'DOING_AUTOSAVE' ) && DOING_AUTOSAVE )
return;
if ( !current_user_can( 'edit_post', $post_id ) )
return;
if(get_post_type( $post_id ) == 'tribe_events' ) {
remove_action( 'save_post', 'bam_save_event' );
wp_update_post( array( 'ID' => $post_id ) );
add_action( 'save_post', 'bam_save_event' );
bam_save_event_cat( $post_id );
}
}
add_action( 'save_post', 'bam_save_event' );
C'est un coup dans le noir, mais avez-vous déjà essayé d'utiliser le hook set_object_terms
pour votre fonction bam_save_event_cat
?
function bam_save_event_cat( $post_id, $terms, $tt_ids, $taxonomy, $append, $old_tt_ids ) {
$taxonomy = 'categoria';
$tribe_cats = get_the_terms( $post_id, 'tribe_events_cat');
foreach($tribe_cats as $tribe_cat) {
if( empty($tribe_cat->name) ) continue;
$catname = $tribe_cat->name;
$cats[] = $catname;
}
wp_set_object_terms( $post_id, $cats, $taxonomy );
}
function bam_save_event($post_id) {
if ( defined( 'DOING_AUTOSAVE' ) && DOING_AUTOSAVE )
return;
if ( !current_user_can( 'edit_post', $post_id ) )
return;
if(get_post_type( $post_id ) == 'tribe_events' ) {
remove_action( 'save_post', 'bam_save_event' );
wp_update_post( array( 'ID' => $post_id ) );
add_action( 'save_post', 'bam_save_event' );
add_action( 'set_object_terms', 'bam_save_event_cat', 10, 6 );
}
}
add_action( 'save_post', 'bam_save_event' );
Je pense avoir rencontré le même problème.
Vous devez définir une priorité plus élevée que la valeur par défaut de 10 dans votre action save_post. La priorité est spécifiée comme troisième argument lors de l'ajout d'une action comme expliqué dans le Codex
Comme :
add_action( 'save_post', 'bam_save_event', 99 );