如何让 WordPress 难以让客户搞砸

已发表: 2022-03-10
快速总结 ↬ WordPress 是一个非常强大的 CMS,具有许多通用功能,使其能够灵活地为各种用户开箱即用。 但是,如果您是构建自定义主题和插件的专业人士,有时这些功能可能会出现问题。 允许现成主题适应许多不同用例的相同功能和选项有时也可用于破坏为特定用例构建的精心设计的自定义主题。

WordPress 是一个非常强大的 CMS,具有许多通用功能,使其能够灵活地为广大用户开箱即用。 但是,如果您是构建自定义主题和插件的专业人士,有时这些功能可能会出现问题。 允许现成主题适应许多不同用例的相同功能和选项有时也可用于破坏为特定用例构建的精心设计的自定义主题。

以下文章包含我在几乎每个 WordPress 项目中一次又一次使用的代码片段集合。 它们的共同点是它们限制了不必要、令人困惑或不安全的功能。 以下所有内容都可以在任何网站上使用,但这些技巧特别适用于为客户制作自定义主题和插件的专业人士。

关于 SmashingMag 的进一步阅读

  • 如何创建和自定义 WordPress 子主题
  • 为 WordPress 最终用户编写有效的文档
  • 通过用户名限制 WordPress 中帖子的可见性
  • 在 WordPress 中使用用户角色

显着的区别是可以构建自定义主题以服务于特定目的。 所以作者内容的空白可以而且也应该更窄。 一个设计良好的 WordPress 主题应该做出尽可能多的设计决策,这样作者就不必这样做了。

跳跃后更多! 继续往下看↓

禁用插件和主题编辑器

没有充分的理由让任何人通过 WordPress 仪表板实时编辑您的自定义主题或插件文件。 专业人士不会那样做,麻瓜们通常不会意识到通过跳过一个分号来破坏网站是多么容易。 这也是黑客可以利用的安全漏洞。 幸运的是,我们在 WordPress.org 的朋友让禁用此功能变得非常容易。 只需将以下代码段添加到wp-config.php文件中。

 define( 'DISALLOW_FILE_EDIT', true );

除了主题编辑器之外,这还将禁用插件编辑器。 我认为这是一个功能而不是错误。

Wordpress 插件编辑器
Wordpress 插件编辑器。 (查看大图)

限制视觉和文本编辑器

默认情况下,WordPress WYSIWYG 编辑器为精心设计的自定义主题支持太多格式选项。 让客户覆盖文本颜色或字体大小是一种让最时尚的网站看起来既便宜又丑陋的快速方法。 如果博客文章文本被设计为始终左对齐,为什么要给作者一个右对齐按钮? 如果“关于”页面上的文本是紫色、粗体和斜体,你认为它会好看吗? 然后不要用手段来武装你的客户。 在大多数情况下,我建议完全禁用可视化编辑器。

丑陋的排版页面
丑陋的排版页面。 (查看大图)

禁用可视化编辑器

将以下代码段添加到主题的functions.php文件中,用于切换所见即所得编辑器的选项卡将消失。

 function emersonthis_disable_visual_editor(){ # add logic here if you want to permit it selectively return false; } add_filter('user_can_richedit' , 'emersonthis_disable_visual_editor', 50);

这是一个好的开始,但是您会注意到粗体和斜体按钮仍然存在于纯文本编辑器中。 根据我的经验,当所见即所得编辑器的即时满足感消失时,客户滥用这些按钮的频率会大大降低。 但如果没有必要,我仍然喜欢删除它们。

可视化编辑器选项卡
可视化编辑器选项卡。 (查看大图)

从文本编辑器中删除粗体和斜体快速标签

文本编辑器有快速标签按钮,可以用<strong><em>标签包裹选定的文本。 在主题的functions.php文件中添加以下代码,作者将不再有粗体或斜体按钮。

 # Removes bold and italic quicktags from text editor function emersothis_quicktags_settings( $qtInit ) { //To disable ALL butons it must be set to "," (not "") $qtInit['buttons'] = 'more,'; return $qtInit; } add_filter('quicktags_settings', 'emersonthis_quicktags_settings');

这消除了您的客户决定将整篇文章斜体化的可能性。 但这并没有消除手动将标记写入文本编辑器的能力。 当你处于紧要关头时,它会时不时地派上用场。

如果您在极少数情况下用户应该自己格式化文本,您可以启用可视化编辑器但单独禁用特定按钮。

禁用可视化编辑器上的按钮

我启用可视化编辑器的少数几次之一是当作者编写长篇文章或具有自己内部结构的页面时。 例如,一篇 10 页文章的作者可能需要添加副标题的能力。 在这些情况下,我为小节设置自定义类,然后禁用所有其他不需要的格式化按钮。

用于修改 TinyMCE 编辑器的 WordPress API 有点棘手,因为您需要查找用于引用要删除的每个按钮的代码名称。 通过删除“厨房水槽”按钮,您可以获得最大的收益,该按钮可以切换包含最有问题的格式按钮的整个第二行。 将以下代码添加到主题的functions.php文件中即可。

 # Remove visual editor buttons function emersonthis_tinymce_buttons($buttons) { # Remove the text color selector $remove = array('wp_adv'); //Add other button names to this array # Find the array key and then unset return array_diff($buttons,$remove); } add_filter( 'mce_buttons', 'emersonthis_tinymce_buttons' );

找出要删除的按钮的代码名称的一个技巧是检查表单的标记。 在撰写本文时,每个按钮都有一个以mce-i-开头的类名,后跟您将放在上面数组中的代码名称。

删除“添加媒体”按钮

只要自定义帖子类型支持编辑器功能,就会默认显示“添加媒体”按钮。 但是自定义帖子类型可用于广泛的事物,并且该字段通常不适合包含图像。

博客文章充满了丑陋的图像
博客文章充满了丑陋的图像。 (查看大图)

大多数情况下,当我希望作者发布图片来配文本时,我会使用帖子缩略图(也称为特色图片)。 这使得将图像集成到主题模板中变得很容易,并且还使开发人员可以更好地控制图像的大小和规格。

使用编辑器中的“添加媒体”按钮嵌入的临时照片很难控制,并且根据作者在与周围文本相关的位置插入图像的位置,它们往往看起来很尴尬。 它们也会让许多作者感到困惑,因为乍一看,“添加媒体”按钮很容易与页面下方出现的“精选图片”上传按钮(默认情况下)混淆,并且主题的使用方式可能非常不同。 我几乎总是通过将以下代码添加到主题的functions.php文件中来删除它。

 # Remove media buttons function emersonthis_remove_add_media(){ # do this conditionally if you want to be more selective remove_action( 'media_buttons', 'media_buttons' ); } add_action('admin_head', 'emersonthis_remove_add_media');

您可以在remove_action()之前添加逻辑,以仅针对某些帖子类型有条件地删除媒体按钮。 例如,您可能希望作者将图像添加到页面,而不是使用缩略图的博客文章。

禁用主题定制器选项

如果您正在处理子主题,则父主题可能会提供不适合子主题的自定义选项。 自定义选项可能在您的子主题中未使用,或者有可能破坏事物。 无论哪种方式,WordPress 主题定制器 API 都可以通过将以下代码段添加到主题的functions.php文件中轻松摆脱它们。

 # Remove customizer options. function emersonthis_remove_customizer_options( $wp_customize ) { // $wp_customize->remove_section( 'static_front_page' ); // $wp_customize->remove_section( 'title_tagline' ); $wp_customize->remove_section( 'colors' ); $wp_customize->remove_section( 'header_image' ); $wp_customize->remove_section( 'background_image' ); // $wp_customize->remove_section( 'nav' ); // $wp_customize->remove_section( 'themes' ); // $wp_customize->remove_section( 'featured_content' ); // $wp_customize->remove_panel( 'widgets' ); } add_action( 'customize_register', 'emersonthis_remove_customizer_options', 30);

上面代码片段中的每一行对应一个单独的主题自定义选项,您可以通过取消注释来禁用它。

隐藏未使用的仪表板菜单项

并非每个站点都有相同类型的内容; 例如,有些网站没有博客。 如果我们将相同的逻辑应用于 WordPress 仪表板,就像应用于任何其他用户界面,那么显示不执行任何操作的按钮是令人困惑且不必要的。 在这个例子中, Posts 菜单项是不必要的,所以让我们通过将以下代码片段添加到functions.php来删除它:

 function emersonthis_custom_menu_page_removing() { // remove_menu_page( 'index.php' ); //Dashboard // remove_menu_page( 'jetpack' ); //Jetpack* remove_menu_page( 'edit.php' ); //Posts remove_menu_page( 'upload.php' ); //Media // remove_menu_page( 'edit.php?post_type=page' ); //Pages remove_menu_page( 'edit-comments.php' ); //Comments // remove_menu_page( 'themes.php' ); //Appearance // remove_menu_page( 'plugins.php' ); //Plugins // remove_menu_page( 'users.php' ); //Users // remove_menu_page( 'tools.php' ); //Tools // remove_menu_page( 'options-general.php' ); //Settings } add_action( 'admin_menu', 'emersonthis_custom_menu_page_removing' );

每行对应于仪表板中的特定菜单。 文件名并不总是与仪表板菜单中显示的名称相匹配,因此将注释行保留为快速参考。

无论网站是否有博客,帖子菜单都会默认显示
无论站点是否有博客,默认情况下都会显示“帖子”菜单项。 (查看大图)
06-posts-menu-hidden-preview-opt
没有帖子菜单项的 WordPress 仪表板。 (查看大图)

重要的是要了解删除这些菜单项实际上并不会撤销用户的权限。 用户仍然可以使用 URL 直接访问隐藏的菜单项。 如果目标是通过隐藏多余的控件来减少仪表板的混乱,那么这可能很好。 如果目标实际上是阻止用户访问这些控件,那么您将需要修改用户角色的功能。 为此,请在插件的激活钩子中添加如下代码片段(它只需要运行一次):

 global $wp_roles; // global class $role = 'author'; $cap = 'delete_published_posts'; $wp_roles->remove_cap( $role, $cap );

使用这个包含所有功能的综合表格来查找可以为每个默认角色添加或删除的特定功能。

添加有关换行符如何在编辑器中工作的提示

默认情况下,当作者按下Return时,可视化编辑器 (TinyMCE) 将创建一个新段落。 如果您只想要一个老式的换行符(又名回车),您需要按Shift+Return 。 这对许多作者来说既漂亮又强大,但并不直观。 我已经开始添加一个快速提醒,以避免不可避免地抱怨在帖子或页面中出现“一堆奇怪的空白”。

带有难看的额外空白的博客文章
带有难看的额外空白的博客文章。 (查看大图)

将以下代码段添加到您的functions.php文件中。 更改$tip的值以说出您想提醒作者的任何内容。

 # Adds instruction text after the post title input function emersonthis_edit_form_after_title() { $tip = '<strong>TIP:</strong> To create a single line break use SHIFT+RETURN. By default, RETURN creates a new paragraph.'; echo '<p>'.$tip.'</p>'; } add_action( 'edit_form_after_title', 'emersonthis_edit_form_after_title' );

此技术可用于提醒您希望作者在添加或编辑内容时记住的任何内容。

添加了空格提示的帖子页面
添加了空白提示的帖子页面。 (查看大图)

不要分配管理员帐户

WordPress 管理员角色非常强大,权力越大,责任越大。 一些客户是经验丰富的 WordPress 高级用户,他们能够胜任地管理他们的网站。 他们中的许多人不是。 后者不应该作为管理员四处闲逛。 相反,让他们成为编辑并创建一个单独的管理员帐户,并使用超强密码。 如果您与客户有持续的联系,您可以保留这些凭据,直到客户准备好自己管理站点。

充满管理员的用户列表
用户列表中充满了管理员。 (查看大图)

或者,为客户端提供两组凭据,并让他们将管理员凭据存储在安全的地方,并且只使用它来执行管理任务。 许多客户会立即丢失管理员凭据,但这很好:密码始终可以重置,而且这些客户通常会重新雇用您为他们进行日常站点维护。

对管理员帐户吝啬的最重要原因是它们是一个安全漏洞。 一个令人愉快的副作用是,初学者 WordPress 用户在以作者或编辑者身份登录时通常会发现仪表板 UI 不那么不堪重负,因为在学习添加或编辑帖子等基本技能时,需要排序的菜单较少。

使用 mu 插件

mu-plugins/目录已经存在很长时间了,但我遇到的大多数 WordPress 黑客都没有听说过。 “mu”代表必须使用。 该目录是可以安装插件的替代位置。

必须在 Wordpress 仪表板中使用插件界面
必须在 WordPress 仪表板中使用插件界面。 (查看大图)

不同之处在于“必须使用”的插件会自动激活,并且不会在整个仪表板中意外禁用。 它们也在其他插件之前加载。 这对于网站正常运行必须存在的插件是理想的。 对于通常可能会卡在自定义主题的functions.php文件中的非演示性黑客,它也是一个很好的选择。 例如,我喜欢在 mu-plugin 中定义自定义帖子类型,因为无论特定主题是否处于活动状态,该内容都应该持续存在。

mu-plugins/目录不存在开箱即用。 您在wp-content/中手动创建它。

 wp-content/ mu-plugins/ plugins/ themes/ ...

最大的限制是 WordPress 只查找顶层mu-plugins/中的文件,并且会忽略子目录中的代码。 但是,您可以通过在mu-plugins/顶部创建一个 PHP 文件来解决此问题,该文件从同级子目录加载代码。 另请记住,更新通知不适用于 mu-plugins。 我认为mu-plugins/是放置客户永远不必考虑的重要代码的地方。

在 Codex 中阅读有关必须使用插件的更多信息。 如果您想通过阻止停用它们的能力来要求其他插件,您可能会发现 WDS-Required-Plugins 库很有用。

最后说明

您可能会发现禁用 WordPress 免费提供的功能是违反直觉的。 但请记住,您的客户并没有付钱让您给他们很多按钮。 您的工作是制作一个有效、强大的网站,并根据客户的目标量身定制。 通过禁用有问题或无关的功能,您实际上是在提供更多价值

如果您想要更多片段,我已经创建了一个有用的 WordPress 片段的公共 GitHub 存储库,其中包含上述 hack 的最新版本,以及我定期添加的其他内容。 如果您有自己想要分享的方便的片段,那么非常欢迎拉取请求!