wake-up-neo.com

Wenn Sie eine Aktion zu save_post hinzufügen, muss der Beitrag zweimal gespeichert werden, damit die Funktion funktioniert

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' );
1
j-man86

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' );
2
Andy Adams

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