Ich habe die folgende Funktion geschrieben, die alle Post-Begriffe aus der Taxonomie "tribe_events_cat" in die Taxonomie "categoria" kopiert, wenn der Post gespeichert wird. Es gibt einen Fehler, bei dem ich zum Kopieren der Begriffe zweimal auf "Aktualisieren" klicken muss (d. H. Den Beitrag zweimal speichern).
Ich glaube, das passiert, weil beim Aufruf von get_the_terms
der Beitrag noch nicht gespeichert wurde.
Gibt es einen Ausweg, damit get_the_terms
die Begriffe aus dem neu aktualisierten Beitrag erhält?
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' );
Dies ist ein Stich in die Dunkelheit, aber haben Sie versucht, den Haken set_object_terms
für Ihre Funktion bam_save_event_cat
zu 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 eine höhere Priorität als die Standardpriorität 10 für Ihre Aktion save_post festlegen. Die Priorität wird als drittes Argument angegeben, wenn eine Aktion wie im Codex erläutert hinzugefügt wird .
Mögen :
add_action( 'save_post', 'bam_save_event', 99 );