Author: Muhammad Muhsin

  • DIY Breadcrumbs in WordPress with Full Site Editing

    DIY Breadcrumbs in WordPress with Full Site Editing

    Let’s look at how you can use Gutenberg and Full Site Editing to create Breadcrumbs for your WordPress site.

    You would need to install the latest version of WordPress and a plugin that has FSE (Full Site Editing) support.

    You would also require the The Icon Block by Nick Diego.

    Here’s the code. You can copy it and paste it in your Single Post template.

    Once copied and saved, the frontend of the template would look something like this:

    Enjoy!

  • Add Multiple Products to WooCommerce Cart at Once

    Add Multiple Products to WooCommerce Cart at Once

    We were working on a WooCommerce project that required us to add multiple products to the cart from a single click of a button.

    We wanted a solution from the JavaScript side, and we came up with the following code. This should fire when the “add to cart” button is clicked:

    Here’s a gist that contains the solution.

  • WP REST API can still cut it

    WP REST API can still cut it

    Most developers have used an API (and more specifically the REST API) in some point in their careers; and a WordPress developer is no exception. We may have used the WordPress REST API for fetching data from a remote WordPress instance, or update some record somewhere with authentication or to create a Headless WordPress site. Perhaps we simply used it within a Gutenberg block.

    GraphQL is an alternative to the REST API, and also a great technology. However, using GraphQL with WordPress requires the installation of a new plugin. If you are using GraphQL to merely solve the under-fetching/over-fetching problem for basic queries, you might want to continue reading this post.

    WP REST API 101

    The easiest way to play with the WP REST API is to visit any WordPress site’s URL followed by /wp-json. I’d recommend a REST client like Postman or Insomnia. In case you do not download these apps, you can visit the URL on your browser. If you go this route, however, I’d recommend an extension to view JSON data. You can find them on your Browser’s extensions library. Taking this site as example, let’s say you visit the following URL:

    https://muhammad.dev/wp-json

    You will get a huge chunk of JSON data. There will be multiple namespaces. I’d recommend you go explore the the WP namespace first:

    https://muhammad.dev/wp-json/wp/v2

    You will get the endpoints inside of the core WP namespace. Let’s look at the latests posts:

    https://muhammad.dev/wp-json/wp/v2/posts

    Solve over-fetching using _fields

    If you followed the last link, you would have seen a bunch of fields for the latest 10 posts. Let’s say you only need the title, and excerpt. Here comes the key part: you use the _fields URL parameter to limit the fields to just what you want:

    https://muhammad.dev/wp-json/wp/v2/posts?_fields=title,excerpt

    The above will only return the posts’ titles and excerpts. This would reduce the load time significantly since it’s much less data as compared to retrieving the entire dataset from the posts endpoint.

    Get the full categories, tags, and featured image

    Another “limitation” with the REST API is that you cannot see the name or slug of the attached category or tag for a post if you go to the /posts endpoint.

    The solution to this is to pass the _embed param to the URL.

    https://muhammad.dev/wp-json/wp/v2/posts?_embed

    The above will give you the terms (categories, tags) used for the posts. Additionally, you will also get the featured image details for the give post. This will save you from making multiple calls to the remote endpoint, thus saving time and money.

    Although this is not a full-on nested call like you can do with GraphQL, this is good enough for a lot of use cases.

    A note on using _fields and _embed

    As you try to use these tips, you would be tempted to use both the _fields and _embeds params in one call. You will notice that it is not possible to do so.

    When I tried the above scenario, it returned empty results. So, I followed this solution StackOverflow to get over this roadblock.

    TLDR;

    Perhaps you are discouraged from using the WP REST API because it fetches fields you do not need. Perhaps it is because the results do not contain the featured image URL or the category/tag name and slug. If so, then you might want to consider sticking to the REST API before looking elsewhere.

  • New to WordPress Development? Here’s a 2025 Guide!

    New to WordPress Development? Here’s a 2025 Guide!

    Precursor

    Let me start with a personal take.

    I started dabbling with WordPress 10 years ago in 2015.

    In that period, there have been changes several changes. Still, there have also been things that have stayed the same.

    I’ve learned an important trick; to develop foresight, you need to practice hindsight.

    Jane McGonigal

    Let’s focus on the fundamentals, first – the things that stood the test of time and will do in future.

    We can use WordPress for many purposes. It can serve as a tool builder, like a resumé maker. It can also be a platform or even a billboard. Nevertheless, the fundamental reason we use WordPress is for content.

    When we say content, it can mean many things – including Instagram reels or TikToks. However, with WP, content primarily means the written word. That’s what I believe the Word in WordPress stands for.

    Although, we can upload and embed videos and images, the power of words is what makes WordPress, well, powerful.

    So, it is a Content Management System as its core.

    The Foundations

    Now that we know what WordPress is (a CMS), let’s dive into what you need to learn to become a developer in the short term.

    By near term, I mean a quarter of a year. Let’s say you start now; you could hopefully become a Junior WordPress Developer by June 2025.

    These are the tools you need to master to get going:

    1. An understanding of the WordPress basics. What is a post and how does it differ from a page? What is a post type? What is a taxonomy? How do I change a theme or install a plugin? And so on.

      There is an endless list of questions you may have as you follow through. I recommend you befriend your friendliest AI tool to ask questions and get clarity.
    2. A Development Environment. Avoid working on projects without a dev environment if you can. Do not work on projects with just a single production site where all the work happens. I also recommend having a local WP environment. This way, all your development work is on your computer. You can do this while you are working. LocalWP and Studio by WP.com are both great for beginners.

      Think of it this way. Would you be doing carpentry at the location of your customer or at your work shed? I would do it at my work shed or a home office shed (remote work FTW). So, let’s use a local development environment.
    3. Basic Web Development. I would say you should possess the basics of HTML, CSS, and JavaScript. I am not a purist, so w3schools.com is a good resource for learning that. If you happen to be a purist, head over to mdn!
    4. Some backend knowledge. It is also good to know some PHP and MySQL. Or even the basic syntax and ideas are sufficient.

      Again, ChatGPT is your friend. Pester it with your questions and test yourself against it.

    Intermediate

    Now, we are getting to where most developers should get to. However, a lot of them will take a false path. Others will stop with the foundations. For instance, they will still use the Classic Editor. They will rely solely on a Page Builder. They will also stick to store bought themes and plugins without considering any customizations.

    WordPress Hooks (filters and actions) 🪝 are an important part of advancing as a WordPress developer. It’s crucial we learn it right – and practice it.

    Gutenberg was merged to core in 2018 and there has been a mixed reaction from the community. I believe it is about time (albeit a bit too late) to embrace the block editor with both arms.

    There are so many terms when it comes to the block editor. But keeping abreast of the nuances pays off handsomely in the long run.

    With that said, let me throw some words:

    1. Blocks – they can be core or custom
    2. Block Patterns
    3. Block Filters
    4. Block Styles
    5. Block Variations
    6. Block Plugins
    7. Block Themes and Full Site Editing
    8. Block Templates
    9. Reusable Blocks
    10. Dynamic Blocks – as opposed to Static Blocks

    I do not want to explain here what each means. Nor do I want to be considered an expert in critiquing the decisions that went into its nomenclature. You could learn a ton about these from fullsiteediting.com or through Google / ChatGPT.

    You can also learn from wpdevelopment.courses. Please note, it is a paid resource and I am a student of the course. The course helped me a ton to level up in block theme development. And no, I am not being paid to say this.

    ES2015+ or ES6 is also a decade old now. And React is 12 years old now; almost a teenager. The reason I mention it is so that we are aware its about time we learned these. So along with learning Gutenberg, it’s essential to also learn modern JS.

    Of course, here comes the other essentials like security best practices. Escaping, Sanitizing, Validating – the whole nine yards.

    An excellent resource is WPVIP’s course on security.

    It could take a year or more to get comfortable at this.

    Advanced

    You are in the big boy league now.

    It can take a several years to become great at WordPress.

    Courses from here are great to get good at some advanced WP concepts.

    Also, feel free to go through these best practices.

    The best way to become great, in my opinion, is to go through the works of the best people in the industry.

    For example, reading through WP Core or Gutenberg Core’s code on GitHub, perhaps reading through a major plugin’s code like Google Site Kit, or by contributing to core and other open source software yourself.

    An obvious way to get advanced is by working on large site rebuilds or plugins that touch many sites and has great impact.

    Closing Thoughts

    Do not forget about the community.

    You would be doing yourself a great favor by participating in dialog with the WordPress community, over on Twitter or at local events such as Meetups and WordCamps. A friend I made at a meetup 10 years ago is my almost like a mentor now!

    Of course, when you get to the advanced level, it’s good to contribute back to WordPress in the form of code, events, teaching, encouraging, documenting, organizing, volunteering, and so on.

    So, how do I get started?

    It depends on what you want to achieve with WordPres.

    If I were to give you one call to action, it would be that you register as a member of WordPress.org – you will hopefully look back and thank yourself that you did so.

    The more important CTA, however, is to head over learn.wordpress.org and choose your path!

    Closing Thoughts

    I initially set out to write about the WordPress ecosystem—the so-called bubble where outsiders often dismiss WordPress developers as “not real developers.” Instead of merely highlighting a problem, I decided to offer a solution: a practical roadmap to becoming a proficient WordPress developer. I hope this approach provides real value and inspires you to embrace the journey ahead.

    Thank you for reading this far.

  • Siri-controlled DND 🎧 for my office room

    Siri-controlled DND 🎧 for my office room

    Pausing notifications on your phone is great. The iPhone’s Do Not Disturb (DND) feature is also great. Would it not be awesome if we had a DND for our room/office? Well, that was when I had an idea for a mini project.

    My nephews and I went to a local electronics store and bought some gadgets. I just bought the ESP32-C3, which has two USB-C ports.

    These were the steps I did in order. Of course, ChatGPT helped me every step of the way.

    1. I ensured the ESP32 was working by running a blinking sketch, which I created using Arduino IDE.
    2. I then created an on-off switch using the BOOT button on the ESP32. This would turn the LED to switch between Green and Red alternatively each time you press the BOOT button the the microcontroller.
    3. Then I connected the ESP32 to Blynk.
    4. Once it was connected to Blynk with the token, etc. I used three links:
      • One would turn the Green light on when a GET request is sent to it.
      • The other would turn the Red light on when a request was sent to it.
      • The third one would give the current status of the light.
    5. Then I did some configurations using Siri Shortcuts. They were:
      • Office Green: which would essentially visit the above link I spoke about followed by turning off Do Not Disturb on the iPhone/Apple Watch.
      • Office Red: which would essentially visit the second link above, followed by turning on Do Not Disturb on the iPhone/Apple Watch.
      • Office Switch: this would get the current status of the light. If the currentStatus was 1, it would run Office Green, otherwise it would run Office Red.

    The end result was something like this:

    In case you have any inspiring ideas for such projects, feel free to build on it and share to the world!

    If you find this post inspiring, I have done my job. If you asked yourself why not just close the door instead of this contraption? Well, then you have done your job of critical thinking.

    Cheers!

  • Dolphins, Deer, and a whole lot of splashes

    Dolphins, Deer, and a whole lot of splashes

    Today concludes our 4-day trip to Trincomalee, which is in the northeast region of Sri Lanka 🇱🇰.

    Here are some of the Instagram posts that came out of the trip:

    Follow me on the gram for more!

    Hopefully, 700km has made me a tiny bit wiser.

    Stay tuned for more travel and remote work content.

  • 30 thoughts at 30

    30 thoughts at 30

    I will be 30 in a few days and want to write about some lessons I have acquired through the University of Life. They are in no particular order. Here we go:

    1. Purpose trumps passion. Most of us have passions in life, such as playing football and supporting Manchester United, collecting vintage sports cars, or creating art. However, I believe purpose comes before that. As you might know already, my purpose in life is worshipping God Almighty alone. Only then will my remote career and passion for working with React and WordPress come into play.
    2. One bad apple does not mean the whole box of apples is bad. There is a famous saying in our family that when you want to check if a pot of rice is well-cooked, you can test it with one grain of rice. In other words, you can judge if something is well done by checking a small sample of it. However, this saying does not really apply to humans. In a class of students, one person’s academic or personal performance can never determine the potential of the whole batch.
    3. Do not judge a book by its cover. There is a famous true story of a man who hated a certain author and would not read any of his work just because he had a preconceived notion that this author/scholar was bad. A smart friend of his took a book by this same author, removed the covers and gifted the book to him. The man read it and fell in love with the book and accepted this author/scholar to be upon the truth and goodness.
    4. Looking after one’s parents is a blessing. I saw someone who had posted that we must save for retirement instead of spending money educating our children. And that depending on our children as a retirement plan is not a good idea. I thought this was such a bad take that I did not even want to leave a comment on their post. For multiple reasons. Educating someone is one of the best things we can do. On top of that, educating our children, I believe, is a fundamental right we have to give them. What if we go broke while educating them? If they are raised well, they will look after us and this is one of the best retirement plans we have.
    5. The ends do not justify the means. We may have the noblest of goals. However, if we are taking the wrong approach in implementing our goals, what good is there in having noble goals in the first place? Likewise, we must not steal from the rich to feed the poor. Because we are not capable nor responsible for satisfying everyone’s hunger. Likewise, vigilanteism is not a virtuous job either.
    6. Ego is never praiseworthy. Some folks and careers are driven by ego, but what are its fruits? What good do they do? Confidence is good and we must nurture it. However, ego is essentially false confidence and we must shun it.
    7. Gentleness gets you what harshness does not. A lot can be achieved by being easy-going and easy to deal with. Whereas threatening people and pushing your weight around and showing everyone “who the boss is” will rarely get you very far.
    8. Have a good heart and do it for the right reasons. Some folks, when they make it big and have gained some popularity or even notoriety, answer when asked what made them so successful, “because I wanted to prove my haters wrong.” We like a good story, for example, someone making it from rags to riches. However, what is wrong in answering it with a simple, “because I wanted to put food on the table” or likewise.
    9. You are going to die. No one is going to make it out alive. In fact, in this world, there is no such thing as infinite or forever. “We are all living on rent”, my mentor used to say. He is no more with us. God’s mercy be on his soul.
    10. What goes up eventually comes down. We saw it with Nokia and Blackberry, we saw it with many successful people, and we even saw it happen with popular fashion and trends. Perhaps “what goes around, comes around,” too?
    11. Are you willing to do your career as a hobby? Not everyone will say “yes”. If you can say “yes,” consider yourself extremely blessed. Like Steve Jobs once said, “Your work is going to fill a large part of your life, and the only way to be truly satisfied is to do what you believe is great work. And the only way to do great work is to love what you do. If you haven’t found it yet, keep looking. Don’t settle. As with all matters of the heart, you’ll know when you find it.”
    12. “Focus is saying no to a 1000 things”, another great one from Steve Jobs.
    13. “Design is how it works,” yet another Steve Jobs quote, essentially means that how a product works beats out how it looks or feels.
    14. “Everything has an opportunity cost,” my mentor taught me. In other words, there are tradeoffs in every decision you make. Weigh the pros and cons and most of all, do what your heart says.
    15. Being happy for others is being happy for oneself. Let me explain. Let’s say someone is blessed much higher than yourself. You are only burning in hatred, anger, and bitterness if you feel like you deserve more than this person. Flip envy on its head, and be happy for them because they fully deserve what they have. Go as far as congratulating them. This will make you happier and give you a natural source of encouragement and inspiration.
    16. Doing someone a favor while expecting something in return is not a favor. It is a transaction. Instead, expect the reward from God, and you will have peace of mind and contentment. Even if you do not see an immediate reward for your good nature, have that certainty that “you reap what you sow” and that you can get the fruits one day; if not on day one.
    17. “What really matters are good endings, not flawed beginnings.”, Ibn Taymiyyah.
    18. Run a tight ship. I first heard this from a rather successful business owner. The previous points I have spoken about mention the virtue of being kind and forgiving. However, when we do business, we need to ensure we do the right thing. The right thing often means we do not let anyone take us for a ride.
    19. The more you know, the less likely you are to make absolute statements. Yet, here I am making absolute statements, still! In other words, I do not know much.
    20. People are complex and unpredictable. But life would be no fun if people behaved like manufactured machines. “I can calculate the motion of heavenly bodies, but not the madness of people.”, Isaac Newton once said. It also makes life a tiny bit harder, knowing we need to deal with people justly and kindly simultaneously. Someone else’s bad behavior does not give us any license to treat anyone poorly.
    21. You can never get enough of what you really don’t want. But a little of what you really need would suffice you.
    22. Love people and use things, because the opposite never works. Computers are objects that help us do things. People are not. If you have employees who help you on your mission and are compensated for it, they are another resource. Still, it means we treat each employee with the decency they deserve. Human Resource is the best resource, if utilized well.
    23. “A person must never allow their knowledge to deceive him, for what they do not know exceeds what they actually know.” is a scholarly statement. “As our island of knowledge grows, so does the shore of our ignorance.” is something I heard and liked.
    24. Being shy is not the same as being weak. Some shy people will not do something even though they can do it. But someone without an ounce of shame will try things they are not capable to do. Do not confuse the two.
    25. Justice, Patience, Interactions with other people, Generosity, and Bravery. These five are considered to be the foundation of good character.
    26. Wisdom is putting things in their place (or where they will fit). For example, it means letting the stronger person do a job that requires strength and assigning a smart individual to do a job that requires knowledge and tact.
    27. Know your worth. I was just chatting with a friend who said they now know the value of each day they work so that they can better enjoy time with their loved ones and spend time more consciously.
    28. I want you to believe in the values and rewards of hard work. But realize that not all success is due to hard work, and not all poverty is due to laziness. Keep this in mind when judging people, including yourself.” I found this quote from Morgan Housel to be very beautiful.
    29. Do the workout you love. Whether it is hitting the gym or doing a sport or simply walking, doing what we enjoy will help us stay more consistent.
    30. Enjoy life responsibly. We need to live fully and enjoy every moment and take it as it comes. However, we need to do so responsibly and safely. For example, some might consider drugs and alcohol as means of enjoyment, but it is not IMHO. A simple meal that turns out okay IS enjoyment, even though some might consider it not.

    If you find some of them trite, know they have stood the test of time!

    Also, I do not celebrate birthdays, but I do keep track of time! If anything, every birthday brings us closer to our graves, and it is about time I prepare for it.

  • Receiving Feedback; Giving Feedback

    Receiving Feedback; Giving Feedback

    One of the aspects of dealing with humans is that you will receive feedback from them. At other times, you’ll need to give feedback to them. Here are my 2 cents on this topic.

    Receiving Feedback

    Getting feedback from someone is a gift. Embrace your gift and thank the person giving it to you. However, not every feedback is kind.

    How do you know a feedback is kind?

    I wrote in an older article:

    … is the feedback about something you can improve/change? Then it is constructive.

    Notice how a scientist receives feedback. They would take feedback as input for their subsequent trials. If they were resistant and defensive each time a trial failed, that scientist or inventor is not getting very far. Similarly, we must take feedback from other (well-meaning) people in good faith.

    Assume Positive Intent

    API

    This means having good thoughts about others as most people have good intentions.

    We must respect and value businesses that give us feedback after an interview. Companies should tell candidates their application was rejected if they are not moving forward instead of keeping job-seekers in the lurk. The worst is when a candidate contacts the recruiter, and the recruiter ignores the candidate. The ideal company would go so far as to explain why you were not hired this time.

    Giving Feedback

    Today, while I was listening to Daniel Bachhuber on WordSesh, I heard him say the following:

    Clear is kind.

    Being as objective and as clear as possible is a service we are giving to the one we are giving feedback to – in order that they may take the maximum use out of this feedback.

    Could you make it about their work and not about the person? If you have a personal grudge against your coworker, this will come out sooner or later. So, as a developer, always review the code, not the coder. In case you have a resentment against anyone, best to sort it directly instead of leaving snarky reviews on their work.

    Another popular tactic is sandwich feedback. It may work for some and not work for others. It’s like a feel-good way to present negative feedback, where you give good feedback at the start and the end and keep the negative feedback in the middle of your message.

    This resolves around being kind and not fake. We all want to be the former and not the latter.

    We should be wise and know when to give feedback and when not to give feedback. For example, you should not tell a person who lost a loved one to “man up”. This is a crude example, but I believe you get the point.

    Another trap some tech folks fall into is thinking they are too good to be kind. Listen! No one is too good for anything. So, we must not use genius as an excuse to behave like a jerk.

    Code is written for other humans to read.

    “Any fool can write code that a computer can understand. Good programmers write code that humans can understand.”

    Martin Fowler

    Closing note

    All of this does not mean I have had bad experiences with anyone or that I am now a master at giving and receiving feedback. It just means I write about topics that I like.

    It may just mean I have read a bit about this or learned from the stories and experience of others.

    “If I have seen further, it is by standing on the shoulders of giants.”

    Sir Isaac Newton

  • Create a “mini-app” using Core Gutenberg Blocks and some JavaScript

    Create a “mini-app” using Core Gutenberg Blocks and some JavaScript

    While it’s tempting to reach out to build a custom block every time you need custom functionality, it may not always be the best decision. Before committing to developing a custom block, it’s essential to evaluate the needs of your website.

    Custom blocks can offer flexibility and can provide a precise set of features tailored to your content. They can integrate with your site’s unique design system and provide custom experiences that generic blocks cannot. However, developing custom blocks requires time, expertise, and resources.

    You can use the core blocks alongside Gutenberg filters to customize its looks or behavior. You can also use block variations to create a slightly different way of utilizing the same core blocks. Or, if you want to change the look of the core blocks, you could employ block styles to achieve it.

    Having said all that, what if your requirements differ from the above? What if you want the flexibility of creating using the block editor, utilizing any color and style you want? But you also need to make that bit of HTML you built behave precisely how you want.

    The following is my take on using core blocks with some custom JS sprinkled on them to create a mini-app.

    Demo

    This is a Stopwatch mini-app that uses some blocks and JavaScript. You can play around with its functionality:

    00:00:00:000

    Now, let’s explore how I built this.

    The Blocks Used

    In this website, I use the Twenty Twenty Four theme.

    The above demo uses the following blocks:

    1. Group
    2. Stack (a variation of the Group block)
    3. The Icon Block by Nick Diego (not compulsory but used for aesthetics)
    4. Heading
    5. Row (a variation of the Group block)
    6. Buttons and the Button block

    The code for it looks like this (you may copy it to your WordPress site as you wish):

    https://gist.github.com/m-muhsin/d20b21c3765e5b913cd39b05a54b89b4

    You might notice I have used a few class names. This is so that I can use JavaScript to select those elements.

    After adding the above HTML and Block markup into this post, I wanted to add some JS.

    So, I used the Custom HTML block and added the following JS code to it within <script> tags.

    https://gist.github.com/m-muhsin/a685d5bed947020407dc802ecc0ffe4c

    That’s about it really!

    Some thoughts

    This idea that I presented is familiar in the WordPress world. We have used HTML generated using the classic editor coupled with enqueued JavaScript to power up custom experiences for ages.

    Also, this idea is excellent for when we need to add Google Analytics scripts, for example. We can have buttons with a certain class name and use a global script to target all those buttons to then add tracking scripts to them.

    Hope this small demo and explanation helps anyone out there!

  • What Makes up a Gutenberg Developer?

    What Makes up a Gutenberg Developer?

    This article contains 3 things:

    1. A brief introduction to Gutenberg and its purpose of existence
    2. Introducing the Gutenberg Developer and their skillset
    3. How to become a Gutenberg Developer

    Gutenberg, which started off as the codename for the new WordPress Block Editor has been used to define many things. The new editor has been built to replace the previously used TinyMCE editor which has been in WordPress for a long time. Gutenberg started off as a plugin and was merged into WP core in WordPress 5.0 which was 5 years ago. Time flies, right?

    Coming back to the point. Gutenberg has been used to define the following items:

    1. The plugin that was built to replace the “Classic Editor” also known as the TinyMCE editor. Unfortunately, it has a very low rating on the WordPress plugin repository. As a developer, it’s difficult to understand the hate for this plugin, but it is what it is.
    2. The “content editor” which replaced the post/page editor which was using TinyMCE.
    3. The Full Site Editor also known as the “site editor”.

    Now, Gutenberg has 4 phases:

    1. Content Editing, which was started in 2018 with WP 5.0
    2. Site Customization, which started last year with WP 5.9
    3. Collaborative Editing which is being worked upon
    4. Multilingual Support which is scheduled next

    Replacement for page builders?

    Although it did not start off as as replacement for page builders when first released, it has become so. Since the site editor allows you to replace every bit of the site using blocks, isn’t Gutenberg essentially another page builder? That’s what I believe so. It’s not “just another” page builder. But it is the de facto page builder that is built by the team building WordPress core. In other words, if you want to use the default way of page building / site building, you are best off choosing Gutenberg,

    Atomic in nature?

    Another important point we must realize is that Gutenberg has atomized the aspects of site building. The idea is that the site is broken down into smaller and smaller pieces of blocks until you get to the smallest “single block”.

    A group of blocks can be categorized as the following:

    1. Block Pattern (synced and unsynced)
    2. Block Template Parts
    3. Block Themes

    I first saw this idea in WordPress, but other CMSs (primarily Headless CMSs) also have adapted this idea of slicing up the site into atomic pieces or blocks (as referred to in WordPress).

    Gutenberg Developer 101

    This is a popular job role within the WordPress space. It is still a hot and trendy job title although it’s been over 5 years since we first heard of Gutenberg. So, what makes up a Gutenberg Developer? Let’s find out!

    I created this Venn Diagram to represent what I believe makes up a Gutenberg Developer.

    It essentially comprises of the skills of the following 3 job roles:

    1. WordPress Developer
    2. React Developer
    3. Frontend Developer

    You might think that’s a lot of things to learn just to be able to do one job role. Well, that is not the case so!

    How do I say that?

    For example, if you have rudimentary WordPress skills, but are very good at React, you can still do a lot by reading about the Gutenberg documentation and learning the WP REST API as well as brushing up on CSS.

    If you are a WordPress expert, but have basic React skills, that’s more than enough. Because building blocks requires little React knowledge to get started.

    Likewise, if you are a frontend developer strong in CSS and JS, you might have to learn some React and the WordPress knowledge necessary to build blocks or a block theme.

    In other words, you do not need to ace all 3 of these roles just to be able to build with Gutenberg.

    So, what skills do you need to get there?

    Gutenberg Developer skills

    Matt Mullenweg said in 2015, “Learn JavaScript Deeply”. It still stands true. You need to know JavaScript. I believe most WordPress developers and Frontend Developers already know JS. React Developers definitely know it since React is a JS library.

    Apart from JS knowledge you might need these core skills to work with Gutenberg:

    1. React
    2. Some basic build config knowledge like webpack and friends
    3. PHP
    4. HTML + CSS
    5. JSON

    How do I learn to become a Gutenberg Developer?

    There a few aspects to becoming a Gutenberg Developer.

    For example, you can build individual blocks or be able to build block themes, or plugins that house multiple blocks to solve specific problems.

    For example, the Jetpack plugin uses an array of blocks to solve niche problems with content creation. Twenty Twenty Four is an example of a block theme – a theme built entirely out of blocks.

    There are a few resources I can recommend to learn these:

    1. Gutenberg Blocks for WordPress and React Developers by Ali Alaa – this is a great course for someone who has knowledge of React and WordPress but wants to speed up their learnings with block building.
    2. The Block Theme Academy by Fränk Klein – this is an awesome set of courses to be able to build out block themes, the right way.

    I have taken both these courses and have found them to be very helpful.

    Getting a job as a Gutenberg Developer

    There are many companies hiring for this role. WordPress development agencies look for these folks with this skillset as they need to build client sites and apps that make use of Gutenberg.

    So are product companies looking for these roles. Product companies need to “blockify” their products sooner or later. If their products do not play nicely with the block editor, it could mean death to their product as more and more users adopt the new block editor and move away from the Classic Editor.

    Theme shops also need Guetenberg Developers as they start to replace classic themes with either hybrid themes or block themes.

    Mindset of a Gutenberg Developer

    As Gutenberg Developers, we need to think of future/modern WordPress sites as pieces of a blocks inside blocks inside blocks, up until we reach a single block.

    What makes up a block? They can be made using PHP or JS. The editor side is mostly written using React. The frontend uses a React-like structure, but is not, in fact, React that powers it. It gets serialized to HTML. You can also use PHP to replace the frontend code, which I quite like because of the power of PHP within the context of WordPress. I will stop here because speaking at length about this topic is cannot be covered in a single blog post.

    Having said that, it’s important to decide which language to use where. You can even use React by enqueueing it to the fronend and make use of its dynamic nature to build complex UIs. However, it’s better to use PHP and vanilla JS as much as possible before reaching out to React for the frontend.

    Here is an architecture diagram of a block:

    It looks quite complex to understand. But you will soon realize how it works once you start working with it.

    Some helpful resources

    Here are some resources that can help you start off in this journey:

    1. WordPress Builders playlist by WP Engine Builders YouTube channel
    2. Block Editor Handbook as a reference point
    3. Jamie Marsland’s YouTube channel
    4. Tutorials by Bill Erickson
    5. The writings of Rich Tabor
    6. The works of Nick Diego

    So, you want to become a Gutenberg Developer?

    If you have read up to this point and want to become a Gutenberg Developer, here are some steps you can take:

    1. Learn as much as possible from the courses and resources listed above.
    2. Build out a simple block using block.json. This is a helpful tutorial.
    3. Build more blocks!
    4. Build out a basic block theme
    5. Apply for jobs
    6. ???
    7. Profit

    Let’s keep in touch!

    I hope you found this piece helpful. Let me know if you’d like me to cover another similar topic, or something else you’d like to read!

    If you have questions about blocks or block themes or want to get in touch with me, feel free to reach out! I am also active on X and LinkedIn if you want to follow me over there. I also provide consultancy as a Gutenberg Developer, so feel free to get in touch!