如何禁止在wp-admin中编辑页面标题?

7
我有一个安装了wp-network的网站,每个站点都可以创建页面。这些页面都有在主菜单中显示的位置,只有一个用户拥有权限创建所有菜单。
我想创建一个用户,其仅能够编辑页面内容而不能编辑页面标题。如何针对某个特定用户或角色禁用页面标题在管理员菜单中的编辑功能呢?
我曾考虑一种方法是通过编辑管理员CSS来隐藏标题文本框,但我面临两个问题:第一,我不喜欢使用CSS隐藏东西;第二,我不知道管理员CSS在哪里,虽然我会PHP,但我不知道如何为角色添加CSS隐藏元素的功能。
下面是我期望的效果:How do I want it to be
2个回答

10
您绝对应该使用CSS来隐藏div#titlediv。您需要在标记中显示标题,以便表单提交、验证等操作可以顺利进行。
要实现此解决方案,您需要了解一些元素:
1. current_user_can() 是一个布尔函数,用于测试当前登录的用户是否具有功能或角色。 2. 您可以通过admin_head动作添加样式行,或者使用wp_enqueue_style将其存储在单独的CSS文件中。
以下是执行此操作的代码片段,请根据需要将其放置在合适的位置(如果您在网络中使用不同的主题,则可以将其放置在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
    }
}
?>

如果有CSS选择器引用菜单中的该条目,则可以使用此方法隐藏管理菜单栏中的“页面>新建页面”菜单。您知道那个选择器是否存在吗? - jperelli

-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)并将其分配给我想要的角色。


6
不应该编辑WordPress的核心文件,否则将来的更新会移除这个修改。 - Kirk Beard
4
你说得没错,我两年后看到这个回答时觉得它很傻。但我意识到自己学到了很多。StackOverflow太棒了。 - jperelli
1
现在七年过去了,感觉更傻了。请随意点踩!并且请继续学习如何(不)做事 :) - jperelli
9.5年后...我发现这个解决方案破坏了wp的升级,但实际上解决了原始问题。如果WordPress没有“钩子”来完成此操作,并且根据执行此操作的紧急性/重要性,我可能会批准此更改,尽管我倾向于使用CSS解决方案。 - jperelli

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接