<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: rmeow</title>
    <description>The latest articles on DEV Community by rmeow (@rmeow).</description>
    <link>https://dev.to/rmeow</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3865467%2Fde5d3a5e-c02b-44f1-92d7-1b0bda6633ba.jpg</url>
      <title>DEV Community: rmeow</title>
      <link>https://dev.to/rmeow</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/rmeow"/>
    <language>en</language>
    <item>
      <title>My First WordPress Plugin: What I Learned Along the Way</title>
      <dc:creator>rmeow</dc:creator>
      <pubDate>Tue, 07 Apr 2026 14:35:28 +0000</pubDate>
      <link>https://dev.to/rmeow/my-first-wordpress-plugin-what-i-learned-along-the-way-26ba</link>
      <guid>https://dev.to/rmeow/my-first-wordpress-plugin-what-i-learned-along-the-way-26ba</guid>
      <description>&lt;p&gt;Hi there! 👋&lt;/p&gt;

&lt;p&gt;I'm not a WordPress expert. Actually, I'm pretty new to plugin development. But recently I decided to build my first plugin and submit it to WordPress.org — and wow, I learned a lot more than I expected.&lt;/p&gt;

&lt;p&gt;Here's what the process taught me. Hopefully it helps someone else starting out.&lt;/p&gt;




&lt;h2&gt;
  
  
  How It Started
&lt;/h2&gt;

&lt;p&gt;I run a small website called &lt;a href="https://www.calholidays.com" rel="noopener noreferrer"&gt;CalHolidays&lt;/a&gt; — basically a free holiday calendar with countdown widgets for days until Easter, Mother's Day, Father's Day, and so on.&lt;/p&gt;

&lt;p&gt;People kept asking me: "Can I add these countdowns to my own website?"&lt;/p&gt;

&lt;p&gt;Technically, yes — I had iframe embed codes. But for WordPress users, that's not ideal. They wanted something simpler. Something they could just drag into their sidebar, configure in two clicks, and forget about.&lt;/p&gt;

&lt;p&gt;So I thought: why not make a WordPress plugin?&lt;/p&gt;




&lt;h2&gt;
  
  
  What I Built (Spoiler: It's Simple)
&lt;/h2&gt;

&lt;p&gt;The plugin is straightforward:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Adds a &lt;strong&gt;Holiday Countdown Widget&lt;/strong&gt; to WordPress&lt;/li&gt;
&lt;li&gt;Users select a holiday (Easter, Mother's Day, Father's Day)&lt;/li&gt;
&lt;li&gt;Widget shows "X days until [holiday]"&lt;/li&gt;
&lt;li&gt;Auto-updates every year — no maintenance needed&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;It's not revolutionary. But it solves a real problem for my users.&lt;/p&gt;




&lt;h2&gt;
  
  
  The Development Process
&lt;/h2&gt;

&lt;p&gt;Here's roughly what I did, and what I wish I knew earlier.&lt;/p&gt;

&lt;h3&gt;
  
  
  1. Plugin Structure Is Simpler Than I Thought
&lt;/h3&gt;

&lt;p&gt;I expected WordPress plugins to be complex. But the minimum structure is surprisingly minimal:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;holiday-countdown-widget/
├── holiday-countdown-widget.php    (main file)
├── readme.txt                       (for WordPress.org)
├── LICENSE                          (GPL v2 required)
├── css/
│   └── styles.css
└── assets/
    ├── icon-256x256.png
    └── screenshots...
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The main PHP file handles:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Widget registration (using &lt;code&gt;WP_Widget&lt;/code&gt; class)&lt;/li&gt;
&lt;li&gt;Shortcode registration (&lt;code&gt;[holiday_countdown]&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;Enqueueing CSS&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  2. WordPress.org Submission Has Rules
&lt;/h3&gt;

&lt;p&gt;This is where I got surprised — twice.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;First rejection:&lt;/strong&gt; My &lt;code&gt;readme.txt&lt;/code&gt; said "Tested up to: 6.5" but WordPress wanted 6.9 (current version).&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Second rejection:&lt;/strong&gt; I updated &lt;code&gt;readme.txt&lt;/code&gt; to 6.9, but forgot to update the same value in my PHP file header. They must match.&lt;/p&gt;

&lt;p&gt;Lesson: &lt;strong&gt;Keep readme.txt and PHP header synchronized.&lt;/strong&gt; WordPress checks both.&lt;/p&gt;

&lt;h3&gt;
  
  
  3. Plugin Check Plugin (Yes, That's Its Name)
&lt;/h3&gt;

&lt;p&gt;There's a plugin called &lt;a href="https://wordpress.org/plugins/plugin-check/" rel="noopener noreferrer"&gt;Plugin Check&lt;/a&gt; that scans your plugin before submission.&lt;/p&gt;

&lt;p&gt;Run it locally. It catches issues like:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Missing LICENSE file&lt;/li&gt;
&lt;li&gt;Incorrect headers&lt;/li&gt;
&lt;li&gt;Code quality problems&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I didn't use it initially. Now I wish I did.&lt;/p&gt;

&lt;h3&gt;
  
  
  4. Screenshots and Icons Matter
&lt;/h3&gt;

&lt;p&gt;WordPress.org requires:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Plugin icon (256x256 PNG)&lt;/li&gt;
&lt;li&gt;Screenshots showing your plugin working&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I created these using SVG → PNG conversion. Not fancy, but they show the plugin is real and functional.&lt;/p&gt;




&lt;h2&gt;
  
  
  What I Learned
&lt;/h2&gt;

&lt;p&gt;Here's my takeaway list for anyone building their first plugin:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Before you start:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;✅ Read the &lt;a href="https://developer.wordpress.org/plugins/" rel="noopener noreferrer"&gt;Plugin Developer Guidelines&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;✅ Study an existing simple plugin's structure&lt;/li&gt;
&lt;li&gt;✅ Set up a local WordPress test environment&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;During development:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;✅ Keep your plugin simple — don't over-engineer&lt;/li&gt;
&lt;li&gt;✅ Use WordPress APIs (Widget API, Shortcode API) instead of reinventing&lt;/li&gt;
&lt;li&gt;✅ Test with &lt;code&gt;WP_DEBUG&lt;/code&gt; enabled&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Before submission:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;✅ Run Plugin Check plugin&lt;/li&gt;
&lt;li&gt;✅ Make sure readme.txt and PHP headers match&lt;/li&gt;
&lt;li&gt;✅ Include GPL v2 LICENSE file&lt;/li&gt;
&lt;li&gt;✅ Add proper screenshots and icon&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;After submission:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;✅ Be patient — review takes 1-7 days&lt;/li&gt;
&lt;li&gt;✅ If rejected, read the feedback carefully and fix exactly what they ask&lt;/li&gt;
&lt;li&gt;✅ The review team is helpful, not scary&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Where Things Stand Now
&lt;/h2&gt;

&lt;p&gt;My plugin is currently awaiting review. 🤞&lt;/p&gt;

&lt;p&gt;If approved, it'll be available at &lt;code&gt;wordpress.org/plugins/holiday-countdown-widget&lt;/code&gt; — and CalHolidays users will have an easier way to embed countdowns.&lt;/p&gt;

&lt;p&gt;For me, this was a learning experience more than anything. I'm not claiming to be an expert now — but I understand WordPress plugins a lot better than before.&lt;/p&gt;




&lt;h2&gt;
  
  
  Final Thoughts
&lt;/h2&gt;

&lt;p&gt;If you're thinking about building a WordPress plugin:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Just start.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Pick a simple problem. Build a simple solution. Submit it. Learn from the feedback.&lt;/p&gt;

&lt;p&gt;You don't need to be a senior developer. You just need patience and willingness to read documentation.&lt;/p&gt;

&lt;p&gt;Feel free to ask questions in the comments. I'm still learning, but happy to share what I've picked up along the way.&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;Resources I found helpful:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://developer.wordpress.org/plugins/" rel="noopener noreferrer"&gt;WordPress Plugin Developer Handbook&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://wordpress.org/plugins/plugin-check/" rel="noopener noreferrer"&gt;Plugin Check Plugin&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://wordpress.org/plugins/about/readme-txt-validator/" rel="noopener noreferrer"&gt;readme.txt Validator&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://www.calholidays.com/widgets" rel="noopener noreferrer"&gt;CalHolidays Countdown Widgets&lt;/a&gt; — what inspired this project&lt;/li&gt;
&lt;/ul&gt;




&lt;p&gt;Thanks for reading! If this helped you, drop a comment or follow me here. I'll update when the plugin gets approved (or if I learn something new from the review process).&lt;/p&gt;

</description>
      <category>beginners</category>
      <category>wordpress</category>
      <category>plugin</category>
      <category>webdev</category>
    </item>
  </channel>
</rss>
