{"id":157752,"date":"2016-08-05T14:00:57","date_gmt":"2016-08-05T14:00:57","guid":{"rendered":"https:\/\/premium.wpmudev.org\/blog\/?p=157752"},"modified":"2016-08-04T06:07:47","modified_gmt":"2016-08-04T06:07:47","slug":"saving-wordpress-users-from-themselves","status":"publish","type":"post","link":"https:\/\/wpmudev.com\/blog\/saving-wordpress-users-from-themselves\/","title":{"rendered":"9 Ways to Protect Users and Clients from Breaking Their WordPress Site"},"content":{"rendered":"<p>Everyone makes mistakes from time to time. It happens. But when the mistake occurs within a website that you put a lot of time and effort into building, it can be frustrating to go back and re-do your work, no matter how minor the issue.<\/p>\n<p>As a WordPress developer, you know the platform inside and out. You&#8217;re also familiar with the types of issues that can arise within it. Because of this, you\u2019ve probably already added some tricks to your overall workflow in order to mitigate and quickly resolve problems if and when they arise.<\/p>\n<p>So, what do you do with the issues that crop up outside of your development process? Do you wash your hands of the website once it\u2019s handed over to a client and wish them luck? As a professional, you know that playing the \u201cit\u2019s not my problem now\u201d card isn\u2019t going to win you any fans. You also know that maintaining relationships with your clients (current and former) is essential to your livelihood in this business.<\/p>\n<p>If something should happen to a client\u2019s website after you\u2019ve completed work, you should be willing to step in and resolve the problem immediately. Or, better yet, you should have additional steps built into your own workflow that will save clients (and yourself) from ever encountering those issues in the first place.<!--more--><\/p>\n<h3>WordPress User Errors and Why They\u2019re <em>Your<\/em> Problem<\/h3>\n<p>Let\u2019s face it: your clients aren\u2019t going to be WordPress pros. That\u2019s why <em>you\u2019re<\/em> getting paid to develop their website in the first place.<\/p>\n<p>Now, let\u2019s say you are an in-house employee building a website for your own company or that you\u2019ve been given a retainer to manage your client\u2019s website post-launch on an as-needed basis. You\u2019d be pretty annoyed if the president, marketing admin, or anyone else at the company came to you and said, \u201cWhoops! I think I broke something.\u201d Imagine how it would feel if you had completed work on a website, closed out the contract, and the same thing happened.<\/p>\n<p>Some clients won\u2019t understand that if the fault is theirs, that they need to compensate you to fix it. So not only are you left having to fix their mistake, but you have to try not to lose money and time while resolving it.<\/p>\n<p>No matter how this plays out for you as a developer, it\u2019s a tough situation to be in. You don\u2019t want to tell your client (or boss) that they made a mistake and you don\u2019t want to lose time on another project in order to fix it.<\/p>\n<p>But what can you do?<\/p>\n<h4>WordPress User Errors: Slips vs. Mistakes<\/h4>\n<p>The first thing you need to understand is why the most common types of errors occur with a WordPress website. Most website developers would\u00a0classify errors into two categories:<\/p>\n<p><b>Slips<\/b>: Slips are the type of errors that occur when a WordPress user\u2014usually an expert developer\u2014just forgets to do something or close a loop somewhere. If you think about it, you work on website after website\u2026 At some point, they\u2019re all going to blur one into another and eventually something is going to slip through the cracks because you\u2019re working on autopilot. That\u2019s why it\u2019s important to be diligent about working from a checklist to ensure that all the i\u2019s are dotted and the t\u2019s are crossed with every project.<\/p>\n<p><b>Mistakes<\/b>: Slips are easy enough to fix since they usually occur somewhere during development. As long as you follow a consistent and thorough process when building a website, it should be easy enough to trace your steps backwards to the error. Mistakes, however, usually stem from WordPress users trying to accomplish a task, but not truly understanding how to execute it. These can be tricky to resolve since the users can explain <em>what<\/em> they were trying to accomplish, but may not have any idea what they did to cause the problem.<\/p>\n<p>Mistakes occur for a number of reasons:<\/p>\n<ul>\n<li>A user has incomplete knowledge on how to execute a task.<\/li>\n<li>A user has admin (or some other higher level) access to WordPress when they shouldn\u2019t.<\/li>\n<li>A user didn\u2019t double-check his or her work before saving the changes.<\/li>\n<li>A user has too many options to choose from.<\/li>\n<\/ul>\n<p>What all this comes back to is the fact that your clients are probably not equipped with the knowledge and training in WordPress or website development to fully manage their websites on their own. This also means that they\u2019re definitely not able to fix any errors they cause either, so the onus will ultimately fall on you.<\/p>\n<h4>WordPress User Errors: Why They\u2019re Your Problem<\/h4>\n<p>Reworks suck, especially when you weren\u2019t the source of the problem. However, when WordPress access goes unchecked or clients are given access to parts of the website backend that they don\u2019t know how to properly use, it\u2019s inevitable that something will go wrong.<\/p>\n<p>As a developer, you\u2019re ultimately responsible for what happens to the website. Why?<\/p>\n<ol>\n<li>Because you built it. That\u2019s your baby. And you should take pride in keeping that baby running in tip-top shape.<\/li>\n<li>When you\u2019re willing to go the extra mile for your clients, you\u2019ll reap the benefits in the long run (through word-of-mouth, additional projects, etc.)<\/li>\n<li>By keeping your portfolio in good working order, you\u2019re helping to enhance your professional reputation as a developer.<\/li>\n<li>In the case that a client should cause serious damage to their website and is unwilling to take responsibility for it, you may find yourself becoming liable for the damages (which will not only hurt your reputation\u00a0but your wallet).<\/li>\n<li>By taking responsibility for the website in its entirety, you\u2019ll see the value in doing extra work during the initial build to save yourself time and money on reworks later.<\/li>\n<\/ol>\n<p>So are website errors post-launch and post-client handoff the developer\u2019s responsibility? Yes. Definitely. You can\u2019t expect clients (or anyone else granted access to the backend of the website) to understand web design, web development, or even the platform itself. By taking extra steps up front, you can ensure your websites stay (reasonably) safe from user error.<\/p>\n\n<h3>Pre-Launch Checklist for Preventing User Error<\/h3>\n<p>Novice WordPress users (i.e. your clients) are going to be clumsy and hasty in making changes. They paid you to build their website because 1) they don\u2019t know WordPress and 2) they don\u2019t have time to do it themselves. That\u2019s why you shouldn\u2019t be surprised if they don\u2019t bother to take the time or care when making changes to their site later on. They know you\u2019re going to be there for them, so why not protect their website (and yourself) now?<\/p>\n<p>Here is a pre-launch checklist you can add to your pre-launch development process. Your clients will be better prepared to manage their own sites and you\u2019ll be able to keep them safer from potential and easily avoidable user error:<\/p>\n<h4>Step 1: Include a WordPress Tutorial<\/h4>\n<p>Before handing a newly created website over to a client, make sure you have WordPress reference material you can share with them. It\u2019s not your job to teach them how to use WordPress or build a website, but you should have some sort of tutorial or guide that they can quickly reference in case any simple questions come up down the road.<\/p>\n<p>Our suggestion would be to develop a (self-branded) guide of your own that will cover the basics: \u201cHere is where your blog posts reside and here is where your pages are,\u201d \u201cAlways hit Save, but don\u2019t click Publish unless you\u2019re absolutely sure those changes are ready to go live,\u201d etc. You can then use this guide for any and all clients going forward. You should also install the <a href=\"https:\/\/wordpress.org\/plugins\/sidekick\/\" rel=\"noopener\" target=\"_blank\">Sidekick plugin<\/a> to ensure your visitors receive real-time WordPress guidance when they need it.<\/p>\n<div  class=\"wpdui-pic-regular  \"> <img loading=\"lazy\" decoding=\"async\" class=\"attachment-735x735 size-735x735\" src=\"https:\/\/wpmudev.com\/blog\/wp-content\/uploads\/2016\/07\/Sidekick-plugin-e1469301917470.png\" alt=\"Sidekick plugin\" width=\"670\" height=\"191\" \/> <\/div>\n<h4>Step 2: Provide Training Post-Launch<\/h4>\n<p>In addition to providing your clients with a WordPress reference guide, you should also plan on walking them through the CMS in real-time. If you don\u2019t work on-site with your client, you can use a free program like <a href=\"https:\/\/www.join.me\/\" rel=\"noopener\" target=\"_blank\">Join.Me<\/a> so you can share your screen. Make sure you show them the following:<\/p>\n<ul>\n<li>How to log in with the credentials you\u2019ve created for them.<\/li>\n<li>A review of each of the menu items they\u2019ll need to or want to use when managing and updating their website.<\/li>\n<li>An explanation of their capabilities. Are they an admin? What does a subscriber do versus an Editor? Make sure they understand their particular role\u2019s function and how to assign them to other team members.<\/li>\n<li>Demonstrate how they can preview changes before committing to making them live.<\/li>\n<li>Show them how to use the tutorial or guide you\u2019ve left for them if they should have any questions.<\/li>\n<\/ul>\n<h4>Step 3: Put Yourself Front and Center<\/h4>\n<p>As a best practice, every web developer should be giving their WordPress website a personalized backend design. By branding the WordPress interface, you\u2019re not only providing clients with a value-add (because, let\u2019s be honest, you don\u2019t have to do this), but you\u2019re also keeping your presence top-of-mind.<br \/>\nWith a plugin like <a href=\"https:\/\/wpmudev.com\/project\/ultimate-branding\/\" target=\"_blank\" rel=\"noopener\">Ultimate Branding<\/a>, you can create customized messages and modules in the dashboard, too, which would be a great place to include that tutorial you created for them.<\/p>\n<h4>Step 4: Bolster Security<\/h4>\n<p>Can you trust your clients to maintain strict security standards when using their website? No, probably not. So rather than wait around to find out that they\u2019re using a generic \u201cadmin\u201d login and \u201c1234\u201d password, enforce stricter security standards that they have to abide by from the get-go. Two-factor authentication, bcrypt hashing, and strong passwords shouldn\u2019t be optional.<\/p>\n<p>For information on how to set this up ahead of time, check out these <a href=\"https:\/\/wpmudev.com\/blog\/privacy-tips\/\" target=\"_blank\" rel=\"noopener\">ten tips<\/a>\u00a0or our post <a href=\"https:\/\/wpmudev.com\/blog\/ultimate-wordpress-security-checklist\/\" target=\"_blank\">WordPress Security: The Ultimate 32-Step Checklist<\/a>\u00a0.<\/p>\n<h4>Step 5: Automate the Backup<\/h4>\n<p>Your clients are going to be concerned with the idea of securing their websites, but they\u2019re probably not going to know how to keep it safe or they\u2019re not going to think they need to worry about it <em>right now<\/em>. You know that data can get lost or stolen at any moment and having a site that\u2019s regularly backed up isn\u2019t optional.<\/p>\n<p>If you don\u2019t want to have to deal with rebuilding a website or redoing recent changes because there wasn\u2019t a backup in place, give your clients a system that will automate the process for them. The <a href=\"https:\/\/wpmudev.com\/project\/snapshot\/\" target=\"_blank\" rel=\"noopener\">Snapshot Pro plugin<\/a> can help.<\/p>\n<h4>Step 6: Automate Updates<\/h4>\n<p>Automation is a wonderful thing for developers. You set up a process to manage itself the way you want it to, and then you just let it run in the background. That way you never have to worry about whether your clients have upgraded to the right version of WordPress or if they\u2019ve kept their themes and plugins secure by making regularly requested updates.<\/p>\n<p>If you&#8217;re a WPMU DEV member, you can update your plugins and themes from <a href=\"https:\/\/wpmudev.com\/hub\/\" target=\"_blank\">The Hub<\/a>. Otherwise, the <a href=\"https:\/\/wordpress.org\/plugins\/stops-core-theme-and-plugin-updates\/\" rel=\"noopener\" target=\"_blank\">Easy Updates Manager plugin<\/a>\u00a0is worth checking out. If you\u2019re looking for a tool to help automate this process and also give you the ability to control who can and cannot make updates to themes or plugins, definitely get this one.<\/p>\n<h4>Step 7: Restrict File Permissions<\/h4>\n<p>If your clients plan on making updates to their website in the future and they haven\u2019t sought out the help of you or another developer in making them, the hope then is that the changes are so minor that they don\u2019t require any updates to coding. However, leaving website files\u2014especially the wpconfig.php file which should always be moved above the root\u2014out in the open for a user (or hacker) to accidentally stumble upon and try to make changes to is a recipe for disaster.<\/p>\n<p><a href=\"https:\/\/codex.wordpress.org\/Hardening_WordPress\" rel=\"noopener\" target=\"_blank\">WordPress\u2019s codex<\/a> provides some helpful guidelines you can follow when assigning the proper permissions.<\/p>\n<h4>Step 8: Restrict User Access<\/h4>\n<p>When it comes to restricting user access in WordPress, some would argue that it\u2019s as simple as going to the Users tab and updating their role and rights. However, those pre-set rules aren\u2019t always enough.<\/p>\n<p>If you want even more control over user access and capabilities, check out the <a href=\"https:\/\/wordpress.org\/plugins\/members\/\" rel=\"noopener\" target=\"_blank\">Members plugin<\/a>.<\/p>\n<p>If you want to control who can use the Visual Editor, give <a href=\"https:\/\/wordpress.org\/plugins\/disable-visual-editor-wysiwyg\/\" rel=\"noopener\" target=\"_blank\">Disable Visual Editor<\/a> a try.<\/p>\n<p>If you want to control the different types of content (posts, pages, categories, media, and more) that can be accessed, <a href=\"https:\/\/wordpress.org\/plugins\/advanced-access-manager\/\" rel=\"noopener\" target=\"_blank\">Advanced Access Manager<\/a> will do the trick.<\/p>\n<h4>Step 9: Limit the Admin Dashboard<\/h4>\n<p>There may come a time when you need to issue admin rights to a user in WordPress. When that time comes, make sure you have a way to customize their access so they only have access to what they need. This will enable them to make the updates they want while giving them a more streamlined and easy-to-use WordPress interface. The <a href=\"https:\/\/wordpress.org\/plugins\/adminimize\/\" rel=\"noopener\" target=\"_blank\">Adminimize plugin<\/a> will give you the power to customize the backend menu for your WordPress admins (and other users).<\/p>\n<h3>Wrapping Up<\/h3>\n<p>Think of your clients and others who have access to the backend of your website like you would hackers. Obviously, their goal isn\u2019t to take down their own site or intentionally wreak havoc within the backend, but it could happen and you need to be prepared for it. Rather than wait to react when an error does occur, put a proactive plan in place while you\u2019re developing websites. By establishing a system of helpful user constraints and useful guidance, you can set your clients up for success.<\/p>\n<p>Remember: it\u2019s not just your job to protect their website from external harm, it\u2019s also your responsibility to protect your clients from themselves.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Everyone makes mistakes from time to time. It happens. But when the mistake occurs within a website that you put a lot of time and effort into building, it can be frustrating to go back and re-do your work, no matter how minor the issue. As a WordPress developer, you know the platform inside and [&hellip;]<\/p>\n","protected":false},"author":344989,"featured_media":150357,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"blog_reading_time":"","wds_primary_category":0,"wds_primary_tutorials_categories":0,"footnotes":""},"categories":[263],"tags":[10810,3903,146],"tutorials_categories":[],"class_list":["post-157752","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-tutorials","tag-wordpress-security","tag-error","tag-privacy"],"_links":{"self":[{"href":"https:\/\/wpmudev.com\/blog\/wp-json\/wp\/v2\/posts\/157752","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wpmudev.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/wpmudev.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/wpmudev.com\/blog\/wp-json\/wp\/v2\/users\/344989"}],"replies":[{"embeddable":true,"href":"https:\/\/wpmudev.com\/blog\/wp-json\/wp\/v2\/comments?post=157752"}],"version-history":[{"count":4,"href":"https:\/\/wpmudev.com\/blog\/wp-json\/wp\/v2\/posts\/157752\/revisions"}],"predecessor-version":[{"id":215742,"href":"https:\/\/wpmudev.com\/blog\/wp-json\/wp\/v2\/posts\/157752\/revisions\/215742"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/wpmudev.com\/blog\/wp-json\/wp\/v2\/media\/150357"}],"wp:attachment":[{"href":"https:\/\/wpmudev.com\/blog\/wp-json\/wp\/v2\/media?parent=157752"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wpmudev.com\/blog\/wp-json\/wp\/v2\/categories?post=157752"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wpmudev.com\/blog\/wp-json\/wp\/v2\/tags?post=157752"},{"taxonomy":"tutorials_categories","embeddable":true,"href":"https:\/\/wpmudev.com\/blog\/wp-json\/wp\/v2\/tutorials_categories?post=157752"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}