Exclude trash from save_post

时间:2016-10-21 作者:Adam

我有一个函数,用于在保存自定义帖子类型时处理自定义metabox数据:

add_action(\'save_post_customtypehere\',\'myown_save_customtype_fn\');
function myown_save_customtype_fn($ID) { ... }
然而,当我在这个CPT中丢弃项目时,该函数也会运行(我想这可以有效地保存帖子以进行更改post_statustrash). 如果没有metabox,我的函数最终会清除以下内容post_name (如果我需要从垃圾中恢复,那就不太好了!)。

我有两个想法,但无法完全克服它们:

1) 为了更新我使用的post数据remove_action()add_action() 再来一次wp_update_post(array(\'post_key\'=>$sanitized_form_input)) - 根据codex指令,这是避免无限循环所必需的。有没有类似的方法可以从垃圾桶张贴操作中排除(我已经尝试过了remove_action(\'trash_post\',\'myown_save_customtype_fn\' 紧随原文之后add_action 行)。

2) 有什么东西我可以用在条件句中吗myown_save_customtype_fn (沿着if (current action!=\'trash_post\') { ...)

2 个回复
最合适的回答,由SO网友:websupporter 整理而成

save_post 保存帖子后被解雇。我们将当前post对象作为第二个参数。因此,我们可以检查当前帖子状态是否为垃圾:

<?php
add_action( \'save_post\', function( $post_ID, $post, $update ) {
    if ( \'trash\' === $post->post_status ) {
        return;
    }

    /** do your stuff **/
}, 10, 3 );
?>

SO网友:atwellpub

以下内容有助于跳过还原选项和垃圾箱选项:

<?php
add_action( \'save_post_POSTTYPEHERE\', function( $post_ID, $post, $update ) {
    
    /* do not save meta on trash/untrash event */
    if(
        isset($_REQUEST[\'action\']) &&
        ( $_REQUEST[\'action\'] == \'trash\' || $_REQUEST[\'action\'] == \'untrash\')
    ){
        return;
    }

    /** do your stuff **/
    
}, 10, 3 );
?>