{"id":12762,"date":"2016-03-08T11:10:42","date_gmt":"2016-03-08T16:10:42","guid":{"rendered":"https:\/\/webdevstudios.com\/?p=12762"},"modified":"2024-04-15T12:02:50","modified_gmt":"2024-04-15T16:02:50","slug":"making-a-plugin-webdevstudios","status":"publish","type":"post","link":"https:\/\/webdevstudios.com\/2016\/03\/08\/making-a-plugin-webdevstudios\/","title":{"rendered":"Making a Plugin the WebDevStudios Way"},"content":{"rendered":"<p>We make a <em>lot<\/em> of plugins at WebDevStudios. Whether adding functionality to\u00a0client projects,\u00a0creating open source plugins to give back, or developing premium products, we are always spinning up new plugins. To speed up this process, we created <a href=\"https:\/\/github.com\/WebDevStudios\/generator-plugin-wp\">generator-plugin-wp<\/a>,\u00a0a <a href=\"http:\/\/yeoman.io\">Yeoman<\/a> generator which streamlines\u00a0all parts of the plugin development\u00a0process.<\/p>\n<p>I&#8217;ve talked about it previously\u00a0in my posts\u00a0<em><a href=\"https:\/\/webdevstudios.com\/2015\/05\/12\/get-a-plugin-yeoman\/\">Get a Plugin Kickstart with Yeoman &amp; generator-plugin-wp<\/a><\/em> and\u00a0<em><a href=\"https:\/\/webdevstudios.com\/2015\/10\/22\/recent-changes-generator-plugin-wp\/\">Recent Changes to generator-plugin-wp<\/a><\/em>. In this post, I&#8217;m going to walk through the actual process of\u00a0<em>creating<\/em> a plugin with this tool.<\/p>\n<p>Before you get started, you will want to install <a href=\"https:\/\/nodejs.org\/en\/\">Node<\/a>, and then use <a href=\"http:\/\/npmjs.com\">NPM<\/a> to install the generator and a few other CLI tools that are necessary for its full use.<\/p>\n<p><!--more--><\/p>\n<pre>npm install -g yo grunt-cli generator-plugin-wp<\/pre>\n<p>Now, from the plugin directory in your terminal, run:<\/p>\n<pre>yo plugin-wp<\/pre>\n<p>From here you can enter the title of your new plugin. I&#8217;m\u00a0going to make a plugin for tracking\u00a0and publicly listing my many missions in <a href=\"https:\/\/kerbalspaceprogram.com\/en\/\">Kerbal Space Program<\/a>:<\/p>\n<p><script id=\"asciicast-61s9ycmorsiuwelr4q2rvcbrw\" src=\"https:\/\/asciinema.org\/a\/61s9ycmorsiuwelr4q2rvcbrw.js\" async=\"\" type=\"text\/javascript\"><\/script><\/p>\n<p>This provides the basic\u00a0setup for my plugin, and now my plugin directory now looks like this:<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-12766\" src=\"https:\/\/webdevstudios.com\/wp-content\/uploads\/2016\/03\/Screenshot-2016-03-03-15.06.40.png\" alt=\"Screenshot 2016-03-03 15.06.40\" width=\"198\" height=\"306\" \/><\/p>\n<p>This is where things start to get cool. Without any changes, we have a unit tested plugin, with automatic internationalization\u00a0file generation, and a full\u00a0automated versioning and release system.<\/p>\n<p>Now that I have a plugin skeleton, the first thing I want to do is create a custom post type for missions, so I run:<\/p>\n<pre>yo plugin-wp:cpt mission<\/pre>\n<p><script id=\"asciicast-2v8iadumrn1wyz200n4ufi84m\" src=\"https:\/\/asciinema.org\/a\/2v8iadumrn1wyz200n4ufi84m.js\" async=\"\" type=\"text\/javascript\"><\/script><\/p>\n<p>Now we have a class-mission.php file in our includes folder; this file is automatically included in our main ksp-mission-tracker.php file, and if we activate our plugin, we can see the new\u00a0CPT is registered.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-12767\" src=\"https:\/\/webdevstudios.com\/wp-content\/uploads\/2016\/03\/Screenshot-2016-03-03-15.39.01.png\" alt=\"Screenshot 2016-03-03 15.39.01\" width=\"629\" height=\"373\" \/><\/p>\n<p>With a bit of\u00a0coding using the awesome <a href=\"https:\/\/github.com\/WebDevStudios\/CMB2\">CMB2<\/a>\u00a0(which is included automatically with the\u00a0CPT generation), we have a fully functional edit\u00a0page with custom fields:<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-12768\" src=\"https:\/\/webdevstudios.com\/wp-content\/uploads\/2016\/03\/Screenshot-2016-03-03-15.50.28.png\" alt=\"Screenshot 2016-03-03 15.50.28\" width=\"463\" height=\"523\" \/><\/p>\n<p>Next, we&#8217;ll build the output. First, I use the plugin generator again to create a new skeleton include file:<\/p>\n<p><script id=\"asciicast-1wy0rf3ziea4dd6tc3xxt9u2h\" src=\"https:\/\/asciinema.org\/a\/1wy0rf3ziea4dd6tc3xxt9u2h.js\" async=\"\" type=\"text\/javascript\"><\/script><\/p>\n<p>Then, I modify that file to hook into the_content and output the custom fields we added:<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-12769\" src=\"https:\/\/webdevstudios.com\/wp-content\/uploads\/2016\/03\/Screen-Shot-2016-03-03-at-4.08.05-PM.png\" alt=\"Screen Shot 2016-03-03 at 4.08.05 PM\" width=\"501\" height=\"455\" \/><\/p>\n<p>And there we have it&#8211;the most basic version of our new plugin is working! We have a custom post type with a few meta fields and output. Let&#8217;s make our first release!<\/p>\n<p><script id=\"asciicast-1jy4evh1rh0py6eseewbfxlj6\" src=\"https:\/\/asciinema.org\/a\/1jy4evh1rh0py6eseewbfxlj6.js\" async=\"\" type=\"text\/javascript\"><\/script><\/p>\n<p>A\u00a0lot of stuff just happened there&#8211;first, I initialized git and did my first commit (with a bad commit message&#8211;sorry!), then I ran:<\/p>\n<pre>npm version minor<\/pre>\n<p>&#8230;which increments the version of my plugin from 0.0.0 to 0.1.0, the first digit being a major release and the third a patch release based on <a href=\"http:\/\/semver.org\">semver<\/a>. As part of this incrementing, the version our tests are run using <a href=\"https:\/\/github.com\/dockunit\/dockunit\/\">Dockunit<\/a> on three\u00a0versions of WordPress and PHP. If these tests all pass, then Grunt is run updating the version numbers in our files to reflect the new version, including updating any <a href=\"https:\/\/phpdoc.org\">PHPDoc<\/a> @since NEXT statements to be @since 0.1.0. Then NPM creates its own git commit and tag to reflect the new version and exits.<\/p>\n<p>Once the version was\u00a0incremented, I ran the command:<\/p>\n<pre>grunt release<\/pre>\n<p>&#8230;which bundles all the files in my plugin into a versioned directory under release\/0.1.0 without any of the extra\u00a0files needed for development. So now, my plugin is nice and clean for pushing up the WordPress.org plugin repo!<\/p>\n<p>If you want to take a look at the resulting plugin,\u00a0<a href=\"https:\/\/github.com\/CamdenSegal\/ksp-mission-tracker\">check it out on GitHub here<\/a>.\u00a0There are a ton of features beyond what you see in this post&#8211;please feel free to try it out and tell me what you think!<\/p>\n","protected":false},"excerpt":{"rendered":"<p>We make a lot of plugins at WebDevStudios. Whether adding functionality to\u00a0client projects,\u00a0creating open source plugins to give back, or developing premium products, we are always spinning up new plugins. To speed up this process, we created generator-plugin-wp,\u00a0a Yeoman generator which streamlines\u00a0all parts of the plugin development\u00a0process. I&#8217;ve talked about it previously\u00a0in my posts\u00a0Get a <a class=\"more-link\" href=\"https:\/\/webdevstudios.com\/2016\/03\/08\/making-a-plugin-webdevstudios\/\">Read More<span class=\"screen-reader-text\"> Making a Plugin the WebDevStudios Way<\/span><\/a><\/p>\n","protected":false},"author":46,"featured_media":12770,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"jetpack_post_was_ever_published":false,"footnotes":""},"categories":[449,259],"tags":[154,359,7,232,189,235,477],"coauthors":[13429],"class_list":["post-12762","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-cmb2","category-plugins","tag-development-2","tag-how-to","tag-plugin-development","tag-plugins","tag-tutorial","tag-tutorials","tag-wordpress-how-to"],"acf":{"blog_hero_image":null},"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v27.5 (Yoast SEO v27.5) - https:\/\/yoast.com\/product\/yoast-seo-premium-wordpress\/ -->\n<title>Making a Plugin the WebDevStudios Way<\/title>\n<meta name=\"description\" content=\"Camden covers the WebDevStudios way of making a plugin!\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/webdevstudios.com\/2016\/03\/08\/making-a-plugin-webdevstudios\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Making a Plugin the WebDevStudios Way\" \/>\n<meta property=\"og:description\" content=\"Camden covers the WebDevStudios way of making a plugin!\" \/>\n<meta property=\"og:url\" content=\"https:\/\/webdevstudios.com\/2016\/03\/08\/making-a-plugin-webdevstudios\/\" \/>\n<meta property=\"og:site_name\" content=\"WebDevStudios\" \/>\n<meta property=\"article:publisher\" content=\"http:\/\/facebook.com\/webdevstudios\" \/>\n<meta property=\"article:published_time\" content=\"2016-03-08T16:10:42+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2024-04-15T16:02:50+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/webdevstudios.com\/wp-content\/uploads\/2016\/03\/making-a-plugin-the-webdevstudios-way.png\" \/>\n\t<meta property=\"og:image:width\" content=\"851\" \/>\n\t<meta property=\"og:image:height\" content=\"315\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"Camden Segal\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@webdevstudios\" \/>\n<meta name=\"twitter:site\" content=\"@webdevstudios\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Camden Segal\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"3 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/webdevstudios.com\\\/2016\\\/03\\\/08\\\/making-a-plugin-webdevstudios\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/webdevstudios.com\\\/2016\\\/03\\\/08\\\/making-a-plugin-webdevstudios\\\/\"},\"author\":{\"name\":\"Camden Segal\",\"@id\":\"https:\\\/\\\/webdevstudios.com\\\/#\\\/schema\\\/person\\\/82ed512295976e49907010f3490989c2\"},\"headline\":\"Making a Plugin the WebDevStudios Way\",\"datePublished\":\"2016-03-08T16:10:42+00:00\",\"dateModified\":\"2024-04-15T16:02:50+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/webdevstudios.com\\\/2016\\\/03\\\/08\\\/making-a-plugin-webdevstudios\\\/\"},\"wordCount\":579,\"commentCount\":1,\"publisher\":{\"@id\":\"https:\\\/\\\/webdevstudios.com\\\/#organization\"},\"image\":{\"@id\":\"https:\\\/\\\/webdevstudios.com\\\/2016\\\/03\\\/08\\\/making-a-plugin-webdevstudios\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/webdevstudios.com\\\/wp-content\\\/uploads\\\/2016\\\/03\\\/making-a-plugin-the-webdevstudios-way.png\",\"keywords\":[\"development\",\"How To\",\"plugin development\",\"Plugins\",\"tutorial\",\"Tutorials\",\"WordPress how-to\"],\"articleSection\":[\"CMB2\",\"Plugins\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/webdevstudios.com\\\/2016\\\/03\\\/08\\\/making-a-plugin-webdevstudios\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/webdevstudios.com\\\/2016\\\/03\\\/08\\\/making-a-plugin-webdevstudios\\\/\",\"url\":\"https:\\\/\\\/webdevstudios.com\\\/2016\\\/03\\\/08\\\/making-a-plugin-webdevstudios\\\/\",\"name\":\"Making a Plugin the WebDevStudios Way\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/webdevstudios.com\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/webdevstudios.com\\\/2016\\\/03\\\/08\\\/making-a-plugin-webdevstudios\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/webdevstudios.com\\\/2016\\\/03\\\/08\\\/making-a-plugin-webdevstudios\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/webdevstudios.com\\\/wp-content\\\/uploads\\\/2016\\\/03\\\/making-a-plugin-the-webdevstudios-way.png\",\"datePublished\":\"2016-03-08T16:10:42+00:00\",\"dateModified\":\"2024-04-15T16:02:50+00:00\",\"description\":\"Camden covers the WebDevStudios way of making a plugin!\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/webdevstudios.com\\\/2016\\\/03\\\/08\\\/making-a-plugin-webdevstudios\\\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/webdevstudios.com\\\/2016\\\/03\\\/08\\\/making-a-plugin-webdevstudios\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/webdevstudios.com\\\/2016\\\/03\\\/08\\\/making-a-plugin-webdevstudios\\\/#primaryimage\",\"url\":\"https:\\\/\\\/webdevstudios.com\\\/wp-content\\\/uploads\\\/2016\\\/03\\\/making-a-plugin-the-webdevstudios-way.png\",\"contentUrl\":\"https:\\\/\\\/webdevstudios.com\\\/wp-content\\\/uploads\\\/2016\\\/03\\\/making-a-plugin-the-webdevstudios-way.png\",\"width\":851,\"height\":315},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/webdevstudios.com\\\/2016\\\/03\\\/08\\\/making-a-plugin-webdevstudios\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/webdevstudios.com\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Making a Plugin the WebDevStudios Way\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/webdevstudios.com\\\/#website\",\"url\":\"https:\\\/\\\/webdevstudios.com\\\/\",\"name\":\"WebDevStudios\",\"description\":\"WordPress Design and Development Agency\",\"publisher\":{\"@id\":\"https:\\\/\\\/webdevstudios.com\\\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/webdevstudios.com\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/webdevstudios.com\\\/#organization\",\"name\":\"WebDevStudios\",\"url\":\"https:\\\/\\\/webdevstudios.com\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/webdevstudios.com\\\/#\\\/schema\\\/logo\\\/image\\\/\",\"url\":\"https:\\\/\\\/webdevstudios.com\\\/wp-content\\\/uploads\\\/2019\\\/07\\\/wds-amp-logo.png\",\"contentUrl\":\"https:\\\/\\\/webdevstudios.com\\\/wp-content\\\/uploads\\\/2019\\\/07\\\/wds-amp-logo.png\",\"width\":173,\"height\":60,\"caption\":\"WebDevStudios\"},\"image\":{\"@id\":\"https:\\\/\\\/webdevstudios.com\\\/#\\\/schema\\\/logo\\\/image\\\/\"},\"sameAs\":[\"http:\\\/\\\/facebook.com\\\/webdevstudios\",\"https:\\\/\\\/x.com\\\/webdevstudios\",\"http:\\\/\\\/instagram.com\\\/webdevstudios\",\"https:\\\/\\\/www.linkedin.com\\\/company\\\/webdevstudios-llc-\\\/\"]},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/webdevstudios.com\\\/#\\\/schema\\\/person\\\/82ed512295976e49907010f3490989c2\",\"name\":\"Camden Segal\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/b061c568ad94847a4b510bf61fea026ebfa04e4da98f5e3229f11fd2c53b48e7?s=96&d=mm&r=g4d2650ff7fd93cb54809dd154b7add1c\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/b061c568ad94847a4b510bf61fea026ebfa04e4da98f5e3229f11fd2c53b48e7?s=96&d=mm&r=g\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/b061c568ad94847a4b510bf61fea026ebfa04e4da98f5e3229f11fd2c53b48e7?s=96&d=mm&r=g\",\"caption\":\"Camden Segal\"},\"url\":\"https:\\\/\\\/webdevstudios.com\\\/author\\\/camden\\\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Making a Plugin the WebDevStudios Way","description":"Camden covers the WebDevStudios way of making a plugin!","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:\/\/webdevstudios.com\/2016\/03\/08\/making-a-plugin-webdevstudios\/","og_locale":"en_US","og_type":"article","og_title":"Making a Plugin the WebDevStudios Way","og_description":"Camden covers the WebDevStudios way of making a plugin!","og_url":"https:\/\/webdevstudios.com\/2016\/03\/08\/making-a-plugin-webdevstudios\/","og_site_name":"WebDevStudios","article_publisher":"http:\/\/facebook.com\/webdevstudios","article_published_time":"2016-03-08T16:10:42+00:00","article_modified_time":"2024-04-15T16:02:50+00:00","og_image":[{"width":851,"height":315,"url":"https:\/\/webdevstudios.com\/wp-content\/uploads\/2016\/03\/making-a-plugin-the-webdevstudios-way.png","type":"image\/png"}],"author":"Camden Segal","twitter_card":"summary_large_image","twitter_creator":"@webdevstudios","twitter_site":"@webdevstudios","twitter_misc":{"Written by":"Camden Segal","Est. reading time":"3 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/webdevstudios.com\/2016\/03\/08\/making-a-plugin-webdevstudios\/#article","isPartOf":{"@id":"https:\/\/webdevstudios.com\/2016\/03\/08\/making-a-plugin-webdevstudios\/"},"author":{"name":"Camden Segal","@id":"https:\/\/webdevstudios.com\/#\/schema\/person\/82ed512295976e49907010f3490989c2"},"headline":"Making a Plugin the WebDevStudios Way","datePublished":"2016-03-08T16:10:42+00:00","dateModified":"2024-04-15T16:02:50+00:00","mainEntityOfPage":{"@id":"https:\/\/webdevstudios.com\/2016\/03\/08\/making-a-plugin-webdevstudios\/"},"wordCount":579,"commentCount":1,"publisher":{"@id":"https:\/\/webdevstudios.com\/#organization"},"image":{"@id":"https:\/\/webdevstudios.com\/2016\/03\/08\/making-a-plugin-webdevstudios\/#primaryimage"},"thumbnailUrl":"https:\/\/webdevstudios.com\/wp-content\/uploads\/2016\/03\/making-a-plugin-the-webdevstudios-way.png","keywords":["development","How To","plugin development","Plugins","tutorial","Tutorials","WordPress how-to"],"articleSection":["CMB2","Plugins"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/webdevstudios.com\/2016\/03\/08\/making-a-plugin-webdevstudios\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/webdevstudios.com\/2016\/03\/08\/making-a-plugin-webdevstudios\/","url":"https:\/\/webdevstudios.com\/2016\/03\/08\/making-a-plugin-webdevstudios\/","name":"Making a Plugin the WebDevStudios Way","isPartOf":{"@id":"https:\/\/webdevstudios.com\/#website"},"primaryImageOfPage":{"@id":"https:\/\/webdevstudios.com\/2016\/03\/08\/making-a-plugin-webdevstudios\/#primaryimage"},"image":{"@id":"https:\/\/webdevstudios.com\/2016\/03\/08\/making-a-plugin-webdevstudios\/#primaryimage"},"thumbnailUrl":"https:\/\/webdevstudios.com\/wp-content\/uploads\/2016\/03\/making-a-plugin-the-webdevstudios-way.png","datePublished":"2016-03-08T16:10:42+00:00","dateModified":"2024-04-15T16:02:50+00:00","description":"Camden covers the WebDevStudios way of making a plugin!","breadcrumb":{"@id":"https:\/\/webdevstudios.com\/2016\/03\/08\/making-a-plugin-webdevstudios\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/webdevstudios.com\/2016\/03\/08\/making-a-plugin-webdevstudios\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/webdevstudios.com\/2016\/03\/08\/making-a-plugin-webdevstudios\/#primaryimage","url":"https:\/\/webdevstudios.com\/wp-content\/uploads\/2016\/03\/making-a-plugin-the-webdevstudios-way.png","contentUrl":"https:\/\/webdevstudios.com\/wp-content\/uploads\/2016\/03\/making-a-plugin-the-webdevstudios-way.png","width":851,"height":315},{"@type":"BreadcrumbList","@id":"https:\/\/webdevstudios.com\/2016\/03\/08\/making-a-plugin-webdevstudios\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/webdevstudios.com\/"},{"@type":"ListItem","position":2,"name":"Making a Plugin the WebDevStudios Way"}]},{"@type":"WebSite","@id":"https:\/\/webdevstudios.com\/#website","url":"https:\/\/webdevstudios.com\/","name":"WebDevStudios","description":"WordPress Design and Development Agency","publisher":{"@id":"https:\/\/webdevstudios.com\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/webdevstudios.com\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/webdevstudios.com\/#organization","name":"WebDevStudios","url":"https:\/\/webdevstudios.com\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/webdevstudios.com\/#\/schema\/logo\/image\/","url":"https:\/\/webdevstudios.com\/wp-content\/uploads\/2019\/07\/wds-amp-logo.png","contentUrl":"https:\/\/webdevstudios.com\/wp-content\/uploads\/2019\/07\/wds-amp-logo.png","width":173,"height":60,"caption":"WebDevStudios"},"image":{"@id":"https:\/\/webdevstudios.com\/#\/schema\/logo\/image\/"},"sameAs":["http:\/\/facebook.com\/webdevstudios","https:\/\/x.com\/webdevstudios","http:\/\/instagram.com\/webdevstudios","https:\/\/www.linkedin.com\/company\/webdevstudios-llc-\/"]},{"@type":"Person","@id":"https:\/\/webdevstudios.com\/#\/schema\/person\/82ed512295976e49907010f3490989c2","name":"Camden Segal","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/secure.gravatar.com\/avatar\/b061c568ad94847a4b510bf61fea026ebfa04e4da98f5e3229f11fd2c53b48e7?s=96&d=mm&r=g4d2650ff7fd93cb54809dd154b7add1c","url":"https:\/\/secure.gravatar.com\/avatar\/b061c568ad94847a4b510bf61fea026ebfa04e4da98f5e3229f11fd2c53b48e7?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/b061c568ad94847a4b510bf61fea026ebfa04e4da98f5e3229f11fd2c53b48e7?s=96&d=mm&r=g","caption":"Camden Segal"},"url":"https:\/\/webdevstudios.com\/author\/camden\/"}]}},"jetpack_featured_media_url":"https:\/\/webdevstudios.com\/wp-content\/uploads\/2016\/03\/making-a-plugin-the-webdevstudios-way.png","jetpack_sharing_enabled":true,"jetpack_shortlink":"https:\/\/wp.me\/p3WX6u-3jQ","amp_enabled":true,"_links":{"self":[{"href":"https:\/\/webdevstudios.com\/wp-json\/wp\/v2\/posts\/12762","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/webdevstudios.com\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/webdevstudios.com\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/webdevstudios.com\/wp-json\/wp\/v2\/users\/46"}],"replies":[{"embeddable":true,"href":"https:\/\/webdevstudios.com\/wp-json\/wp\/v2\/comments?post=12762"}],"version-history":[{"count":0,"href":"https:\/\/webdevstudios.com\/wp-json\/wp\/v2\/posts\/12762\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/webdevstudios.com\/wp-json\/wp\/v2\/media\/12770"}],"wp:attachment":[{"href":"https:\/\/webdevstudios.com\/wp-json\/wp\/v2\/media?parent=12762"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/webdevstudios.com\/wp-json\/wp\/v2\/categories?post=12762"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/webdevstudios.com\/wp-json\/wp\/v2\/tags?post=12762"},{"taxonomy":"author","embeddable":true,"href":"https:\/\/webdevstudios.com\/wp-json\/wp\/v2\/coauthors?post=12762"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}