给定多个管理员帐户,我如何才能使其只有拥有X用户名的管理员才能编辑帖子

时间:2013-12-12 作者:user2772219

我的问题主要在标题中。

我有2个或更多的管理员,但我只希望管理员与X用户名编辑标题的文章,而其他人只能查看他们。

请随意推荐涉及脚本或插件使用的解决方案。谢谢

注意:这仅适用于后端/仪表板。

2 个回复
SO网友:gmazzap

一旦你说“编辑”,我想你不必担心新的帖子,只需编辑现有的帖子即可。

所以,我的想法是删除支持fot标题时,管理员是不允许的。

我将编写一个单独的函数,如果当前用户是想要的管理员,则返回true,这样可以在站点的不同部分使用它。

function is_preferred_admin() {
  $u = wp_get_current_user();
  // change \'admin\' with the wanted login here
  return user_can($u, \'manage_options\') && $u->user_login === \'admin\';
}

add_action(\'load-post.php\', \'remove_title_support\');

function remove_title_support() {
  if ( is_preferred_admin() ) return;
  $scr = get_current_screen();
  remove_post_type_support( $scr->post_type, \'title\' );
}
考虑到这会删除UI,但并不是真正的阻止功能。为此,请筛选wp_insert_post_data 并防止标题更改:

add_filter(\'wp_insert_post_data\', \'prevent_edit_title\', 999, 2);

function prevent_edit_title( $new, $oldarr ) {
  if( is_preferred_admin() ) return;
  if ( ! isset($oldarr[\'ID\']) || empty($oldarr[\'ID\'])  ) return;
  $old = get_post($oldarr[\'ID\']);
  $new[\'post_title\'] = $old->post_title; // no change allowed
  $new[\'post_name\'] = $old->post_name; // no change allowed
  return $new;
}

SO网友:s_ha_dum

这是@G.M答案的重要延伸。对其进行注释以显示更改的代码。

不同之处在于,如果管理员名称不匹配,这将打印只读标题。

// use \'edit_form_after_title\' to create a place for your read only title box
function add_before_editor($post) {
  global $post;
  do_meta_boxes(\'post\', \'pre_editor\', $post);
}
add_action(\'edit_form_after_title\',\'add_before_editor\');

// the read only box content
function read_only_title_wpse_126209($post) { 
  global $post_type_object; ?>
  <div id="titlediv">
  <div id="titlewrap">
      <div class="screen-reader-text" id="title-prompt-text" for="title">Title (Read Only)</div>
      <?php echo esc_attr( htmlspecialchars( $post->post_title ) ); ?>
  </div>
  <div class="inside"><?php
    $sample_permalink_html = $post_type_object->public ? get_sample_permalink_html($post->ID) : \'\';
    $shortlink = wp_get_shortlink($post->ID, \'post\');
    if ( !empty($shortlink) ) {
        $sample_permalink_html .= \'<div id="read-only-shortlink">\' . esc_attr($shortlink) . \'</div>\';
    }
    if ( $post_type_object->public && ! ( \'pending\' == get_post_status( $post ) && !current_user_can( $post_type_object->cap->publish_posts ) ) ) {
        $has_sample_permalink = $sample_permalink_html && \'auto-draft\' != $post->post_status; 
    } ?>
  </div>
  </div><?php
}

// will add the read only box when called
function read_only_title_box() {
    add_meta_box(
        \'read_only_title\', // id, used as the html id att
        __( \'Title (Read Only)\' ), // meta box title
        \'read_only_title_wpse_126209\', // callback function, spits out the content
        \'post\', // post type or page. This adds to posts only
        \'pre_editor\', // context, where on the screen
        \'low\' // priority, where should this go in the context
    );
}

// G-M\'s function 
function is_preferred_admin() {
  $u = wp_get_current_user();
  // change \'admin\' with the wanted login here
  return user_can($u, \'manage_options\') && $u->user_login === \'admin\';
}
add_action(\'load-post.php\', \'remove_title_support\');

// G-M\'s function 
function remove_title_support() {
  if ( is_preferred_admin() ) return;
  $scr = get_current_screen();
  remove_post_type_support( $scr->post_type, \'title\' );

  // my addition to the function to load the read only box
  // add meta box to print current title
  add_action( \'add_meta_boxes\', \'read_only_title_box\' );
}
一些代码取自edit-form-advanced.php 从这里开始:https://wordpress.stackexchange.com/a/100495/21376

结束

相关推荐

MetaBox Layout for all users

我想知道:你是管理员:当你在页面或帖子中重新排序元框的布局时,此布局将与你的用户profile一起保存:例如,你将类别框拖到发布框之前。。。是否可以为其他用户(编辑、作者等)保存此布局?是否可以为每种类型的用户组织布局,而不必使用他们的帐户登录?谢谢你的帮助!