{"id":11300,"date":"2024-02-05T07:00:46","date_gmt":"2024-02-05T15:00:46","guid":{"rendered":"http:\/\/dhwordpress.dreamhost.com\/dreamscape\/?p=11300"},"modified":"2026-07-07T16:13:52","modified_gmt":"2026-07-07T23:13:52","slug":"how-to-create-your-first-wordpress-plugin","status":"publish","type":"post","link":"https:\/\/www.dreamhost.com\/blog\/how-to-create-your-first-wordpress-plugin\/","title":{"rendered":"WordPress Plugin Development: Build Your First Plugin By Hand Or With AI"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">One of the main reasons that <a href=\"https:\/\/www.dreamhost.com\/blog\/what-is-wordpress\/\" target=\"_blank\" rel=\"noopener noreferrer\">WordPress is so popular<\/a> is its open-source nature.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Because of that, there are more than 60,000 free plugins in the official directory alone \u2014 all built for the internet\u2019s favorite <a href=\"https:\/\/www.dreamhost.com\/blog\/comprehensive-guide-to-content-management-systems\/\" target=\"_blank\" rel=\"noopener noreferrer\">content management system<\/a> (CMS).<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">And you can join in on the fun by creating your <i>own<\/i> <a href=\"https:\/\/www.dreamhost.com\/blog\/intro-to-wordpress-plugins\/\" target=\"_blank\" rel=\"noopener noreferrer\">WordPress plugin<\/a>.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">There have never been more ways to do it, either. You can write every line yourself \u2014 still the best way to actually learn WordPress development \u2014 or you can describe the plugin you want in plain English to an AI coding assistant like Claude Code and review what it builds. This guide covers both paths: the classic six-step manual build, then an AI-assisted walkthrough.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Either way, if it goes really well, you may even be able to sell your plugin and turn the project into a <a href=\"https:\/\/www.dreamhost.com\/blog\/lucrative-side-hustle-ideas\/\" target=\"_blank\" rel=\"noopener noreferrer\">side hustle<\/a>!<\/p>\n\n\n\n<h2 id=\"intro\" class=\"wp-block-heading\">A Quick Intro To WordPress Plugins<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">A WordPress plugin is a package of code that adds features to a WordPress site without changing the core software. Plugins hook into WordPress at defined points to change how the site works or looks. You install and activate them from the dashboard, and you can build one yourself with a single PHP file.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">WordPress has a <a href=\"https:\/\/w3techs.com\/technologies\/overview\/content_management\" target=\"_blank\" rel=\"noopener noreferrer\">market share of 59.2%<\/a> among all sites with an identifiable CMS (per W3Techs, July 2026), making it the most popular option by a landslide.<\/p>\n\n\n\n\n\n<div class=\"glossary-term\">\n\t<a\n\t\tclass=\"glossary-term__above-title\"\n\t\thref=\"\"\n\t\ttarget=\"_blank\"\n\t\trel=\"noopener noreferrer\"\n\t>\n\t\t<svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" viewBox=\"0 0 640 512\"><path d=\"M320 32c-8.1 0-16.1 1.4-23.7 4.1L15.8 137.4C6.3 140.9 0 149.9 0 160s6.3 19.1 15.8 22.6l57.9 20.9C57.3 229.3 48 259.8 48 291.9v28.1c0 28.4-10.8 57.7-22.3 80.8c-6.5 13-13.9 25.8-22.5 37.6C0 442.7-.9 448.3 .9 453.4s6 8.9 11.2 10.2l64 16c4.2 1.1 8.7 .3 12.4-2s6.3-6.1 7.1-10.4c8.6-42.8 4.3-81.2-2.1-108.7C90.3 344.3 86 329.8 80 316.5V291.9c0-30.2 10.2-58.7 27.9-81.5c12.9-15.5 29.6-28 49.2-35.7l157-61.7c8.2-3.2 17.5 .8 20.7 9s-.8 17.5-9 20.7l-157 61.7c-12.4 4.9-23.3 12.4-32.2 21.6l159.6 57.6c7.6 2.7 15.6 4.1 23.7 4.1s16.1-1.4 23.7-4.1L624.2 182.6c9.5-3.4 15.8-12.5 15.8-22.6s-6.3-19.1-15.8-22.6L343.7 36.1C336.1 33.4 328.1 32 320 32zM128 408c0 35.3 86 72 192 72s192-36.7 192-72L496.7 262.6 354.5 314c-11.1 4-22.8 6-34.5 6s-23.5-2-34.5-6L143.3 262.6 128 408z\"\/><\/svg>\n\t\t<span><\/span>\n\t\t<svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" viewBox=\"0 0 384 512\"><path d=\"M342.6 233.4c12.5 12.5 12.5 32.8 0 45.3l-192 192c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L274.7 256 105.4 86.6c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0l192 192z\"\/><\/svg>\n\t<\/a>\n\t<h3>WordPress<\/h3>\n    <p>WordPress is an open-source Content Management System (CMS). Since it is free and accessible, WordPress is used to power almost any type of website, from blogs to e-commerce businesses.<\/p>\n            <a\n            href=\"https:\/\/www.dreamhost.com\/glossary\/wordpress\/wordpress\/\"\n                        class=\"btn btn--white-outline btn--sm btn--round\"\n                                    aria-label=\"Read More: WordPress\"\n                                    target=\"_blank\"\n            rel=\"noopener noreferrer\"\n            >\n                            Read More                    <\/a>\n\n<\/div>\n\n\n\n<p class=\"wp-block-paragraph\">As mentioned earlier, WordPress is an open-source software platform. That means its source code, plugins, and <a href=\"https:\/\/www.dreamhost.com\/blog\/how-to-find-wp-themes\/\" target=\"_blank\" rel=\"noopener noreferrer\">themes<\/a> are available for anyone to work with and modify as they see fit.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><b>Note:<\/b> There&#8217;s a <a href=\"https:\/\/www.dreamhost.com\/blog\/wordpress-differences-beginners-guide\/\" target=\"_blank\" rel=\"noopener noreferrer\">difference between WordPress.com and WordPress.org<\/a>. The .org version is the open-source option that\u2019s free to download and use to create a custom site. It&#8217;s the version we&#8217;ll cover in this post. The .com version is a hosted site builder with which you can create a limited site for free.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">WordPress <a href=\"https:\/\/www.dreamhost.com\/glossary\/wordpress\/plugin\/\" target=\"_blank\" rel=\"noopener noreferrer\">plugins<\/a> are created by different developers all around the world and are designed for a variety of purposes.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">For instance, in the <a href=\"https:\/\/wordpress.org\/plugins\/\" target=\"_blank\" rel=\"noopener noreferrer\">existing plugin library<\/a> you\u2019ll find options for adding social media share buttons, adding newsletter signup forms to your sidebar, <a href=\"https:\/\/www.dreamhost.com\/blog\/seo-friendly-website-structure\/\" target=\"_blank\" rel=\"noopener noreferrer\">improving website search engine optimization<\/a> (SEO), turning WordPress into a full-blown ecommerce site, and much more.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">The WordPress plugin ecosystem lets people without coding knowledge build and customize powerful websites \u2014 and gives developers a huge audience to build for.<\/p>\n\n\n\n<div class=\"article-newsletter article-newsletter--gradient\">\n\n\n<p class=\"newsletter-form__title\">Get Content Delivered Straight to Your Inbox<\/p><p>Subscribe now to receive all the latest updates, delivered directly to your inbox.<\/p><form class=\"nwsl-form\" id=\"newsletter_block_\" novalidate><div class=\"messages\"><\/div><div class=\"form-group\"><label for=\"input_newsletter_block_\"><input type=\"email\"name=\"email\"id=\"input_newsletter_block_\"placeholder=\"Enter your email address\"novalidatedisabled=\"disabled\"\/><\/label><button type=\"submit\"class=\"btn btn--brand\"disabled=\"disabled\"><span>Sign Me Up!<\/span><svg width=\"21\" height=\"14\" viewBox=\"0 0 21 14\" fill=\"none\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\">\n<path d=\"M13.8523 0.42524L12.9323 1.34521C12.7095 1.56801 12.7132 1.9304 12.9404 2.14865L16.7241 5.7823H0.5625C0.251859 5.7823 0 6.03416 0 6.3448V7.6573C0 7.96794 0.251859 8.2198 0.5625 8.2198H16.7241L12.9405 11.8535C12.7132 12.0717 12.7095 12.4341 12.9323 12.6569L13.8523 13.5769C14.072 13.7965 14.4281 13.7965 14.6478 13.5769L20.8259 7.39879C21.0456 7.17913 21.0456 6.82298 20.8259 6.60327L14.6477 0.42524C14.4281 0.205584 14.0719 0.205584 13.8523 0.42524Z\" fill=\"white\"\/>\n<\/svg>\n<\/button><\/div><\/form><\/div>\n\n\n<h2 id=\"why\" class=\"wp-block-heading\">Why Develop A WordPress Plugin?<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">WordPress has one of the largest markets for developers. This means you\u2019ll find plenty of resources to help you develop the exact plugin you need to optimize your website. (But don\u2019t worry, we\u2019ll also detail the process here soon!) You won\u2019t find that level of support on many other website-building platforms.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">The magic of WordPress is that you can develop a solution for your own site and you don\u2019t have to share it on the plugin market. However, many developers choose to make their plugins available to others to help them work around similar issues as those the developers encountered.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">If you <i>do<\/i> choose to offer your plugin to others, there&#8217;s some earning potential associated with WordPress plugins because of the massive user base.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">While there&#8217;s no shortage of competition, if you have a new or better solution to a common problem, you could find your plugin downloaded for thousands of sites. With a great plugin, the right pricing strategy, and some marketing efforts,&nbsp;a plugin could turn into a nice passive<i>ish<\/i> income stream.<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" width=\"1600\" height=\"1317\" data-src=\"https:\/\/www.dreamhost.com\/blog\/wp-content\/smush-webp\/2022\/06\/01-How-Much-A-Plugin-Could-Make-Example.jpg.webp\" alt=\"How Much A Plugin Could Make Example\" class=\"wp-image-43026 lazyload\" data-srcset=\"https:\/\/www.dreamhost.com\/blog\/wp-content\/smush-webp\/2022\/06\/01-How-Much-A-Plugin-Could-Make-Example.jpg.webp 1600w, https:\/\/www.dreamhost.com\/blog\/wp-content\/uploads\/2022\/06\/01-How-Much-A-Plugin-Could-Make-Example-300x247.jpg 300w, https:\/\/www.dreamhost.com\/blog\/wp-content\/uploads\/2022\/06\/01-How-Much-A-Plugin-Could-Make-Example-1024x843.jpg 1024w, https:\/\/www.dreamhost.com\/blog\/wp-content\/uploads\/2022\/06\/01-How-Much-A-Plugin-Could-Make-Example-768x632.jpg 768w, https:\/\/www.dreamhost.com\/blog\/wp-content\/uploads\/2022\/06\/01-How-Much-A-Plugin-Could-Make-Example-1536x1264.jpg 1536w, https:\/\/www.dreamhost.com\/blog\/wp-content\/smush-webp\/2022\/06\/01-How-Much-A-Plugin-Could-Make-Example-600x494.jpg.webp 600w, https:\/\/www.dreamhost.com\/blog\/wp-content\/smush-webp\/2022\/06\/01-How-Much-A-Plugin-Could-Make-Example-1200x988.jpg.webp 1200w, https:\/\/www.dreamhost.com\/blog\/wp-content\/smush-webp\/2022\/06\/01-How-Much-A-Plugin-Could-Make-Example-730x601.jpg.webp 730w, https:\/\/www.dreamhost.com\/blog\/wp-content\/smush-webp\/2022\/06\/01-How-Much-A-Plugin-Could-Make-Example-1460x1202.jpg.webp 1460w, https:\/\/www.dreamhost.com\/blog\/wp-content\/smush-webp\/2022\/06\/01-How-Much-A-Plugin-Could-Make-Example-784x645.jpg.webp 784w, https:\/\/www.dreamhost.com\/blog\/wp-content\/smush-webp\/2022\/06\/01-How-Much-A-Plugin-Could-Make-Example-1568x1291.jpg.webp 1568w, https:\/\/www.dreamhost.com\/blog\/wp-content\/smush-webp\/2022\/06\/01-How-Much-A-Plugin-Could-Make-Example-877x722.jpg.webp 877w\" data-sizes=\"(max-width: 1600px) 100vw, 1600px\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" style=\"--smush-placeholder-width: 1600px; --smush-placeholder-aspect-ratio: 1600\/1317;\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Lastly, WordPress is an ideal platform for learning how to code. Because it has been around for over 20 years, there&#8217;s no shortage of resources both on and off WordPress to help you get the hang of development.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Speaking of resources,&nbsp;let\u2019s dive into everything you need to know to create your very own WordPress plugin.<\/p>\n\n\n\n<h2 id=\"how\" class=\"wp-block-heading\">How To Create A WordPress Plugin By Hand (6 Steps)<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">While different plugins will require different amounts of coding and know-how, they all tend to follow this same general development process. Even if you plan to lean on AI for the code (covered in the next section), read through these steps first \u2014 you\u2019ll need every one of them to understand, test, and ship what the AI writes.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Step 1: Do Your Research And Planning<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Like we said, there are numerous tools in the <a href=\"https:\/\/wordpress.org\/plugins\/\" target=\"_blank\" rel=\"noopener noreferrer\">WordPress plugin directory<\/a> \u2014 tens of thousands of them in fact. Therefore, the first thing you\u2019ll want to do is do some research to see if your idea already exists.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Even if it does, you <i>could<\/i> still proceed with your plan, provided that you make some tweaks so that you&#8217;re not creating an exact replica. Explore similar plugins and find out how you might be able to improve upon them. Alternatively, you could complement what&#8217;s already available with something like your own custom post type \u2014 say, to help keep a diary of your media consumption \u2014 or additional features.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">You might also want to check the status of existing plugins. For instance, if a plugin hasn\u2019t been updated in some time or isn&#8217;t compatible with the latest version of WordPress, there might be an opportunity to provide a better solution.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">You can also look at the number of active installations to see if there\u2019s a big market for the type of plugin that you have in mind. This can help you decide if it\u2019s worth the effort if you\u2019re looking to earn money. It\u2019s also a good idea to test the plugin on your own site to see what it does well and what could be done better.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Finally, before diving into the build, you\u2019ll want to read up on the <a href=\"https:\/\/developer.wordpress.org\/coding-standards\/wordpress-coding-standards\/\" target=\"_blank\" rel=\"noopener noreferrer\">WordPress Coding Standards<\/a>. This is particularly important if you\u2019re planning to share or sell your plugin. These coding standards are a set of guidelines and best practices that developers should try to adhere to when creating themes and plugins for WordPress.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><b><i>Related: <\/i><\/b><a href=\"https:\/\/www.dreamhost.com\/blog\/learn-wordpress\/\" target=\"_blank\" rel=\"noopener noreferrer\"><b><i>Want To Learn WordPress? Start With These Resources<\/i><\/b><\/a><\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Step 2: Set Up A Testing Environment<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">The next step is to set up a testing environment.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">As a beginner, you&#8217;re likely to learn (and maybe break) a few things along the way. You don\u2019t want to experiment on your live website that any internet user can see. A private testing environment \u2014 a local site on your computer, or a <a href=\"https:\/\/www.dreamhost.com\/blog\/website-staging-beginners-guide\/\" target=\"_blank\" rel=\"noopener noreferrer\">staging copy<\/a> of your site \u2014 will enable you to test your plugin privately as you work on it.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">We endorse using <a href=\"https:\/\/localwp.com\/\" target=\"_blank\" rel=\"noopener noreferrer\">Local<\/a> to create a WordPress site on your computer. It offers a straightforward, user-friendly development environment that offers powerful yet flexible tools for most people.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">For quick experiments, there\u2019s an even faster option: <a href=\"https:\/\/playground.wordpress.net\/\" target=\"_blank\" rel=\"noopener noreferrer\">WordPress Playground<\/a> runs a full WordPress site entirely in your browser, with nothing to install or sign up for. It\u2019s free and open source, and a great place to try out a small plugin in seconds. (By default it resets when you refresh or close the tab, so treat it as a scratchpad, not a workspace.)<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">You can also create an online staging environment. With DreamHost <a href=\"https:\/\/www.dreamhost.com\/hosting\/\" target=\"_blank\" rel=\"noopener noreferrer\">web hosting<\/a>, you can easily <a href=\"https:\/\/help.dreamhost.com\/hc\/en-us\/articles\/360003838631-Creating-a-staging-WordPress-site\" target=\"_blank\" rel=\"noopener noreferrer\">create a staging WordPress site<\/a> where you can test your plugin without breaking your live site or interrupting your visitors&#8217; user experiences.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Step 3: Create Your Plugin File<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Once you have your staging environment set up, it\u2019s time to use it to create your plugin.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">The first step is to create a folder for it in your site\u2019s directory.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">You can use an <a href=\"https:\/\/www.dreamhost.com\/glossary\/hosting\/sftp\/\" target=\"_blank\" rel=\"noopener noreferrer\">FTP\/SFTP client<\/a> like FileZilla to access your site\u2019s files and folders. Or, you may be able to tap into your site via the file manager provided in your hosting account. For DreamHost users, our guide to <a href=\"https:\/\/help.dreamhost.com\/hc\/en-us\/articles\/360003490852\" target=\"_blank\" rel=\"noopener noreferrer\">using the website file manager<\/a> will help you use our built-in file manager.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Once you\u2019ve connected to your site\u2019s directory, navigate to wp-content\/plugins and create a new folder for your plugin.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Next, you\u2019ll need to create a PHP file to add to this folder. To do this, open your preferred text editor and enter the following information:<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><code>&lt;?php<\/code><br><code>\/**<\/code><br><code>* Plugin Name: test-plugin<\/code><br><code>* Plugin URI: https:\/\/www.your-site.com\/<\/code><br><code>* Description: Test.<\/code><br><code>* Version: 0.1<\/code><br><code>* Author: your-name<\/code><br><code>* Author URI: https:\/\/www.your-site.com\/<\/code><br><code>**\/<\/code><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Of course, you\u2019ll need to change the above information to match your details. When you\u2019re ready, you can save your file. Remember to use the file extension \u201cphp\u201d (e.g., my-first-plugin.php).<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Then, you\u2019ll need to upload this file to the plugin folder that you just created at wp-content\/plugins. Once you\u2019ve done this, navigate to your test site\u2019s WordPress dashboard and go to the Plugins page.<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" width=\"1600\" height=\"710\" data-src=\"https:\/\/www.dreamhost.com\/blog\/wp-content\/smush-webp\/2022\/06\/plugins.jpg.webp\" alt=\"screenshot showing the plugins option on a wordpress menu\" class=\"wp-image-43027 lazyload\" data-srcset=\"https:\/\/www.dreamhost.com\/blog\/wp-content\/smush-webp\/2022\/06\/plugins.jpg.webp 1600w, https:\/\/www.dreamhost.com\/blog\/wp-content\/uploads\/2022\/06\/plugins-300x133.jpg 300w, https:\/\/www.dreamhost.com\/blog\/wp-content\/uploads\/2022\/06\/plugins-1024x454.jpg 1024w, https:\/\/www.dreamhost.com\/blog\/wp-content\/uploads\/2022\/06\/plugins-768x341.jpg 768w, https:\/\/www.dreamhost.com\/blog\/wp-content\/uploads\/2022\/06\/plugins-1536x682.jpg 1536w, https:\/\/www.dreamhost.com\/blog\/wp-content\/smush-webp\/2022\/06\/plugins-600x266.jpg.webp 600w, https:\/\/www.dreamhost.com\/blog\/wp-content\/smush-webp\/2022\/06\/plugins-1200x533.jpg.webp 1200w, https:\/\/www.dreamhost.com\/blog\/wp-content\/smush-webp\/2022\/06\/plugins-730x324.jpg.webp 730w, https:\/\/www.dreamhost.com\/blog\/wp-content\/smush-webp\/2022\/06\/plugins-1460x648.jpg.webp 1460w, https:\/\/www.dreamhost.com\/blog\/wp-content\/smush-webp\/2022\/06\/plugins-784x348.jpg.webp 784w, https:\/\/www.dreamhost.com\/blog\/wp-content\/smush-webp\/2022\/06\/plugins-1568x696.jpg.webp 1568w, https:\/\/www.dreamhost.com\/blog\/wp-content\/smush-webp\/2022\/06\/plugins-877x389.jpg.webp 877w\" data-sizes=\"(max-width: 1600px) 100vw, 1600px\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" style=\"--smush-placeholder-width: 1600px; --smush-placeholder-aspect-ratio: 1600\/710;\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Here, you should be able to see your new plugin!<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">This plugin won\u2019t do anything yet if you were to activate it. However, WordPress will recognize it as a functional add-on from this point forward.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Step 4: Add Code To Your Plugin<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Every plugin is different. However, they all share common components. For instance, all plugins use <a href=\"https:\/\/developer.wordpress.org\/plugins\/hooks\/\" target=\"_blank\" rel=\"noopener noreferrer\">hooks<\/a> to interact with WordPress.<\/p>\n\n\n\n\n\n<div class=\"glossary-term\">\n\t<a\n\t\tclass=\"glossary-term__above-title\"\n\t\thref=\"\"\n\t\ttarget=\"_blank\"\n\t\trel=\"noopener noreferrer\"\n\t>\n\t\t<svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" viewBox=\"0 0 640 512\"><path d=\"M320 32c-8.1 0-16.1 1.4-23.7 4.1L15.8 137.4C6.3 140.9 0 149.9 0 160s6.3 19.1 15.8 22.6l57.9 20.9C57.3 229.3 48 259.8 48 291.9v28.1c0 28.4-10.8 57.7-22.3 80.8c-6.5 13-13.9 25.8-22.5 37.6C0 442.7-.9 448.3 .9 453.4s6 8.9 11.2 10.2l64 16c4.2 1.1 8.7 .3 12.4-2s6.3-6.1 7.1-10.4c8.6-42.8 4.3-81.2-2.1-108.7C90.3 344.3 86 329.8 80 316.5V291.9c0-30.2 10.2-58.7 27.9-81.5c12.9-15.5 29.6-28 49.2-35.7l157-61.7c8.2-3.2 17.5 .8 20.7 9s-.8 17.5-9 20.7l-157 61.7c-12.4 4.9-23.3 12.4-32.2 21.6l159.6 57.6c7.6 2.7 15.6 4.1 23.7 4.1s16.1-1.4 23.7-4.1L624.2 182.6c9.5-3.4 15.8-12.5 15.8-22.6s-6.3-19.1-15.8-22.6L343.7 36.1C336.1 33.4 328.1 32 320 32zM128 408c0 35.3 86 72 192 72s192-36.7 192-72L496.7 262.6 354.5 314c-11.1 4-22.8 6-34.5 6s-23.5-2-34.5-6L143.3 262.6 128 408z\"\/><\/svg>\n\t\t<span><\/span>\n\t\t<svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" viewBox=\"0 0 384 512\"><path d=\"M342.6 233.4c12.5 12.5 12.5 32.8 0 45.3l-192 192c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L274.7 256 105.4 86.6c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0l192 192z\"\/><\/svg>\n\t<\/a>\n\t<h3>Hook<\/h3>\n    <p>WordPress hooks are pieces of code that allow you to modify the CMS and add new features to it without tinkering with core files. Hooks make this possible by enabling you to \u201chook\u201d custom code into pre-defined spots in WordPress.<\/p>\n            <a\n            href=\"https:\/\/www.dreamhost.com\/glossary\/wordpress\/hook\/\"\n                        class=\"btn btn--white-outline btn--sm btn--round\"\n                                    aria-label=\"Read More: Hook\"\n                                    target=\"_blank\"\n            rel=\"noopener noreferrer\"\n            >\n                            Read More                    <\/a>\n\n<\/div>\n\n\n\n<p class=\"wp-block-paragraph\">A hook is how a plugin connects to the pre-existing code of WordPress\u2019s core programming. In other words, the hook is the anchor point where a plugin inserts itself in order to add or change the functionality of a site.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Hooks are an important part of WordPress development. There are <a href=\"https:\/\/developer.wordpress.org\/reference\/hooks\/\" target=\"_blank\" rel=\"noopener noreferrer\">hundreds of hooks<\/a> that can be used as triggers for a plugin, and you can even create new ones if needed.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">But for now, there are two types of hooks that you&#8217;ll need to consider when creating your plugin:<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li><a href=\"https:\/\/developer.wordpress.org\/plugins\/hooks\/actions\/\" target=\"_blank\" rel=\"noopener noreferrer\">Actions<\/a>: These add or change WordPress functionality and make up the majority of hooks.<\/li>\n\n\n\n<li><a href=\"https:\/\/developer.wordpress.org\/plugins\/hooks\/filters\/\" target=\"_blank\" rel=\"noopener noreferrer\">Filters<\/a>: These are used to modify the functionality of actions.<\/li>\n<\/ol>\n\n\n\n<p class=\"wp-block-paragraph\">To code your plugin, you\u2019ll need to familiarize yourself with hooks and how they work. Fortunately, the <a href=\"https:\/\/developer.wordpress.org\/plugins\/\" target=\"_blank\" rel=\"noopener noreferrer\">Plugin Handbook<\/a> from WordPress can help you get started.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">For this guide, we\u2019ll use the following code <a href=\"https:\/\/codex.wordpress.org\/Customizing_the_Read_More#Modify_The_Read_More_Link_Text\" target=\"_blank\" rel=\"noopener noreferrer\">(source)<\/a> as an example:<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: plain; title: ; notranslate\" title=\"\">\nfunction modify_read_more_link() {\n    return &#039;&amp;lt;a class=&quot;more-link&quot; href=&quot;&#039; . get_permalink() . &#039;&quot;&gt;Click to Read!&amp;lt;\/a&gt;&#039;;\n}\nadd_filter( &#039;the_content_more_link&#039;, &#039;modify_read_more_link&#039; );\n\n<\/pre><\/div>\n\n\n<p class=\"wp-block-paragraph\">As you might be able to see, this code uses a filter to modify the standard \u201cread more\u201d link by replacing it with a different value: \u201cClick to Read!\u201d<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">If you add this snippet to your PHP file and activate the plugin on your site, you\u2019ll end up seeing the following anchor text below your post excerpts:<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" width=\"1600\" height=\"738\" data-src=\"https:\/\/www.dreamhost.com\/blog\/wp-content\/smush-webp\/2022\/06\/click-to-read.jpg.webp\" alt=\"example of this plugin at work with a header image, some text, and a &quot;Click to Read!&quot; call to action \" class=\"wp-image-43028 lazyload\" data-srcset=\"https:\/\/www.dreamhost.com\/blog\/wp-content\/smush-webp\/2022\/06\/click-to-read.jpg.webp 1600w, https:\/\/www.dreamhost.com\/blog\/wp-content\/uploads\/2022\/06\/click-to-read-300x138.jpg 300w, https:\/\/www.dreamhost.com\/blog\/wp-content\/uploads\/2022\/06\/click-to-read-1024x472.jpg 1024w, https:\/\/www.dreamhost.com\/blog\/wp-content\/uploads\/2022\/06\/click-to-read-768x354.jpg 768w, https:\/\/www.dreamhost.com\/blog\/wp-content\/uploads\/2022\/06\/click-to-read-1536x708.jpg 1536w, https:\/\/www.dreamhost.com\/blog\/wp-content\/smush-webp\/2022\/06\/click-to-read-600x277.jpg.webp 600w, https:\/\/www.dreamhost.com\/blog\/wp-content\/smush-webp\/2022\/06\/click-to-read-1200x554.jpg.webp 1200w, https:\/\/www.dreamhost.com\/blog\/wp-content\/smush-webp\/2022\/06\/click-to-read-730x337.jpg.webp 730w, https:\/\/www.dreamhost.com\/blog\/wp-content\/smush-webp\/2022\/06\/click-to-read-1460x673.jpg.webp 1460w, https:\/\/www.dreamhost.com\/blog\/wp-content\/smush-webp\/2022\/06\/click-to-read-784x362.jpg.webp 784w, https:\/\/www.dreamhost.com\/blog\/wp-content\/smush-webp\/2022\/06\/click-to-read-1568x723.jpg.webp 1568w, https:\/\/www.dreamhost.com\/blog\/wp-content\/smush-webp\/2022\/06\/click-to-read-877x405.jpg.webp 877w\" data-sizes=\"(max-width: 1600px) 100vw, 1600px\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" style=\"--smush-placeholder-width: 1600px; --smush-placeholder-aspect-ratio: 1600\/738;\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Feel free to experiment with the code and try using a different function.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Note that you <i>could<\/i> also add this code to your theme\u2019s <a href=\"https:\/\/codex.wordpress.org\/Functions_File_Explained\" target=\"_blank\" rel=\"noopener noreferrer\">functions.php file<\/a>. This file contains code that adds functionality to your site and works in a way that&#8217;s similar to how a plugin adds functionality. However, if you switch to a different theme in the future \u2014 or your theme is upgraded to a new version \u2014 you&#8217;ll lose these changes.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">One caveat: the example above works only for sites using <a href=\"https:\/\/developer.wordpress.org\/themes\/getting-started\/what-is-a-theme\/#classic-themes\" target=\"_blank\" rel=\"noopener noreferrer\">classic themes<\/a>. <a href=\"https:\/\/wordpress.org\/documentation\/article\/block-themes\/\" target=\"_blank\" rel=\"noopener noreferrer\">Block themes<\/a> work differently \u2014 post excerpts and their \u201cread more\u201d links are laid out visually in the Site Editor, so this particular filter won\u2019t change anything there. The plugin structure you just learned is identical either way.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><b><i>Related: <\/i><\/b><a href=\"https:\/\/www.dreamhost.com\/blog\/tutorial-how-to-install-a-wp-theme\/\" target=\"_blank\" rel=\"noopener noreferrer\"><b><i>How To Install A WordPress Theme (Tutorial)<\/i><\/b><\/a><\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Step 5: Test Your Plugin<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">As you continue developing your plugin, it\u2019s important that you save your work often and test your changes on your staging or development site.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Once you\u2019re satisfied with your plugin, you should try it on a live site. Again, you\u2019ll want to make sure that you&#8217;ve already thoroughly tested your plugin for any bugs and vulnerabilities.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">It\u2019s also a good idea to <a href=\"https:\/\/www.dreamhost.com\/blog\/how-to-back-up-wordpress-tutorial\/\" target=\"_blank\" rel=\"noopener noreferrer\">create a backup<\/a> of your live site before testing your plugin on it. This way, if anything does go wrong, you can restore your content.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">If you\u2019re happy with the performance of your plugin at this point, you could offer it to other developers for them to use and test. This can earn you valuable feedback. You could also ask them to put your plugin through its paces and try to break it to prove its stability.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">To do this, you\u2019ll want to export your plugin to a zip file for easy distribution and installation. Locate your plugin\u2019s folder in the site\u2019s directory, then right-click on it and follow the steps to create a zip file. For example, on Microsoft Windows select <i>Send to &gt; Compressed (zipped) folder<\/i>.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Choose a destination, and the files within your folder will be compiled into a zip folder that you can easily share. If you&#8217;re developing on a live site, you may need to first download the plugin folder from your SFTP client before compressing it.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">To install your plugin on a WordPress site, simply navigate to <i>Plugins &gt; Add New Plugin<\/i> from the sidebar in your WordPress admin panel.<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" width=\"1600\" height=\"569\" data-src=\"https:\/\/www.dreamhost.com\/blog\/wp-content\/smush-webp\/2022\/06\/add-new-plugin.jpg.webp\" alt=\"screenshot of the &quot;add new plugin&quot; option on a wordpress navigation menu\" class=\"wp-image-43029 lazyload\" data-srcset=\"https:\/\/www.dreamhost.com\/blog\/wp-content\/smush-webp\/2022\/06\/add-new-plugin.jpg.webp 1600w, https:\/\/www.dreamhost.com\/blog\/wp-content\/uploads\/2022\/06\/add-new-plugin-300x107.jpg 300w, https:\/\/www.dreamhost.com\/blog\/wp-content\/uploads\/2022\/06\/add-new-plugin-1024x364.jpg 1024w, https:\/\/www.dreamhost.com\/blog\/wp-content\/uploads\/2022\/06\/add-new-plugin-768x273.jpg 768w, https:\/\/www.dreamhost.com\/blog\/wp-content\/uploads\/2022\/06\/add-new-plugin-1536x546.jpg 1536w, https:\/\/www.dreamhost.com\/blog\/wp-content\/smush-webp\/2022\/06\/add-new-plugin-600x213.jpg.webp 600w, https:\/\/www.dreamhost.com\/blog\/wp-content\/smush-webp\/2022\/06\/add-new-plugin-1200x427.jpg.webp 1200w, https:\/\/www.dreamhost.com\/blog\/wp-content\/smush-webp\/2022\/06\/add-new-plugin-730x260.jpg.webp 730w, https:\/\/www.dreamhost.com\/blog\/wp-content\/smush-webp\/2022\/06\/add-new-plugin-1460x519.jpg.webp 1460w, https:\/\/www.dreamhost.com\/blog\/wp-content\/smush-webp\/2022\/06\/add-new-plugin-784x279.jpg.webp 784w, https:\/\/www.dreamhost.com\/blog\/wp-content\/smush-webp\/2022\/06\/add-new-plugin-1568x558.jpg.webp 1568w, https:\/\/www.dreamhost.com\/blog\/wp-content\/smush-webp\/2022\/06\/add-new-plugin-877x312.jpg.webp 877w\" data-sizes=\"(max-width: 1600px) 100vw, 1600px\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" style=\"--smush-placeholder-width: 1600px; --smush-placeholder-aspect-ratio: 1600\/569;\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">At the top of the page, you\u2019ll see a button to <i>Upload Plugin<\/i>. Once selected, you\u2019ll be prompted to choose a zip file to upload to your site.<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" width=\"1600\" height=\"479\" data-src=\"https:\/\/www.dreamhost.com\/blog\/wp-content\/smush-webp\/2022\/06\/upload-a-zipped-file.jpg.webp\" alt=\"&quot;if you have a plugin in a .zip format, you may install or update it by uploading it here&quot;\" class=\"wp-image-43030 lazyload\" data-srcset=\"https:\/\/www.dreamhost.com\/blog\/wp-content\/smush-webp\/2022\/06\/upload-a-zipped-file.jpg.webp 1600w, https:\/\/www.dreamhost.com\/blog\/wp-content\/uploads\/2022\/06\/upload-a-zipped-file-300x90.jpg 300w, https:\/\/www.dreamhost.com\/blog\/wp-content\/uploads\/2022\/06\/upload-a-zipped-file-1024x307.jpg 1024w, https:\/\/www.dreamhost.com\/blog\/wp-content\/uploads\/2022\/06\/upload-a-zipped-file-768x230.jpg 768w, https:\/\/www.dreamhost.com\/blog\/wp-content\/uploads\/2022\/06\/upload-a-zipped-file-1536x460.jpg 1536w, https:\/\/www.dreamhost.com\/blog\/wp-content\/smush-webp\/2022\/06\/upload-a-zipped-file-600x180.jpg.webp 600w, https:\/\/www.dreamhost.com\/blog\/wp-content\/smush-webp\/2022\/06\/upload-a-zipped-file-1200x359.jpg.webp 1200w, https:\/\/www.dreamhost.com\/blog\/wp-content\/smush-webp\/2022\/06\/upload-a-zipped-file-730x219.jpg.webp 730w, https:\/\/www.dreamhost.com\/blog\/wp-content\/smush-webp\/2022\/06\/upload-a-zipped-file-1460x437.jpg.webp 1460w, https:\/\/www.dreamhost.com\/blog\/wp-content\/smush-webp\/2022\/06\/upload-a-zipped-file-784x235.jpg.webp 784w, https:\/\/www.dreamhost.com\/blog\/wp-content\/smush-webp\/2022\/06\/upload-a-zipped-file-1568x469.jpg.webp 1568w, https:\/\/www.dreamhost.com\/blog\/wp-content\/smush-webp\/2022\/06\/upload-a-zipped-file-877x263.jpg.webp 877w\" data-sizes=\"(max-width: 1600px) 100vw, 1600px\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" style=\"--smush-placeholder-width: 1600px; --smush-placeholder-aspect-ratio: 1600\/479;\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Upload the compressed file you just made and select <i>Install Now<\/i>. WordPress will then unpack and install the plugin on your site.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Once that&#8217;s complete, just click on <i>Activate Plugin<\/i>.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Your new plugin is now live!<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Step 6: Distribute Your Plugin (2 Options)<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Now, you can start distributing the plugin you\u2019ve created. Let\u2019s look at the best ways to do this.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">A. Publish Your Work To The WordPress Plugin Directory<\/h4>\n\n\n\n<p class=\"wp-block-paragraph\">By <a href=\"https:\/\/wordpress.org\/plugins\/developers\/add\/\" target=\"_blank\" rel=\"noopener noreferrer\">adding your plugin<\/a> to the WordPress plugin directory, you can share your work with the community and gain exposure. You can take advantage of the WordPress user base to attract new clients.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">However, you\u2019ll need to make sure that your plugin complies with best practices and the <a href=\"https:\/\/developer.wordpress.org\/plugins\/wordpress-org\/detailed-plugin-guidelines\/\" target=\"_blank\" rel=\"noopener noreferrer\">Detailed Plugin Guidelines<\/a> before uploading it for review. Keep in mind, it might take a while for your plugin to be reviewed and accepted.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Once your plugin is approved, you\u2019ll need to add your files to the <a href=\"https:\/\/developer.wordpress.org\/plugins\/wordpress-org\/how-to-use-subversion\/\" target=\"_blank\" rel=\"noopener noreferrer\">Subversion directory<\/a>.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">When this is all done, WordPress users will be able to install your plugin on their sites.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">B. Share The Plugin On Your Own Website<\/h4>\n\n\n\n<p class=\"wp-block-paragraph\">In addition to uploading your plugin to the WordPress directory, you could also create a website for it.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">You can use a site like this to market and provide more details about your plugin. You could also include documentation, tutorials, support options, links to other plugins you\u2019ve made, and so on.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Developers often use websites to promote their premium plugins while providing a free or \u201clite\u201d version in the WordPress directory. That way, users are able to easily find and download the product via WordPress before upgrading to a paid option.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">You can lock certain advanced features behind a paywall, which can all be explained on a plugin website. Additionally, you can offer a multi-tiered membership model that offers a variety of feature sets depending on a user\u2019s needs and budget.<\/p>\n\n\n\n<h2 id=\"ai\" class=\"wp-block-heading\">How To Build A WordPress Plugin With AI (Claude Code Walkthrough)<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Can AI write a WordPress plugin? Yes. For simple plugins, it can write the whole thing from a plain-English description. AI coding tools like Claude Code generate the plugin header, the hooks, and the PHP, then explain what each part does. Your job shifts from writing code to describing what you want, reviewing what comes back, and testing it before it touches a live site.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">One thing up front: AI writes the code, but <i>you<\/i> ship it. Everything you learned in the manual path \u2014 staging sites, testing, backups, coding standards \u2014 still applies. AI just compresses the typing.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Here\u2019s the workflow using <a href=\"https:\/\/claude.com\/product\/claude-code\" target=\"_blank\" rel=\"noopener noreferrer\">Claude Code<\/a>, Anthropic\u2019s \u201cagentic\u201d coding tool \u2014 meaning it doesn\u2019t just suggest code, it can create files, edit them, and run commands on its own (with your approval). Anthropic describes it as a tool to \u201cbuild, debug, and ship\u201d right from your terminal. Unlike a chatbot that hands you a snippet to paste somewhere, Claude Code works with real files: it creates the plugin folder, writes the PHP, and edits it in place as you refine your request.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Step 1: Install Claude Code<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Claude Code runs in your terminal \u2014 the text-based command app that ships with your computer (Terminal on macOS; on Windows you\u2019ll need WSL, the Windows Subsystem for Linux, which lets Windows run Linux tools). Desktop, web, and code-editor versions exist too, but we\u2019ll use the terminal here. The <a href=\"https:\/\/code.claude.com\/docs\/en\/quickstart\" target=\"_blank\" rel=\"noopener noreferrer\">official quickstart<\/a> recommends the native installer:<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: plain; title: ; notranslate\" title=\"\">\ncurl -fsSL https:\/\/claude.ai\/install.sh | bash\n\n<\/pre><\/div>\n\n\n<p class=\"wp-block-paragraph\">Homebrew (<code>brew install --cask claude-code<\/code>) and Windows WinGet (<code>winget install Anthropic.ClaudeCode<\/code>) also work. You\u2019ll need a Claude account \u2014 there\u2019s no free tier for Claude Code, so <a href=\"https:\/\/claude.com\/pricing\" target=\"_blank\" rel=\"noopener noreferrer\">check current plans<\/a> (a Claude Pro subscription is the usual entry point; developers can instead pay per use through Anthropic\u2019s API).<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Step 2: Point It At Your Plugin Folder<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Open your terminal, create a folder for your plugin (or navigate to <code>wp-content\/plugins<\/code> on your Local site from Step 2 of the manual path), and start Claude Code inside it:<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: plain; title: ; notranslate\" title=\"\">\nmkdir reading-time-plugin\ncd reading-time-plugin\nclaude\n\n<\/pre><\/div>\n\n\n<p class=\"wp-block-paragraph\">Everything Claude Code creates will land in this folder. If you created it inside wp-content\/plugins on your Local site, it\u2019s already where WordPress looks for plugins. If you created it anywhere else, no problem \u2014 you\u2019ll zip it and upload it in Step 5.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Step 3: Describe The Plugin You Want<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Now describe your plugin in plain English. The more specific your prompt, the better the result. A good first prompt names the feature, the WordPress mechanism if you know it, and your standards:<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: plain; title: ; notranslate\" title=\"\">\nCreate a WordPress plugin that displays an estimated reading time\nabove the content of every blog post. Use a filter on the_content,\ncalculate from the post word count at 200 words per minute, and let\nme change the label text from a simple settings page. Follow the\nWordPress Coding Standards, escape all output, and add a proper\nplugin header comment.\n\n<\/pre><\/div>\n\n\n<p class=\"wp-block-paragraph\">Claude Code will propose the files it plans to create \u2014 a main PHP file with the plugin header (the same one you wrote by hand in Step 3 above), the filter hook, and the settings page \u2014 and then write them. Notice that everything you learned in the manual path shows up here: the header comment, the hooks, the file structure. That\u2019s why learning the manual path first pays off \u2014 you can actually read what the AI built.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Step 4: Review, Ask Questions, Iterate<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Don\u2019t just accept the code. Read it. This is where AI tools double as tutors. Ask follow-ups right in the same session:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u201cExplain what the add_filter line does, like I\u2019m new to WordPress.\u201d<\/li>\n\n\n\n<li>\u201cWhy did you escape the output with esc_html? What happens if you don\u2019t?\u201d<\/li>\n\n\n\n<li>\u201cChange the default reading speed to 230 words per minute and hide the label on pages.\u201d<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Each request edits the actual files in your folder. This review loop is the actual job: you are responsible for every line this plugin ships with, and interrogating code you didn\u2019t write is the fastest way to level up your own skills.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Step 5: Test It Exactly Like Hand-Written Code<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">AI-generated code gets zero shortcuts on testing. Zip the folder (or copy it straight into your Local site\u2019s <code>wp-content\/plugins<\/code>), activate it on your staging site, and put it through the same paces as the manual path: activate, deactivate, try weird settings values, check the front end with a classic and a block theme. WordPress Playground is handy here too \u2014 drag your plugin zip into a throwaway browser WordPress and see it run in seconds.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">A few AI-specific rules to keep yourself out of trouble:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><b>You own every line.<\/b> The WordPress.org <a href=\"https:\/\/developer.wordpress.org\/plugins\/wordpress-org\/detailed-plugin-guidelines\/\" target=\"_blank\" rel=\"noopener noreferrer\">plugin guidelines<\/a> don\u2019t have a special rule for AI code \u2014 they hold <i>you<\/i> responsible for everything in your plugin, however it was written, and they require code to be human-readable (no obfuscation).<\/li>\n\n\n\n<li><b>Security review is still yours.<\/b> Confirm the plugin sanitizes input, escapes output, and uses nonces on any form it adds. Ask the AI to walk you through each of those \u2014 and verify against the <a href=\"https:\/\/developer.wordpress.org\/apis\/security\/\" target=\"_blank\" rel=\"noopener noreferrer\">WordPress developer documentation\u2019s security page<\/a>.<\/li>\n\n\n\n<li><b>Keep secrets out of prompts.<\/b> Never paste database credentials, API keys, or customer data into any AI tool.<\/li>\n\n\n\n<li><b>Staging first, always.<\/b> An AI-written bug takes your site down just as thoroughly as a hand-written one. Test on staging, back up before deploying live.<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">Other AI Tools That Can Help<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Claude Code isn\u2019t the only option, and the right tool depends on how you like to work:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><b>ChatGPT<\/b> (and the Claude chat app) work in a browser with no setup: describe your plugin, get code back, paste it into a PHP file yourself. Great for one-file plugins and quick questions; you do the file handling.<\/li>\n\n\n\n<li><b><a href=\"https:\/\/github.com\/features\/copilot\" target=\"_blank\" rel=\"noopener noreferrer\">GitHub Copilot<\/a><\/b> works alongside you directly in your editor, suggesting lines or entire functions as you type. It has a free tier, and it shines when you\u2019re writing the code yourself and want smart suggestions as you type.<\/li>\n\n\n\n<li><b><a href=\"https:\/\/cursor.com\" target=\"_blank\" rel=\"noopener noreferrer\">Cursor<\/a><\/b> is an AI coding agent built into its own editor \u2014 a middle ground if you want agentic file editing inside a visual IDE rather than a terminal.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Whichever you pick, the workflow is the same: describe, review, test on staging, ship. And when your plugin is ready to share, distribution works exactly as described in Step 6 of the manual path.<\/p>\n\n\n\n<h2 id=\"faqs\" class=\"wp-block-heading\">WordPress Plugin Development FAQs<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">Do I need to know PHP to create a WordPress plugin?<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">For a simple plugin, no \u2014 AI tools can generate working PHP from a plain-English description. But you\u2019ll need enough PHP to <i>read<\/i> the code you ship, because you\u2019re responsible for it. The basics (variables, functions, and WordPress hooks) go a long way.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Can AI really write a whole WordPress plugin?<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Yes, for well-defined plugins. Agentic tools like Claude Code can create the folder, the plugin header, hooks, and even a settings page from one prompt. Complex plugins still benefit from a developer\u2019s architecture decisions. Either way, human review and staging-site testing are non-negotiable.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Does WordPress.org allow AI-generated plugins in the directory?<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Yes \u2014 nothing in the <a href=\"https:\/\/developer.wordpress.org\/plugins\/wordpress-org\/detailed-plugin-guidelines\/\" target=\"_blank\" rel=\"noopener noreferrer\">Detailed Plugin Guidelines<\/a> prohibits AI-assisted code; the guidelines don\u2019t address AI-generated code directly (as of July 2026). They make you responsible for all code you submit and require it to be human-readable. Review every line as if you wrote it, because officially, you did.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">How much does it cost to develop a WordPress plugin?<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Potentially nothing but time. WordPress, its developer documentation, Local, and WordPress Playground are all free. Optional costs: an AI coding subscription, and web hosting with a staging site for realistic testing before you go live.<\/p>\n\n\n\n<h2 id=\"set\" class=\"wp-block-heading\">Set Yourself Up For Plugin Success With DreamHost<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">As an open-source platform, WordPress enables you to develop your own plugin and share it with other users. Whether you write every line yourself or draft it with an AI assistant, what actually protects you is the same habit: test on staging before anything touches your live site.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Once you\u2019ve gained enough experience, you may even want to start selling premium versions of your plugins for a rewarding and mostly passive income stream!<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">The one thing every path needs is a safe place to test. <a href=\"https:\/\/www.dreamhost.com\/wordpress\/managed\/\" target=\"_blank\" rel=\"noopener noreferrer\">DreamPress<\/a>, our managed WordPress hosting, includes one-click staging \u2014 so you can try new plugins, themes, and code safely before pushing changes live. And when your plugin is ready for the world, our <a href=\"https:\/\/www.dreamhost.com\/domains\/\" target=\"_blank\" rel=\"noopener noreferrer\">domain registration<\/a> and <a href=\"https:\/\/www.dreamhost.com\/remixer-website-builder\/\" target=\"_blank\" rel=\"noopener noreferrer\">Remixer, our AI website builder<\/a>, make it easy to spin up a marketing site for it.<\/p>\n\n\n\n\n\n<div\n\tclass=\"article-cta-shared article-cta-small\"\n>\n    <div class=\"tr-img-wrap-outer jsLoading\"><img decoding=\"async\" class=\"js-img-lazy \" src=\"https:\/\/www.dreamhost.com\/blog\/wp-content\/themes\/blog2018\/assets\/img\/lazy-loading-transparent.webp\" data-srcset=\"https:\/\/www.dreamhost.com\/blog\/wp-content\/themes\/blog2018\/assets\/img\/article-small-ad-cta-placeholder.webp 1x, https:\/\/www.dreamhost.com\/blog\/wp-content\/themes\/blog2018\/assets\/img\/article-small-ad-cta-placeholder-x2.webp 2x\" width=\"877\" height=\"539\"  alt=\"Ad background image\" \/><\/div>\n\n\n\n\n  <div class=\"content-btm\">\n    <h2\n      class=\"h2--md\"\n    >\n      Do More with DreamPress\n    <\/h2>\n    <p\n      class=\"p--md\"\n    >\n      DreamPress managed WordPress hosting includes one-click staging, so you can test your plugins safely before they touch your live site.\n    <\/p>\n\n            <a\n            href=\"https:\/\/www.dreamhost.com\/wordpress\/managed\/\"\n                        class=\"btn btn--white-outline btn--sm btn--round\"\n                                    aria-label=\"Check Out Plans: Do More with DreamPress\"\n                                    target=\"_blank\"\n            rel=\"noopener noreferrer\"\n            >\n                            Check Out Plans                    <\/a>\n\n  <\/div>\n<\/div>\n","protected":false},"excerpt":{"rendered":"<p>One of the main reasons that WordPress is so popular is its open-source nature. Because of that, there are more than 60,000 free plugins in the official directory alone \u2014 all built for the internet\u2019s favorite content management system (CMS). And you can join in on the fun by creating your own WordPress plugin. There [&hellip;]<\/p>\n","protected":false},"author":1062,"featured_media":43024,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"_yoast_wpseo_opengraph-title":"WordPress Plugin Development: Build Your First Plugin By Hand Or With AI","_yoast_wpseo_opengraph-description":"WordPress plugin development, two ways: the classic six-step manual build and an AI-assisted path with Claude Code. Ship your first plugin today.","_yoast_wpseo_twitter-title":"WordPress Plugin Development: Build Your First Plugin By Hand Or With AI","_yoast_wpseo_twitter-description":"WordPress plugin development, two ways: the classic six-step manual build and an AI-assisted path with Claude Code. Ship your first plugin today.","toc_headlines":"[[\"intro\", \"A Quick Intro To WordPress Plugins\"], [\"why\", \"Why Develop A WordPress Plugin?\"], [\"how\", \"How To Create A WordPress Plugin By Hand (6 Steps)\"], [\"ai\", \"How To Build A WordPress Plugin With AI (Claude Code Walkthrough)\"], [\"faqs\", \"WordPress Plugin Development FAQs\"], [\"set\", \"Set Yourself Up For Plugin Success With DreamHost\"]]","hide_toc":false,"show_updated_at":"1","footnotes":""},"categories":[13129,550,696],"tags":[],"class_list":["post-11300","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-developer-central","category-tutorials","category-wordpress"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v26.3 (Yoast SEO v28.1) - https:\/\/yoast.com\/product\/yoast-seo-premium-wordpress\/ -->\n<title>WordPress Plugin Development: Your First Plugin - DreamHost<\/title>\n<meta name=\"description\" content=\"WordPress plugin development, two ways: the classic six-step manual build and an AI-assisted path with Claude Code. Ship your first plugin today.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.dreamhost.com\/blog\/how-to-create-your-first-wordpress-plugin\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"WordPress Plugin Development: Build Your First Plugin By Hand Or With AI\" \/>\n<meta property=\"og:description\" content=\"WordPress plugin development, two ways: the classic six-step manual build and an AI-assisted path with Claude Code. Ship your first plugin today.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.dreamhost.com\/blog\/how-to-create-your-first-wordpress-plugin\/\" \/>\n<meta property=\"og:site_name\" content=\"DreamHost Blog\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/DreamHost\/\" \/>\n<meta property=\"article:published_time\" content=\"2024-02-05T15:00:46+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2026-07-07T23:13:52+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.dreamhost.com\/blog\/wp-content\/uploads\/2022\/06\/How-To-Create-A-WordPress-Plugin-OGIMAGE.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"1200\" \/>\n\t<meta property=\"og:image:height\" content=\"628\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"Jason Cosper\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:title\" content=\"WordPress Plugin Development: Build Your First Plugin By Hand Or With AI\" \/>\n<meta name=\"twitter:description\" content=\"WordPress plugin development, two ways: the classic six-step manual build and an AI-assisted path with Claude Code. Ship your first plugin today.\" \/>\n<meta name=\"twitter:creator\" content=\"@dreamhost\" \/>\n<meta name=\"twitter:site\" content=\"@dreamhost\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Jason Cosper\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"18 minutes\" \/>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"WordPress Plugin Development: Your First Plugin - DreamHost","description":"WordPress plugin development, two ways: the classic six-step manual build and an AI-assisted path with Claude Code. Ship your first plugin today.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.dreamhost.com\/blog\/how-to-create-your-first-wordpress-plugin\/","og_locale":"en_US","og_type":"article","og_title":"WordPress Plugin Development: Build Your First Plugin By Hand Or With AI","og_description":"WordPress plugin development, two ways: the classic six-step manual build and an AI-assisted path with Claude Code. Ship your first plugin today.","og_url":"https:\/\/www.dreamhost.com\/blog\/how-to-create-your-first-wordpress-plugin\/","og_site_name":"DreamHost Blog","article_publisher":"https:\/\/www.facebook.com\/DreamHost\/","article_published_time":"2024-02-05T15:00:46+00:00","article_modified_time":"2026-07-07T23:13:52+00:00","og_image":[{"width":1200,"height":628,"url":"https:\/\/www.dreamhost.com\/blog\/wp-content\/uploads\/2022\/06\/How-To-Create-A-WordPress-Plugin-OGIMAGE.jpg","type":"image\/jpeg"}],"author":"Jason Cosper","twitter_card":"summary_large_image","twitter_title":"WordPress Plugin Development: Build Your First Plugin By Hand Or With AI","twitter_description":"WordPress plugin development, two ways: the classic six-step manual build and an AI-assisted path with Claude Code. Ship your first plugin today.","twitter_creator":"@dreamhost","twitter_site":"@dreamhost","twitter_misc":{"Written by":"Jason Cosper","Est. reading time":"18 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.dreamhost.com\/blog\/how-to-create-your-first-wordpress-plugin\/#article","isPartOf":{"@id":"https:\/\/www.dreamhost.com\/blog\/how-to-create-your-first-wordpress-plugin\/"},"author":{"name":"Jason Cosper","@id":"https:\/\/www.dreamhost.com\/blog\/#\/schema\/person\/2273b8bf7336df78f6d99a89c17253c4"},"headline":"WordPress Plugin Development: Build Your First Plugin By Hand Or With AI","datePublished":"2024-02-05T15:00:46+00:00","dateModified":"2026-07-07T23:13:52+00:00","mainEntityOfPage":{"@id":"https:\/\/www.dreamhost.com\/blog\/how-to-create-your-first-wordpress-plugin\/"},"wordCount":3807,"publisher":{"@id":"https:\/\/www.dreamhost.com\/blog\/#organization"},"image":{"@id":"https:\/\/www.dreamhost.com\/blog\/how-to-create-your-first-wordpress-plugin\/#primaryimage"},"thumbnailUrl":"https:\/\/www.dreamhost.com\/blog\/wp-content\/uploads\/2022\/06\/How-To-Create-A-WordPress-Plugin-HERO.jpg","articleSection":["Developer Central","Tutorials","WordPress"],"inLanguage":"en-US"},{"@type":"WebPage","@id":"https:\/\/www.dreamhost.com\/blog\/how-to-create-your-first-wordpress-plugin\/","url":"https:\/\/www.dreamhost.com\/blog\/how-to-create-your-first-wordpress-plugin\/","name":"WordPress Plugin Development: Your First Plugin - DreamHost","isPartOf":{"@id":"https:\/\/www.dreamhost.com\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.dreamhost.com\/blog\/how-to-create-your-first-wordpress-plugin\/#primaryimage"},"image":{"@id":"https:\/\/www.dreamhost.com\/blog\/how-to-create-your-first-wordpress-plugin\/#primaryimage"},"thumbnailUrl":"https:\/\/www.dreamhost.com\/blog\/wp-content\/uploads\/2022\/06\/How-To-Create-A-WordPress-Plugin-HERO.jpg","datePublished":"2024-02-05T15:00:46+00:00","dateModified":"2026-07-07T23:13:52+00:00","description":"WordPress plugin development, two ways: the classic six-step manual build and an AI-assisted path with Claude Code. Ship your first plugin today.","breadcrumb":{"@id":"https:\/\/www.dreamhost.com\/blog\/how-to-create-your-first-wordpress-plugin\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.dreamhost.com\/blog\/how-to-create-your-first-wordpress-plugin\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.dreamhost.com\/blog\/how-to-create-your-first-wordpress-plugin\/#primaryimage","url":"https:\/\/www.dreamhost.com\/blog\/wp-content\/uploads\/2022\/06\/How-To-Create-A-WordPress-Plugin-HERO.jpg","contentUrl":"https:\/\/www.dreamhost.com\/blog\/wp-content\/uploads\/2022\/06\/How-To-Create-A-WordPress-Plugin-HERO.jpg","width":1460,"height":1095,"caption":"photograph from a wall camera POV of a man sitting at a desk with a laptop on the right, large desktop monitor on the left with lines of code"},{"@type":"BreadcrumbList","@id":"https:\/\/www.dreamhost.com\/blog\/how-to-create-your-first-wordpress-plugin\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.dreamhost.com\/blog\/"},{"@type":"ListItem","position":2,"name":"WordPress Plugin Development: Build Your First Plugin By Hand Or With AI"}]},{"@type":"WebSite","@id":"https:\/\/www.dreamhost.com\/blog\/#website","url":"https:\/\/www.dreamhost.com\/blog\/","name":"DreamHost Blog","description":"","publisher":{"@id":"https:\/\/www.dreamhost.com\/blog\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.dreamhost.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/www.dreamhost.com\/blog\/#organization","name":"DreamHost","url":"https:\/\/www.dreamhost.com\/blog\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.dreamhost.com\/blog\/#\/schema\/logo\/image\/","url":"https:\/\/dhblog.dream.press\/blog\/wp-content\/uploads\/2019\/01\/dh_logo-blue-2.png","contentUrl":"https:\/\/dhblog.dream.press\/blog\/wp-content\/uploads\/2019\/01\/dh_logo-blue-2.png","width":1200,"height":168,"caption":"DreamHost"},"image":{"@id":"https:\/\/www.dreamhost.com\/blog\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/DreamHost\/","https:\/\/x.com\/dreamhost","https:\/\/www.instagram.com\/dreamhost\/","https:\/\/www.linkedin.com\/company\/dreamhost\/","https:\/\/www.youtube.com\/user\/dreamhostusa"]},{"@type":"Person","@id":"https:\/\/www.dreamhost.com\/blog\/#\/schema\/person\/2273b8bf7336df78f6d99a89c17253c4","name":"Jason Cosper","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.dreamhost.com\/blog\/wp-content\/uploads\/2022\/02\/IMG_4807-scaled.jpeg","url":"https:\/\/www.dreamhost.com\/blog\/wp-content\/uploads\/2022\/02\/IMG_4807-scaled.jpeg","contentUrl":"https:\/\/www.dreamhost.com\/blog\/wp-content\/uploads\/2022\/02\/IMG_4807-scaled.jpeg","caption":"Jason Cosper"},"description":"Jason is DreamHost\u2019s WordPress Product Advocate, based out of Bakersfield, CA. He is currently working on making our DreamPress product even better. In his free time, he likes to curl up on the couch and watch scary movies with his wife Sarah and three very small dogs. Follow him on Twitter.","url":"https:\/\/www.dreamhost.com\/blog\/author\/jasoncosper\/"}]}},"lang":"en","translations":{"en":11300,"es":27030,"pt":51690,"pl":55015,"de":55031,"uk":55083,"ru":55101,"it":68178,"fr":69954,"nl":69983},"pll_sync_post":{},"_links":{"self":[{"href":"https:\/\/www.dreamhost.com\/blog\/wp-json\/wp\/v2\/posts\/11300","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.dreamhost.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.dreamhost.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.dreamhost.com\/blog\/wp-json\/wp\/v2\/users\/1062"}],"version-history":[{"count":0,"href":"https:\/\/www.dreamhost.com\/blog\/wp-json\/wp\/v2\/posts\/11300\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.dreamhost.com\/blog\/wp-json\/wp\/v2\/media\/43024"}],"wp:attachment":[{"href":"https:\/\/www.dreamhost.com\/blog\/wp-json\/wp\/v2\/media?parent=11300"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.dreamhost.com\/blog\/wp-json\/wp\/v2\/categories?post=11300"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.dreamhost.com\/blog\/wp-json\/wp\/v2\/tags?post=11300"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}