Skip to main content
Photo of DeepakNess DeepakNess

Creating My First WordPress Plugin

I created my very first WordPress plugin called Bulk Classic to Block, and now it's live on the WordPress.org repository. It was a fun process, but definitely wasn't straightforward as it took me almost a month to get the v1.0.0 live.

But I'm ready to explain the entire thing in detail in this blog post, so let's directly get to it.

1. The idea for the plugin

I had a really old WordPress website which was untouched for years and was still using the Classic Editor, and since there were 100s of pages on the site, it wasn't manually possible to convert each page to Blocks. So... I then got this idea of creating such a WordPress plugin which does this in bulk.

Initially, I didn't know if such a thing will even work or not, but I researched a bit and then started working on the plugin. I used Cursor AI and Google's Antigravity for developing this.

2. Initial submission to WordPress.org

I, first, submitted the plugin to WordPress.org on November 29, 2025 and received the following email immediately after that.

Initial submission of the WordPress plugin

And then I heard nothing from them for a few days.

3. Plugin checked by a volunteer

13 days later, on December 8, 2025, I received the below email saying that a volunteer has checked my plugin and has identified some issues that need to be corrected and that I needed to resubmit the updated version.

WordPress plugin checked by a volunteer

Mainly, the issues were related to the following 2 things (along with the solutions suggested):

4. Updated and re-submitted the plugin

I then updated the plugin as per the detailed suggestions from the volunteer and then re-submitted it for the approval on the same day. And also sent them this email as it was suggested in the previous email.

Updated the WordPress plugin and sent this confirmation email

And then I waited and was expecting of some more issues flagged from the volunteer.

5. The plugin gets approved

To my surprise, today I received this email from WordPress saying that the plugin is now approved. I was happy that now it should be live, but then visiting this URL https://wordpress.org/plugins/bulk-classic-to-block/ showed nothing.

Bulk Classic to Block plugin gets approved on WordPress.org

So... I went through the email again, this time reading every line, to discover that now I have to upload the approved code to WordPress Plugin Directory via SVN. This information was sent in another email that you see below.

Uploading plugin to WordPress Plugin Directory via SVN

I started learning about using SVN for WordPress and then got some understanding that it's version control system, much like Git. Also learned that it can be used via CLI as well as via some GUI clients like TortoiseSVN and SmartSVN, again, much like Git.

6. Uploading the plugin

I decided to use the CLI for using svn (Subversion) because what's even the fun in using this via the GUI. At first, I had to install this on my computer, and I am using macOS so decided to install svn via Homebrew by running the following command:

brew install subversion

The idea here was to pull the public WordPress.org repo of my plugin in a folder locally, copy the plugin files in the specified folders, and then push everything live. The code files (images) went in the trunk folder and then screenshots and icons went in the assets folder. Below are the svn commands I had to execute:

# Executed at first
svn checkout https://plugins.svn.wordpress.org/bulk-classic-to-block

cd bulk-classic-to-block

# After copying files to `trunk` and `assets` folders as specified above
svn status

svn add trunk/* assets/* --force

svn commit -m "Initial commit of plugin files"

svn copy trunk tags/1.0.0

svn commit -m "Tag version 1.0.0"

If you'd like, here's the entire text copied from my terminal.

deepak@m2air wordpress-org % svn checkout https://plugins.svn.wordpress.org/bulk-classic-to-block
A    bulk-classic-to-block/assets
A    bulk-classic-to-block/tags
A    bulk-classic-to-block/trunk
Checked out revision 3424796.
deepak@m2air wordpress-org % cd bulk-classic-to-block 
deepak@m2air bulk-classic-to-block % ls
assets	tags	trunk
deepak@m2air bulk-classic-to-block % svn status
?       assets/screenshot-1.png
?       assets/screenshot-2.png
?       assets/screenshot-3.png
?       trunk/LICENSE.txt
?       trunk/README.txt
?       trunk/bulk-classic-to-block.php
?       trunk/index.php
?       trunk/js
deepak@m2air bulk-classic-to-block % svn add trunk/* assets/* --force
A         trunk/bulk-classic-to-block.php
A         trunk/index.php
A         trunk/js
A         trunk/js/scripts.js
A         trunk/LICENSE.txt
A         trunk/README.txt
A  (bin)  assets/screenshot-1.png
A  (bin)  assets/screenshot-2.png
A  (bin)  assets/screenshot-3.png
deepak@m2air bulk-classic-to-block % svn status
A       assets/screenshot-1.png
A       assets/screenshot-2.png
A       assets/screenshot-3.png
A       trunk/LICENSE.txt
A       trunk/README.txt
A       trunk/bulk-classic-to-block.php
A       trunk/index.php
A       trunk/js
A       trunk/js/scripts.js
deepak@m2air bulk-classic-to-block % svn commit -m "Initial commit of plugin files"
Authentication realm: <https://plugins.svn.wordpress.org:443> Use your WordPress.org login
Password for 'deepak': ********************************************

Authentication realm: <https://plugins.svn.wordpress.org:443> Use your WordPress.org login
Username: deepakness
Password for 'deepakness': ********************************************

Adding  (bin)  assets/screenshot-1.png
Adding  (bin)  assets/screenshot-2.png
Adding  (bin)  assets/screenshot-3.png
Adding         trunk/LICENSE.txt
Adding         trunk/README.txt
Adding         trunk/bulk-classic-to-block.php
Adding         trunk/index.php
Adding         trunk/js
Adding         trunk/js/scripts.js
Transmitting file data ........done
Committing transaction...
Committed revision 3424811.
deepak@m2air bulk-classic-to-block % svn copy trunk tags/1.0.0
A         tags/1.0.0
deepak@m2air bulk-classic-to-block % svn commit -m "Tag version 1.0.0"
Adding         tags/1.0.0
Adding         tags/1.0.0/LICENSE.txt
Adding         tags/1.0.0/README.txt
Adding         tags/1.0.0/bulk-classic-to-block.php
Adding         tags/1.0.0/index.php
Adding         tags/1.0.0/js
Committing transaction...
Committed revision 3424816.
deepak@m2air bulk-classic-to-block %

And then my WordPress plugin Bulk Classic to Block was live, and I could access it from this URL: https://wordpress.org/plugins/bulk-classic-to-block/

7. Future updates

If I update anything to the plugin files in the future, I might need to run the following commands:

cd ~/bulk-classic-to-block

# copy or edit files
svn add assets/screenshot-4.png
# or edit readme.txt

svn commit -m "Update screenshots and readme"

Above is when I add a screenshot or a minor change without need to bump up the version, but when I have to do a new release then the process will be:

  1. Make changes in files in the /trunk folder
  2. Bump the version number in:
    1. Main plugin file
    2. readme.txt file
    3. Changelog section
  3. Commit /trunk by using the svn commit -m "message" command
  4. Create a new tag (important) by running the following commands:
svn copy trunk tags/1.0.1
svn commit -m "Tag 1.0.1"

Also, some other helpful svn commands can be:

# See what changed
svn status

# See diff
svn diff

# Update local copy
svn update

That's it!

I wrote everything in detail here, because I would definitely need to look back at it in the future when I update the plugin or even when I have to publish a new plugin to WordPress.

Comment via email