Durch das Hinzufügen von Aktionen zu save_post muss der Post zweimal gespeichert werden, damit die function funktioniert

Ich habe die folgende function geschrieben, die alle Postterme aus der Taxonomie “tribe_events_cat” in die Taxonomie “categoria” kopiert, wenn der Beitrag gespeichert wird. Es gibt einen Fehler, bei dem, um die Begriffe zu kopieren, ich zweimal auf “update” klicken muss (dh den Beitrag zweimal speichern).

Ich glaube, das passiert, weil, wenn ich get_the_terms , der Post noch nicht gespeichert wurde.

Gibt es einen Weg dahin, damit get_the_terms die Bedingungen aus dem neu aktualisierten Beitrag bekommt?

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

Solutions Collecting From Web of "Durch das Hinzufügen von Aktionen zu save_post muss der Post zweimal gespeichert werden, damit die function funktioniert"

Dies ist ein Stich im Dunkeln, aber haben Sie versucht, den Haken set_object_terms für Ihre function bam_save_event_cat verwenden?

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

Ich denke, dass ich auf das gleiche Problem gestoßen bin.

Sie müssen für Ihre save_post-Aktion eine höhere Priorität als die Standardvorgabe von 10 festlegen. Die Priorität wird als drittes Argument beim Hinzufügen einer Aktion angegeben, wie im Codex erläutert

Mögen :

 add_action( 'save_post', 'bam_save_event', 99 );