如何阻止用户更新发布日期

时间:2013-09-07 作者:Dan

我有一个自定义角色,叫做“经销商”。一旦他们发布了新帖子,他们就不能删除它。他们也不能更新日期,这一点很重要,我对如何更新有点困惑。看起来旧的日期/日期保存在$\\u POST global中,所以我想我应该用这个来重写日期的更新信息。查看我的代码;

function rd_dealer_save_post($post_id)
{
$post_author_id = $_POST[\'post_author\'];
//print_r($_POST);
//test if this author is a dealer based on the caps
if(!current_user_can(\'delete_published_posts\'. $post_author_id))
{
    $_POST[\'mm\'] = $_POST[\'hidden_mm\'];
    $_POST[\'jj\'] = $_POST[\'hidden_jj\'];
    $_POST[\'aa\'] = $_POST[\'hidden_aa\'];
    $_POST[\'hh\'] = $_POST[\'hidden_hh\'];
    $_POST[\'mn\'] = $_POST[\'hidden_mn\']; 
} 
print_r($_POST);
//die();
}
add_action(\'save_post\', \'rd_dealer_save_post\');
我的行为正确吗?任何这样的想法似乎都不起作用。。。

谢谢,丹。

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

@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;
}

结束

相关推荐

If Posted After Date

我需要根据日期和类别获取不同的“get\\u template\\u part”。我已经更改了该类别的支出,这意味着在今天之前该类别中的任何帖子都不能使用新模板,但仍需要使用旧模板。if ( in_category( \'photographer-interviews\' )) { get_template_part( \'content\', \'interview\' ); } else { get_template_part( \'content\', \'blog\'