7

我安装了一个 wp-network,用户可以在每个站点中创建页面。

这些页面中的每一个都在主菜单中占有一席之地,并且只有一个用户有权创建所有此菜单。

我想创建一个用户只能编辑页面的内容,但不能编辑标题。

如何禁用要从特定用户的管理菜单编辑的页面标题,或者(更好)功能?

我认为只有一种可能性,那就是编辑 admin css 来隐藏标题文本框,但我有两个问题:

  1. 我不喜欢 css-hide 东西。
    1. 我不知道管理员CSS在哪里。
    2. 我知道 php,但不知道如何为元素添加 css 隐藏功能。

我希望它如何

4

2 回答 2

9

您绝对应该使用 CSS 来隐藏 div#titlediv。您会希望标题显示在标记中,以便表单提交、验证等继续顺利进行。

实施此解决方案需要了解的一些要素:

  1. current_user_can()是一个布尔函数,用于测试当前登录用户是否具有能力或角色。
  2. 您可以通过 admin_head 操作在线添加样式,或者如果您想将其存储在单独的 CSS 文件中,可以使用wp_enqueue_style 。

这是一个可以完成这项工作的代码片段,将其放置在您认为合适的位置,functions.php 在您的主题中有效。如果您在网络中使用不同的主题,我会将其放入网络激活插件中:

<?php

add_action('admin_head', 'maybe_modify_admin_css');

function maybe_modify_admin_css() {

    if (current_user_can('specific_capability')) {
        ?>
        <style>
            div#titlediv {
                display: none;
            }
        </style>
        <?php
    }
}
?>
于 2012-04-04T19:04:28.577 回答
-2

我解决了这个问题,只要有人使用搜索引擎来到这里,我就会发布解决方案。

做了一些研究,我找到了插入标题文本框的代码部分,并且我找到了一个函数来了解用户是否具有某种能力

添加标题文本框的文件是/wp-admin/edit-form-advanced.php。这是文本框之前的行

if ( post_type_supports($post_type, 'title') )

我把它改成了这个

if ( post_type_supports($post_type, 'title') and current_user_can('edit_title') )

这样,仅当用户具有称为“edit_title”的功能时才添加文本框

当这个 IF 块在几行之后结束时,我添加了:

else echo "<h2>".esc_attr( htmlspecialchars( $post->post_title ) )."</h2>";

当用户没有“edit_title”能力时,查看页面标题但不编辑它。

然后我已经安装了一个插件来编辑用户功能和角色,它可以帮助我创建一个新功能(edit_title)并将其分配给我想要的角色。

于 2012-04-05T22:46:58.253 回答