当然,你的自定义帖子不能被丢弃。他们甚至无法设置为私人或草稿或其他任何内容publish
因为你的回拨change_content()
始终将post状态设置为publish
每次(自定义帖子类型的)帖子保存时。然而,贬损帖子只意味着将其状态设置为trash
.
我不确定您想用这行代码实现什么:
$my_post[\'post_status\'] = \'publish\';
但是,如果您想跟踪状态更改,则必须连接到
transition_post_status
钩下面是一个快速但未经测试的示例,介绍如何做到这一点:
namespace WPSE186226;
class TrackPostStatus {
private $tashedPostsIds = [];
/**
* @wp-hook transition_post_status
* @param string $newStatus
* @param string $oldStatus
* @param \\WP_Post $post
*/
public function post_status_transition( $newStatus, $oldStatus, \\WP_Post $post ) {
//e.g. register when a post gets trashed:
if ( \'trash\' !== $old_status && \'trash\' === $new_status )
$this->trashedPostsIds[] = $post->ID;
}
/**
* @wp-hook save_post
* @param int $postId
*/
public function handle_post( $postId ) {
if ( ! in_array( $postId, $this->trashedPostIds ) )
return;
// call your logic here.
}
}
$postStatusTracker = new TrackPostStatus;
add_action( \'transition_post_status\', [ $postStatusTracker, \'post_status_transition\' ], 10, 3);
add_action( \'save_post\', [ $postStatusTracker, \'handle_post\' ] );
注意:此示例使用PHP 5.4语法,与PHP 5.3或更低版本不兼容
这种方式为您提供了更灵活的后期状态转换处理。但是,当您只想跟踪新状态时,有一个更简单的挂钩:{$new_status}_{$post_type}