【问题标题】:Update posts table in save_post action在 save_post 操作中更新帖子表
【发布时间】:2020-10-29 16:16:28
【问题描述】:

我正在构建迷你插件,并且正在尝试更新帖子项目的 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 呢?

【问题讨论】:

    标签: php wordpress wordpress-plugin-creation


    【解决方案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' ); 
        }
    }
    

    【讨论】:

    • 谢谢,为了学习这个 remove_action 是如何工作的?
    • 您已经在代码中发现了问题——由于您添加到save_post 挂钩的操作,您正在进入一个无限循环(save_post 在 wp_update_post 中使用)。 remove_action 从钩子中移除这个动作,所以member_manager_save_extras 不会被save_post 调用
    • 问题是它打破了常规更新,比如编辑标题或文本。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-30
    • 1970-01-01
    • 2011-02-07
    • 2013-12-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多