将操作添加到SAVE_POST,POST需要保存两次才能使函数工作

时间:2012-06-12 作者:HandiworkNYC.com

我编写了以下函数,该函数在保存帖子时将所有帖子术语从“tribe\\u events\\u cat”分类法复制到“categoria”分类法。有一个bug,为了复制条款,我需要单击“更新”两次(即保存帖子两次)。

我相信这会发生因为当我打电话的时候get_the_terms, 该帖子尚未保存。

有什么办法吗get_the_terms 从最新更新的帖子中获取术语?

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

2 个回复
SO网友:Andy Adams

这是暗中操作,但您是否尝试过使用set_object_terms 为您的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\' );

SO网友:Mat_

我想我也遇到了同样的问题。

您必须为save\\u post操作设置高于默认值10的优先级。如前所述,添加操作时,将优先级指定为第三个参数in the Codex

例如:

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

结束

相关推荐

Get_Terms-NAME__喜欢数字

使用Get Terms 如果参数为“name\\uu like”,如何返回所有以任意数字开头的结果?我尝试过:$feats = get_terms( \'movies\', array(\'name__like\' => \'1\', \'name__like\' => \'2\', \'name__like\' => \'3\' ) ); 以及$feats = get_terms( \'movies\', array(\'name__like\' => \'1,2,3