像@t-f 在他对问题的评论中指出,您在检查当前用户能力时出错:\'delete_published_posts\'. $post_author_id
仅仅doesn\'t 存在
之后,对于您的范围,可能是过滤器中更好的挂钩wp_insert_post_data
而不是行动save_post
: 因为这一次是在帖子已经保存/更新时运行的,所以如果出现问题,您必须更改并再次更新。
挂钩wp_insert_post_data
过滤器,您可以更改正在更新的数据before 已运行更新,因此这将提高性能。
add_filter(\'wp_insert_post_data\', \'prevent_post_change\', 20, 2);
function prevent_post_change( $data, $postarr ) {
if ( ! isset($postarr[\'ID\']) || ! $postarr[\'ID\'] || current_user_can(\'delete_published_posts\') )
return $data;
$old = get_post($postarr[\'ID\']); // old post
// prevent changing date
$data[\'post_date\'] = $old->post_date
$data[\'post_date_gmt\'] = $old->post_date_gmt
// prevent sent to trash
if ( $data[\'post_status\'] == \'trash\' ) $data[\'post_status\'] = $old->post_status;
return $data;
}