管理区域中自定义帖子的只读功能

时间:2013-04-06 作者:Jackson Gomes

实际上,我正在为WP构建自定义类型,并且需要能够将帖子访问权限限制为某些用户角色,即在管理区域,协作者可以看到帖子,但不能编辑它们,只能以只读方式打开它们。我使用了一些插件(Adminimize和User Role Editor),但据我所知,它们不适用于我的需要。

有人给我指点方向来解决这个问题吗?

2 个回复
SO网友:s_ha_dum

brasolfilo建议您删除提交元框,这只是我认为完整解决方案的一部分。我可以使用FireBug或其他一些工具在几分钟内将“提交”按钮插入该页面。

我会。。。

卸下元框。这是brasofilo的解决方案,由于代码看起来很好,所以我不会详细说明post-new.php 对于只应具有只读访问权限的用户的帖子类型以下代码使用\'Book\' post type that can be found in the Codex. 您可以修改它以匹配您的CPT。

删除对的访问权限post-new.php

function conditional_redirect_post_new_wpse_94776() {
  global $_REQUEST,$pagenow;
  if (!empty($_REQUEST[\'post_type\'])
    && \'book\' == $_REQUEST[\'post_type\']
    && !empty($pagenow)
    && \'post-new.php\' == $pagenow
    && !current_user_can(\'administrator\'))
  {
    wp_safe_redirect(admin_url(\'edit.php?post_type=book\'));
  }
}
add_filter(\'admin_menu\',\'conditional_redirect_post_new_wpse_94776\');
删除“添加新”菜单
function remove_add_new_menu_wpse_94776() {
  if (!current_user_can(\'administrator\')) {
    remove_submenu_page(\'edit.php?post_type=book\',\'post-new.php?post_type=book\');
  }
}
add_action(\'admin_menu\',\'remove_add_new_menu_wpse_94776\');
更改编辑页面上的“添加新”链接
function reset_post_new_link_wpse_94776() {
  global $post_new_file,$post_type_object;
  if (!isset($post_type_object) || \'book\' != $post_type_object->name) return false;

  if (!current_user_can(\'administrator\')) {
    $post_type_object->labels->add_new = \'Return to Index\';
    $post_new_file = admin_url(\'edit.php?post_type=book\');
  }
}
add_action(\'admin_head\',\'reset_post_new_link_wpse_94776\');
防止偷偷摸摸的提交
function stop_submit_wpse_94776() {
  if (!empty($_POST) && $_POST[\'post_type\'] == \'book\' && !current_user_can(\'administrator\')) {
    if (true === DOING_AJAX) {
      exit;
    }
    if (!empty($_POST[\'post_ID\'])) {
      wp_safe_redirect(admin_url(\'post.php?post=\'.$_POST[\'post_ID\'].\'&action=edit\'));
      exit;
    } else {
      wp_safe_redirect(admin_url(\'edit.php?post_type=book\'));
      exit;
    }
  }
}
add_action(\'admin_init\',\'stop_submit_wpse_94776\');
我想我明白了。我一直在测试它,但如果有bug,尤其是在最后一段代码中,我不会感到惊讶,如果有更优雅的方法来做同样的事情,我也不会感到惊讶排空警告。不退款。

SO网友:brasofilo

如果您只是删除了元框,那么就无法保存/更新帖子。此处使用常规立柱类型进行测试:

add_action( \'do_meta_boxes\', \'remove_publish_mbox_wpse_94776\', 10, 3 );

function remove_publish_mbox_wpse_94776( $post_type, $position, $post )
{
    remove_meta_box( \'submitdiv\', \'post\', \'side\' );
}
可能有issues 使用自动保存和修订。

另一种解决方案是使用jQuery使字段只读,但可能不是很可靠。

最后,另一种选择是removing 标题和内容字段以及printing 替换为简单文本。

结束

相关推荐

仅在wp-admin中显示死亡白屏

我可以登录该网站,但登录后,我在wp admin中看到一个白色屏幕。我仍然可以访问该网站,它显示我已使用每个页面顶部的工具栏登录,但每当我进入wp admin时,都会遇到一个白色屏幕。我尝试过重命名themes和plugins文件夹,甚至删除了这两个文件夹。我尝试将php内存限制提高到128M,但仍然没有成功。有什么建议吗?如果我必须重新安装Wordpress,我如何才能不丢失已经存在的一切?编辑:我也打开了调试,但仍然没有收到任何错误、警告或通知。