0

我正在构建迷你插件,并且正在尝试更新帖子项目的 wp_post 表内容。

我的插件在 post edit.php 页面中添加了一个输入字段,并更改了数据库中帖子的 post_mime_type。

但是因为我在 add_action('save_post', ..) 中这样做,所以我不能使用 wp_update_post() 因为它在循环。

相关代码在这里:

add_action( 'save_post', 'member_manager_save_extras' );
function member_manager_save_extras($post_id){
    if( defined( 'DOING_AUTOSAVE' ) && DOING_AUTOSAVE ) 
        return; 

    else if( !isset( $_POST['meta_box_nonce'] ) ||
            !wp_verify_nonce( $_POST['meta_box_nonce'], 'my_meta_box_nonce' ) ) 
        return; 

    else if( !current_user_can( 'edit_post' ) ) 
        return $post_id; 

    else{
        $post = get_post($id) ; 
        $post -> post_mime_type = "sss" ; 
        wp_update_post( (array) $post ) ;   
    }
}

那么如何以另一种方式更新 post_mime_type 呢?

4

1 回答 1

1

实现此目的最直接的方法是分别在调用之前和之后删除操作并重新添加它wp_update_post

add_action( 'save_post', 'member_manager_save_extras' );
function member_manager_save_extras($post_id){
    if( defined( 'DOING_AUTOSAVE' ) && DOING_AUTOSAVE ) 
        return; 

    else if( !isset( $_POST['meta_box_nonce'] ) ||
            !wp_verify_nonce( $_POST['meta_box_nonce'], 'my_meta_box_nonce' ) ) 
        return; 

    else if( !current_user_can( 'edit_post' ) ) 
        return $post_id; 

    else{
        $post = get_post($id) ; 
        $post -> post_mime_type = "sss" ;

        // Remove the action
        remove_action( 'save_post', 'member_manager_save_extras' );

        // Perform any update that uses the save_post hook
        wp_update_post( (array) $post ) ;

        // Add it back again
        add_action( 'save_post', 'member_manager_save_extras' ); 
    }
}
于 2020-10-29T16:32:01.180 回答