What we do?

Understanding the Difference Between @wordpress/components and @wordpress/block-editor

Since the introduction of Gutenberg, WordPress development has undergone a significant transformation. The shift from a primarily PHP-driven architecture to one that embraces modern JavaScript practices has introduced developers to a suite of powerful packages that form the backbone of today’s WordPress experience. Among these packages, @wordpress/components and @wordpress/block-editor often cause confusion for developers who are new to this ecosystem. While they may appear similar at first glance, they serve distinctly different purposes and understanding their differences is crucial for effective WordPress development.

The Evolution of WordPress Development

WordPress has been on a journey of modernization for several years now. The introduction of Gutenberg marked a pivotal moment in this evolution, signaling a move toward a more JavaScript-centric approach. This shift wasn’t merely cosmetic; it represented a fundamental rethinking of how WordPress content is created, edited, and displayed.

At the heart of this transformation lies a modular JavaScript architecture. WordPress now maintains dozens of JavaScript packages, each designed with specific responsibilities and capabilities. These packages follow a monorepo approach – they’re developed within a single repository but published as separate npm packages. This structure allows developers to pick and choose exactly what they need for their projects without carrying the burden of unnecessary code.

Diving Into @wordpress/components

The @wordpress/components package represents one of the most fundamental building blocks in the new WordPress JavaScript ecosystem. At its core, this package provides a comprehensive library of reusable UI components designed with WordPress’s unique needs and aesthetics in mind.

Think of @wordpress/components as the basic building blocks of the WordPress admin interface. These components range from simple elements like buttons, text inputs, and toggles to more complex interfaces such as modals, popovers, and color pickers. What makes these components special is their adherence to WordPress design principles, ensuring that anything built with them feels naturally at home within the WordPress admin.

The beauty of these components lies in their versatility. They aren’t tied to any specific context within WordPress. A Button component from this package is equally at home on a plugin settings page as it is within the block editor. This universality makes @wordpress/components incredibly valuable for developers who want to create interfaces that feel consistent with the core WordPress experience.

Accessibility is another strength of this package. WordPress has made significant strides in ensuring that its admin interface is accessible to all users, including those with disabilities. The components in this package inherit this commitment, with built-in keyboard navigation, screen reader support, and other accessibility features. For developers, this means that building accessible interfaces becomes less of a manual effort and more of an inherent quality of the tools they’re using.

Let’s consider a practical example. Imagine you’re developing a custom plugin that needs a settings page. Using components from @wordpress/components, you might create panels with collapsible sections, toggle controls for enabling or disabling features, text inputs for configuration values, and buttons for saving changes. All of these elements would automatically match the look and feel of WordPress, providing users with a familiar experience that feels like a natural extension of the platform.

The Specialized World of @wordpress/block-editor

While @wordpress/components focuses on providing general-purpose UI elements, @wordpress/block-editor serves a much more specialized role. This package is dedicated to the needs of the block editor specifically, offering components and utilities that understand and interact with WordPress blocks.

The block editor (Gutenberg) represents a paradigm shift in how content is created in WordPress. Instead of a single monolithic text area, content is now composed of discrete “blocks” – paragraphs, images, galleries, embeds, and countless other content types. Each block has its own unique properties, behaviors, and editing interfaces. This complexity requires specialized tools, which is precisely what @wordpress/block-editor provides.

The components in this package are designed with an inherent understanding of the block ecosystem. They know about concepts like block selection, focus states, and editing contexts. They’re aware of how blocks can be moved, inserted, removed, and transformed. This context-awareness enables them to provide sophisticated functionality that would be difficult or impossible to achieve with generic UI components alone.

Consider the RichText component – one of the most frequently used elements from @wordpress/block-editor. Unlike a standard text input, RichText understands formatting, handles keyboard shortcuts, manages selections, and integrates with the block editor‘s formatting toolbar. It knows how to convert its content to and from HTML, and it maintains consistency with WordPress’s content handling conventions. This level of specialization makes it perfect for block development but would be unnecessary overkill for a simple settings field.

Similarly, components like BlockControls and InspectorControls understand their place within the block editing experience. BlockControls renders a toolbar that appears when a block is selected, while InspectorControls populates the sidebar with block-specific settings. These components handle the complex task of placing their content in the right location within the editor interface, freeing developers from having to manage this themselves.

Block development often involves a combination of components from both packages. The specialized components from @wordpress/block-editor provide the block-specific functionality, while the general-purpose components from @wordpress/components handle basic UI needs within those specialized contexts. For instance, you might use InspectorControls from @wordpress/block-editor to place settings in the sidebar, but then use SelectControl and ToggleControl from @wordpress/components to create the actual interface elements within that sidebar.

Understanding the Relationship Between These Packages

The relationship between these two packages is hierarchical, not parallel. @wordpress/block-editor depends on @wordpress/components, building upon and extending its functionality for the specific context of block editing. The reverse is not true – @wordpress/components has no dependency on or awareness of @wordpress/block-editor.

This relationship becomes clearer when examining the composition of block editor components. Many of them incorporate or enhance components from @wordpress/components to provide block-specific capabilities while maintaining consistency with the broader WordPress admin interface.

Context-awareness represents another key difference between these packages. Components from @wordpress/components are generally context-agnostic – they don’t have built-in knowledge of where they’re being used or what they’re being used for. In contrast, components from @wordpress/block-editor are deeply context-aware, understanding concepts like the current block, selected blocks, available transformations, and editing modes.

This difference in context-awareness influences where and how these components should be used. The generic components can be used practically anywhere within the WordPress admin, from plugin settings pages to widget areas to custom admin screens. The block editor components, however, are designed specifically for use within the block editor context and may not function correctly when used elsewhere.

Practical Applications and Best Practices

Understanding when to use each package is crucial for effective WordPress development. As a general rule, use @wordpress/components when building any WordPress admin interface that isn’t directly related to block editing. This includes plugin settings pages, custom admin pages, metaboxes, and widgets.

For block development, the choice becomes more nuanced. Use components from @wordpress/block-editor when you need functionality that’s specific to the block editing experience, such as rich text editing, block selection handling, or toolbar controls. Within these block-specific interfaces, you’ll often still use components from @wordpress/components for basic UI elements like buttons, panels, and form controls.

Proper importing is essential when working with these packages. Always import components from their specific package rather than trying to access everything through a single import. This ensures that your dependencies are correctly tracked and that you’re not inadvertently including code that you don’t need.

// Good practice
import { Button, Panel, TextControl } from '@wordpress/components';
import { RichText, BlockControls } from '@wordpress/block-editor';

// Avoid this
import { Button, RichText } from '@wordpress/block-editor'; // Incorrect!

Another best practice is to minimize dependencies by only importing the specific components you need rather than the entire package. This helps reduce bundle size and improves performance, especially for plugins that might be used on sites with limited resources.

When developing blocks, take advantage of the specialized components provided by @wordpress/block-editor rather than trying to recreate their functionality using more basic components. These specialized components handle many complex tasks automatically, such as placing toolbar controls in the correct location and managing block selection states.

The Evolving WordPress Ecosystem

Both of these packages continue to evolve as WordPress development advances. The WordPress team regularly introduces new components, enhances existing ones, and sometimes deprecates older approaches in favor of better solutions. Staying current with these changes is important for maintaining modern, compatible WordPress extensions.

Recent trends include increased component abstraction, with more high-level components that combine functionality in useful ways. There’s also been a push for better TypeScript support, providing improved type definitions for a better developer experience. Enhanced customization options are making it easier to style and adapt components to specific needs, while performance improvements are reducing bundle sizes and improving rendering efficiency.

For developers working with blocks, understanding the interplay between these packages is becoming increasingly important. As the block editor ecosystem expands to include full-site editing, theme blocks, and pattern directories, the specialized capabilities of @wordpress/block-editor are becoming even more central to WordPress development.

Building with Confidence

The @wordpress/components and @wordpress/block-editor packages represent different layers in the WordPress JavaScript ecosystem, each with its own purpose and specialization. By understanding their differences and how they complement each other, developers can build more effective, efficient, and maintainable WordPress extensions.

The foundational nature of @wordpress/components makes it the go-to choice for creating consistent, accessible interfaces anywhere in the WordPress admin. Its generic UI building blocks provide the versatility needed for a wide range of admin interfaces, ensuring that they feel like natural extensions of WordPress itself.

The specialized focus of @wordpress/block-editor makes it indispensable for block development, providing the tools needed to create rich, interactive editing experiences that integrate seamlessly with the block editor. Its context-awareness and block-specific capabilities enable developers to create blocks that behave exactly as users would expect.

By leveraging both packages appropriately, WordPress developers can create experiences that are both powerful and familiar, extending WordPress in ways that feel natural and intuitive to users. As WordPress continues its evolution toward a more block-oriented future, mastery of these packages will become increasingly valuable for developers who want to stay at the forefront of WordPress development.

Whether you’re building a simple plugin or developing complex custom blocks, understanding the right tool for the job will make your development process more efficient and your code more maintainable. With @wordpress/components and @wordpress/block-editor in your toolkit, you’re well-equipped to create WordPress experiences that are modern, accessible, and truly integrated with the platform.

The Importance of Defining block.json Attributes in WordPress Gutenberg Blocks

The WordPress Gutenberg editor, introduced in WordPress 5.0, revolutionized content creation with its block-based system. For developers building custom blocks, the block.json file serves as the backbone of block configuration, defining metadata, settings, and attributes. Among its many roles, defining attributes in block.json is critical to ensuring blocks function correctly, persist data, and provide a seamless user experience. Failing to define attributes properly can lead to significant issues, from lost settings to broken functionality. In this article, we explore why block.json attribute definitions are essential, the consequences of getting them wrong, and real-world examples to illustrate the impact.

What Are block.json Attributes?

In WordPress Gutenberg blocks, attributes are the pieces of data that store a block’s configuration and content. They define the customizable properties of a block, such as text content, toggle settings, or selected options, which are saved to the WordPress database as part of a post’s content. The block.json file is where developers declare these attributes, specifying their type (e.g., string, boolean, array), default value, and other properties.

For example, a custom navigation block might define attributes like this:

{
  "attributes": {
    "menuId": {
      "type": "number",
      "default": 0
    },
    "useCategories": {
      "type": "boolean",
      "default": false
    },
    "selectedCategories": {
      "type": "array",
      "default": []
    }
  }
}

Here, menuId stores a numeric menu ID, useCategories toggles category-based navigation, and selectedCategories holds an array of category IDs. These attributes are manipulated in the block’s JavaScript (edit.js) and PHP (render.php) files and saved to the database to persist user settings.

Why Defining Attributes in block.json Is Important

Properly defining attributes in block.json is not just a best practice—it’s a requirement for robust block development. Here’s why it matters:

1. Data Persistence

Attributes defined in block.json are serialized and saved to the WordPress database (in the wp_posts table as part of the post content). This ensures that user-configured settings, such as toggle states or selected options, are retained when a page is saved, reloaded, or displayed on the front end. Without a proper definition, WordPress doesn’t know to save the attribute, leading to data loss.

2. Block Validation

WordPress uses the block.json schema to validate block data when loading or saving a post. If an attribute is used in the block’s code but not defined in block.json, WordPress may flag the block as invalid or silently discard the undefined attribute’s value, causing unexpected behavior.

3. Improved Developer Experience

Defining attributes in block.json provides a clear contract for what data the block uses. This makes it easier for developers to understand, maintain, and extend the block. It also enables WordPress to provide better tooling, such as automatic TypeScript support or editor hints, when attributes are properly declared.

4. Front-End Rendering

Attributes are often used in the block’s server-side rendering (via render.php or a render_callback). If attributes are not defined in block.json, the front-end output may fail to reflect user settings, leading to inconsistent or broken displays.

5. Future-Proofing and Compatibility

A well-defined block.json ensures compatibility with future WordPress updates and tools like the Block Editor’s serialization process. It also supports features like block deprecation and migration, where attributes can be transformed if the block’s structure changes.

Consequences of Not Defining Attributes Correctly

Failing to define attributes in block.json or defining them incorrectly can lead to a range of issues that frustrate users and developers alike. Here are the most common consequences, with examples to illustrate the impact.

1. Loss of User Settings

If an attribute is used in the block’s JavaScript (e.g., in edit.js) but not defined in block.json, WordPress will not save its value to the database. As a result, user-configured settings are lost when the page is refreshed or reloaded.

Example: Custom Navigation Block
Consider a navigation block that allows users to toggle “Hide Empty Categories” and “Show Only Selected Categories.” The edit.js file might include:

<ToggleControl
  label="Hide Empty Categories"
  checked={attributes.hideEmpty}
  onChange={(value) => setAttributes({ hideEmpty: value })}
/>
<ToggleControl
  label="Show Only Selected Categories"
  checked={attributes.useSelectedCategoriesOnly}
  onChange={(value) => setAttributes({ useSelectedCategoriesOnly: value })}
/>

If hideEmpty and useSelectedCategoriesOnly are not defined in block.json, toggling these settings will appear to work in the editor but will reset to their initial (or undefined) values after a page refresh. This frustrates users who expect their settings to persist.

Fix:
Add the attributes to block.json:

{
  "attributes": {
    "hideEmpty": {
      "type": "boolean",
      "default": false
    },
    "useSelectedCategoriesOnly": {
      "type": "boolean",
      "default": false
    }
  }
}

This ensures WordPress saves the toggle states, preserving user settings.

2. Broken Front-End Rendering

Undefined attributes may not be available in the block’s server-side rendering, leading to incorrect or missing output on the front end.

Example: Category Navigation
Suppose the navigation block uses a selectedCategories attribute to store an array of category IDs for display. The render.php file might fetch categories like this:

$categories = get_categories([
  'include' => $attributes['selectedCategories'],
  'hide_empty' => $attributes['hideEmpty']
]);

If selectedCategories and hideEmpty are not defined in block.json, $attributes['selectedCategories'] and $attributes['hideEmpty'] will be null or undefined, causing the query to fail or return incorrect results. This could result in no categories being displayed or all categories being shown, ignoring user settings.

Fix:
Define the attributes in block.json:

{
  "attributes": {
    "selectedCategories": {
      "type": "array",
      "default": []
    },
    "hideEmpty": {
      "type": "boolean",
      "default": false
    }
  }
}

This ensures the attributes are available and correctly populated in render.php.

3. Block Validation Errors

When WordPress loads a post, it validates blocks against their block.json schema. Undefined attributes can trigger validation errors, causing the block to enter recovery mode or fail to load properly in the editor.

Example: Text Alignment
Imagine a block with a text alignment setting:

setAttributes({ align: 'center' });

If align is not defined in block.json (even if supports.align is enabled), WordPress may mark the block as invalid, prompting users to recover or convert it, which disrupts the editing experience.

Fix:
Explicitly define the attribute, even if it’s supported via supports:

{
  "attributes": {
    "align": {
      "type": "string",
      "default": "left"
    }
  },
  "supports": {
    "align": true
  }
}

4. Debugging Nightmares

Undefined attributes make debugging difficult, as developers may not immediately realize that missing block.json definitions are causing issues. This can lead to wasted time chasing symptoms (e.g., settings not saving) instead of addressing the root cause.

Example: Debugging a Toggle
In the navigation block example, a developer might spend hours debugging why hideEmpty resets, checking edit.js for state management issues, only to realize the attribute was never defined in block.json. Proper definitions prevent such confusion.

Best Practices for Defining block.json Attributes

To avoid these pitfalls, follow these best practices when defining attributes in block.json:

  1. Define All Attributes Used:
    Ensure every attribute manipulated in edit.js or render.php is declared in block.json. Even if an attribute seems minor (e.g., a toggle state), it must be defined to be saved.
  2. Specify Correct Types:
    Use the appropriate type (string, number, boolean, array, object) to match the attribute’s data. For example, use array for lists of values, like selectedCategories.
  3. Provide Sensible Defaults:
    Set default values that align with the block’s initial behavior. For example, a boolean toggle should default to false if it’s off by default, and arrays should default to [] if empty.
  4. Document Attributes:
    Use comments or a separate documentation file to explain each attribute’s purpose, especially for complex blocks. This helps future developers understand the block’s data model.
  5. Test Attribute Persistence:
    After defining attributes, test the block by saving settings, refreshing the editor, and checking the front-end output. Verify that all settings persist and render correctly.
  6. Plan for Migration:
    If updating an existing block to add new attributes, use the deprecated property in block.json to migrate old instances. For example:
{
  "deprecated": [
    {
      "attributes": { /* old attributes */ },
      "migrate": (attributes) => ({
        ...attributes,
        newAttribute: false
      })
    }
  ]
}

Real-World Example: A Navigation Block

Let’s revisit the navigation block example to tie it all together. A developer creates a block allowing users to display a WordPress menu, custom menu items, or categories. The edit.js file includes controls for:

  • Toggling “Use Categories” (useCategories)
  • Toggling “Hide Empty Categories” (hideEmpty)
  • Toggling “Show Only Selected Categories” (useSelectedCategoriesOnly)
  • Selecting specific categories (selectedCategories)
  • Sorting categories by name, count, or ID (categoryOrderBy)
  • Sorting order (ascending or descending) (categoryOrder)

Initially, the block.json only defines:

{
  "attributes": {
    "menuId": { "type": "number", "default": 0 },
    "useCategories": { "type": "boolean", "default": false },
    "categoryCount": { "type": "number", "default": 6 },
    "customItems": { "type": "array", "default": [...] },
    "className": { "type": "string", "default": "tmenu" }
  }
}

Problem: The hideEmpty, useSelectedCategoriesOnly, selectedCategories, categoryOrderBy, and categoryOrder attributes are missing. As a result:

  • Toggling “Hide Empty Categories” or “Show Only Selected Categories” works in the editor but resets on refresh.
  • Selected categories are not saved, so the front-end shows all categories or none.
  • Sorting settings default to hardcoded values (e.g., name, asc) and cannot be customized.

Solution: Update block.json to include all attributes:

{
  "attributes": {
    "menuId": { "type": "number", "default": 0 },
    "useCategories": { "type": "boolean", "default": false },
    "categoryCount": { "type": "number", "default": 6 },
    "customItems": { "type": "array", "default": [...] },
    "className": { "type": "string", "default": "tmenu" },
    "hideEmpty": { "type": "boolean", "default": false },
    "useSelectedCategoriesOnly": { "type": "boolean", "default": false },
    "selectedCategories": { "type": "array", "default": [] },
    "categoryOrderBy": { "type": "string", "default": "name" },
    "categoryOrder": { "type": "string", "default": "asc" }
  }
}

Outcome:

  • User settings for all toggles and selections are saved and persist across page refreshes.
  • The render.php file can use these attributes to fetch and display the correct categories, respecting user preferences.
  • The block is more reliable, maintainable, and user-friendly.

Conclusion

Defining attributes in block.json is a fundamental aspect of WordPress Gutenberg block development. It ensures data persistence, validates block content, supports front-end rendering, and enhances the developer experience. Failing to define attributes correctly can lead to lost settings, broken rendering, validation errors, and debugging headaches, as seen in the navigation block example. By following best practices—defining all attributes, using correct types, providing defaults, and testing thoroughly—developers can create robust, user-friendly blocks that work seamlessly in the Gutenberg editor and beyond.

If you’re building a custom block, take the time to audit your block.json file and ensure every attribute used in your code is properly declared. Your users (and future self) will thank you for it.

Transform Your WordPress Site with Custom Plugin Development by Woracious

In today’s digital landscape, having a unique online presence isn’t just beneficial—it’s essential. While WordPress themes provide the foundation for your website’s appearance, plugins are the engine that powers its functionality. At Worracious, we’ve built our reputation on creating exceptional WordPress themes and plugins, but our true passion lies in bringing your specific vision to life through custom plugin development.

Understanding the Power of Custom Plugin Development

WordPress powers over 40% of the internet, and its flexibility is largely due to its extensive plugin ecosystem. However, with over 50,000 plugins available in the WordPress repository, finding one that perfectly matches your unique requirements can be like searching for a needle in a haystack. This is where custom plugin development becomes not just valuable, but transformative for your business.

Custom plugins are tailor-made solutions designed specifically for your website’s needs. Unlike off-the-shelf alternatives, they’re built from the ground up to integrate seamlessly with your existing infrastructure, workflow, and business objectives. Whether you need a complex booking system, a specialized e-commerce feature, or an entirely new functionality that doesn’t exist in the market, custom plugin development is the answer.

Why Choose Custom Plugin Development?

1. Perfect Alignment with Business Goals

Every business is unique, with its own set of challenges, objectives, and workflows. Pre-built plugins often force you to adapt your processes to fit their limitations. Custom plugins, on the other hand, are designed around your specific requirements, ensuring that technology serves your business—not the other way around.

For instance, if you run a specialized service business with unique booking requirements, a generic booking plugin might only meet 70% of your needs. The remaining 30% could involve workarounds, manual processes, or compromises that affect your efficiency and customer experience. A custom plugin eliminates these gaps entirely.

2. Enhanced Performance and Efficiency

Off-the-shelf plugins often come loaded with features you’ll never use, contributing to code bloat and slower website performance. Custom plugins contain only the functionality you need, resulting in cleaner code, faster load times, and better overall performance. This optimization is crucial for user experience and search engine rankings.

Our development approach at Worracious emphasizes efficient, modular code that’s optimized for speed. We understand that every millisecond counts in the digital world, and our custom plugins are built with performance as a top priority.

3. Seamless Integration

One of the biggest challenges with pre-built plugins is compatibility. Different plugins from various developers may conflict with each other or with your theme, leading to errors, security vulnerabilities, or functionality issues. Custom plugins are developed specifically for your environment, ensuring perfect harmony with your existing setup.

We design our custom plugins to work flawlessly with your current theme, other plugins, and any third-party services you use. This integrated approach eliminates compatibility headaches and creates a cohesive digital ecosystem.

4. Scalability and Future-Proofing

Your business isn’t static—it grows and evolves. Custom plugins are built with your future in mind, incorporating scalability from the ground up. As your needs change, your custom plugin can be easily updated and expanded without the constraints typical of pre-built solutions.

At Worracious, we architect our plugins with modular structures that allow for easy additions and modifications. This forward-thinking approach protects your investment and ensures your website can adapt to changing business requirements.

5. Security and Reliability

Security vulnerabilities in popular plugins are often discovered and exploited by hackers. Custom plugins, being unique to your site, don’t present the same widespread targets. Additionally, our development process includes rigorous security measures and best practices to protect your data and your users.

We implement comprehensive security protocols, including data validation, sanitization, and encryption where necessary. Our plugins undergo thorough testing to ensure they meet the highest security standards.

The Worracious Approach to Custom Plugin Development

Discovery and Planning

Every successful custom plugin begins with a thorough understanding of your needs. Our process starts with an in-depth consultation where we dive deep into your business requirements, technical specifications, and long-term goals. We ask questions like:

  • What specific problems are you trying to solve?
  • How do your current workflows function?
  • What are your performance expectations?
  • Who will be using this plugin, and how?
  • What integrations are necessary?
  • What are your scalability requirements?

This discovery phase is crucial for creating a comprehensive project roadmap that aligns with your vision and budget.

Design and Architecture

Once we understand your requirements, our team creates detailed specifications and wireframes. We design the plugin architecture with modularity, efficiency, and maintainability in mind. This phase includes:

  • Database schema design
  • API integration planning
  • User interface mockups
  • Workflow diagrams
  • Technical documentation

We present these designs for your review and feedback, ensuring we’re on the right track before any code is written.

Development and Testing

Our development process follows industry best practices and WordPress coding standards. We use modern development tools and methodologies, including:

  • Version control with Git
  • Continuous integration/continuous deployment (CI/CD)
  • Unit and integration testing
  • Cross-browser and device testing
  • Performance optimization

Throughout development, we maintain transparent communication, providing regular updates and demonstrations of progress. Our agile approach allows for flexibility and adjustments as the project evolves.

Quality Assurance

Before deployment, every custom plugin undergoes rigorous testing:

  • Functionality testing across different scenarios
  • Compatibility testing with various themes and plugins
  • Security vulnerability scanning
  • Performance benchmarking
  • User acceptance testing

We don’t consider a plugin complete until it meets our exacting quality standards and exceeds your expectations.

Deployment and Training

When your custom plugin is ready, we handle the deployment process, ensuring a smooth transition to your live environment. We provide comprehensive documentation and training for your team, covering:

  • Installation and configuration
  • Daily operations and management
  • Troubleshooting common issues
  • Best practices for maintenance

Our goal is to empower your team to confidently use and manage the new functionality.

Ongoing Support and Maintenance

Technology evolves, and so should your plugins. We offer ongoing support and maintenance services to ensure your custom plugin remains secure, compatible, and efficient. This includes:

  • Regular security updates
  • Compatibility updates for new WordPress versions
  • Performance optimization
  • Feature additions and modifications
  • Priority technical support

Types of Custom Plugins We Develop

E-commerce Solutions

From specialized product configurators to custom checkout processes, we develop plugins that enhance your online store’s capabilities. Examples include:

  • Dynamic pricing calculators
  • Custom shipping integrations
  • Advanced inventory management
  • Subscription and recurring payment systems
  • Multi-vendor marketplace functionality

Business Process Automation

Streamline your operations with plugins that automate repetitive tasks:

  • Custom CRM integrations
  • Automated email marketing workflows
  • Document generation and management
  • Employee scheduling systems
  • Project management tools

Content Management Enhancements

Extend WordPress’s content capabilities with specialized plugins:

  • Custom post types and taxonomies
  • Advanced content display options
  • Multi-language content management
  • Content restriction and membership systems
  • Editorial workflow management

Data Integration and APIs

Connect your WordPress site with external services and databases:

  • Third-party API integrations
  • Custom REST API endpoints
  • Data synchronization tools
  • Real-time data displays
  • External database connections

User Experience Enhancements

Improve user engagement with custom functionality:

  • Interactive calculators and tools
  • Gamification elements
  • Personalization engines
  • Advanced search and filtering
  • Custom forms and surveys

Success Stories and Case Studies

Case Study 1: Real Estate Platform Enhancement

A real estate company approached us with a need for a custom property management system. Their requirements included:

  • Integration with MLS databases
  • Advanced property search with custom filters
  • Virtual tour scheduling
  • Automated email notifications
  • Agent performance tracking

We developed a comprehensive plugin that not only met these requirements but also improved their site’s performance by 40% compared to their previous solution using multiple off-the-shelf plugins.

Case Study 2: Educational Institution Portal

An educational institution needed a custom student portal that integrated with their existing systems. The plugin we developed included:

  • Course registration and management
  • Grade tracking and reporting
  • Assignment submission system
  • Parent access portal
  • Integration with their LMS

The result was a unified system that streamlined operations and improved student satisfaction scores by 35%.

Investment and Timeline Considerations

Custom plugin development is an investment in your business’s digital infrastructure. The cost varies based on complexity, features, and integration requirements. Factors that influence pricing include:

  • Scope and complexity of functionality
  • Number of integrations required
  • User interface design requirements
  • Performance and scalability needs
  • Ongoing support and maintenance

We provide detailed quotes after the discovery phase, ensuring transparency and no surprises. Our pricing models include fixed-price projects for well-defined requirements and time-and-materials for more exploratory or evolving projects.

Timeline considerations depend on project complexity but typically follow this pattern:

  • Discovery and planning: 1-2 weeks
  • Design and architecture: 1-2 weeks
  • Development: 4-12 weeks (varies by complexity)
  • Testing and refinement: 1-2 weeks
  • Deployment and training: 1 week

We work with you to establish realistic timelines that balance your urgency with our commitment to quality.

Getting Started with Worracious

Ready to transform your WordPress site with custom plugin development? Here’s how to begin:

  1. Initial Consultation: Contact us for a free consultation where we’ll discuss your needs and explore possibilities.
  2. Project Discovery: We’ll conduct a thorough analysis of your requirements and provide a detailed proposal.
  3. Agreement and Planning: Once approved, we’ll finalize the project scope, timeline, and begin the development process.
  4. Collaborative Development: Throughout the project, we maintain open communication and involve you in key decisions.
  5. Launch and Beyond: After successful deployment, we continue to support your custom plugin with maintenance and updates.

Conclusion

Custom plugin development isn’t just about adding features to your WordPress site—it’s about creating solutions that perfectly align with your business needs and goals. At Worracious, we combine technical expertise with a deep understanding of business processes to deliver plugins that don’t just work, but excel.

Whether you need to automate complex workflows, integrate with external systems, or create entirely new functionality, our custom plugin development services provide the flexibility and power to make it happen. With our proven track record, commitment to quality, and ongoing support, we ensure your investment in custom development pays dividends for years to come.

Don’t let off-the-shelf limitations hold your business back. Contact Worracious today to discuss how custom plugin development can transform your WordPress site into a powerful, tailored solution that drives your business forward. Let’s build something extraordinary together.

Taking Control of WordPress Block Styles: A Developer’s Guide

Have you ever felt frustrated when WordPress’s default block styles don’t quite match your theme’s aesthetic? You’re not alone. Those rounded button edges when you want sharp corners, or that default outline style that clashes with your brand colors – we’ve all been there.

The good news? You have complete control over these styles. Let me show you three powerful ways to bend WordPress block styles to your will.

What Are Block Style Variations?

Before we dive in, let’s clarify what we’re dealing with. WordPress includes pre-designed style variations for many of its blocks. Take the Button block – it comes with two styles out of the box: “Fill” and “Outline”. These are handy, but they might not fit your design vision.

Method 1: The Non-Developer Approach – Using the Site Editor

This is perfect if you’re not comfortable with code or just need a quick fix:

  1. Navigate to your Site Editor
  2. Go to StylesBlocks
  3. Find the block you want to modify (e.g., Buttons)
  4. Select the style variation you want to change
  5. Adjust colors, borders, spacing – whatever you need

Pro tip: Changes made here apply site-wide, saving you from manually updating each instance.

Method 2: The Developer’s Choice – theme.json

For more granular control, let’s get our hands dirty with theme.json. This is where you can really make WordPress blocks sing your tune.

Here’s a real-world example that transforms the outline button style:

{
  "$schema": "https://schemas.wp.org/trunk/theme.json",
  "version": 2,
  "styles": {
    "blocks": {
      "core/button": {
        "variations": {
          "outline": {
            "border": {
              "color": "#2563eb",  // Your brand blue
              "radius": "0",       // Sharp corners
              "style": "solid",
              "width": "3px"       // Bold border
            }
          }
        }
      }
    }
  }
}

This code turns those rounded, thin-bordered outline buttons into sharp-edged, attention-grabbing elements with a bold blue border.

Quick Reference for Common Blocks

  • Image block styles: styles.blocks.core/image
  • Quote block styles: styles.blocks.core/quote
  • List block styles: styles.blocks.core/list

Just replace the block name in your theme.json structure to customize any core block.

Method 3: The Nuclear Option – Removing Styles Entirely

Sometimes you don’t want to modify a style – you want it gone. Since WordPress registers its blocks using JavaScript, you’ll need to fight fire with fire:

wp.domReady( function() {
    // Remove the 'rounded' style from image blocks
    wp.blocks.unregisterBlockStyle( 'core/image', [ 'rounded' ] );
    
    // Remove multiple styles at once
    wp.blocks.unregisterBlockStyle( 'core/button', [ 'outline', 'squared' ] );
});

Add this to your theme’s JavaScript file (properly enqueued, of course) to eliminate unwanted style options from the block editor completely.

Best Practices and Common Pitfalls

Do’s:

  • Test your changes across different screen sizes
  • Keep accessibility in mind – ensure sufficient color contrast
  • Document your customizations for future you (or your team)
  • Use version control to track theme.json changes

Don’ts:

  • Don’t forget that JavaScript changes require proper enqueueing
  • Avoid overly specific selectors that might break with WordPress updates
  • Don’t remove styles that your content creators actively use

Real-World Example: Creating a Cohesive Design System

Let’s say you’re building a corporate theme with specific brand guidelines:

  • Primary color: #1e40af
  • No rounded corners anywhere
  • All interactive elements need 2px borders

Here’s how you’d implement this across all button styles:

{
  "styles": {
    "blocks": {
      "core/button": {
        "border": {
          "radius": "0"
        },
        "variations": {
          "fill": {
            "border": {
              "width": "2px",
              "style": "solid",
              "color": "transparent"
            }
          },
          "outline": {
            "border": {
              "width": "2px",
              "style": "solid", 
              "color": "#1e40af"
            }
          }
        }
      }
    }
  }
}

Tools and Resources

  • WordPress Developer Handbook: Your official guide to block customization
  • Theme.json Validator: Use the built-in schema to catch errors
  • Chrome DevTools: Inspect existing styles to understand what you’re overriding

Wrapping Up

Mastering WordPress block styles isn’t just about making things look pretty – it’s about creating a consistent, branded experience that aligns with your design vision. Whether you choose the visual approach through the Site Editor or dive into theme.json for pixel-perfect control, you now have the tools to make WordPress blocks truly yours.

Remember: Start small, test thoroughly, and always keep your users in mind. Happy styling!


Have questions about customizing WordPress blocks? Found a creative solution to share? Drop a comment below – I’d love to hear about your experiences with block style customization.

Future of WordPress

1. Enhanced Full Site Editing (FSE) and Block-Based Evolution

  • Trend: Full Site Editing, built on the Gutenberg block editor, will become the standard for WordPress site creation. FSE allows users to customize every aspect of a website (headers, footers, templates) using blocks, reducing reliance on coding.
  • Prediction: By 2025, block-based themes will largely replace traditional themes, offering modular, dynamic designs. Expect more block patterns, reusable templates, and intuitive design tools, making website creation accessible to non-developers.
  • Impact: This democratizes web design, enabling small businesses and individuals to build professional sites without technical expertise, while developers benefit from streamlined workflows.

2. AI Integration

  • Trend: Artificial intelligence is already influencing WordPress through plugins for content generation, SEO optimization, and chatbots.
  • Prediction: By 2025, AI will be deeply integrated, offering:
    • Content Creation: AI-driven plugins will suggest topics, headlines, and full articles based on user behavior and trends.
    • SEO: Real-time AI tools will optimize content for search engines, focusing on voice search and long-tail keywords.
    • Design: AI will recommend layouts, color schemes, and personalized user experiences.
    • Automation: AI will handle backend tasks like updates, backups, and security monitoring.
  • Impact: AI will make WordPress more efficient, reducing manual work and enhancing personalization, though it may challenge users to keep up with rapidly evolving tools.
  • Example: Recent posts on X highlight WordPress’s launch of a free AI website builder, indicating early steps toward AI-driven site creation. (Note: This is not conclusive evidence but reflects sentiment.)

3. Headless WordPress and Omnichannel Flexibility

  • Trend: Headless WordPress, where the backend (content management) is decoupled from the frontend (display), is gaining traction. It allows developers to use modern frameworks like React or Vue.js for faster, custom frontends.
  • Prediction: By 2025, headless setups will become more accessible, supported by third-party services and plugins. This will improve site performance, scalability, and integration with apps, IoT devices, and other platforms.
  • Impact: Businesses will deliver consistent experiences across websites, mobile apps, and wearables, but non-technical users may require developer support for headless setups.

4. E-Commerce Growth with WooCommerce

  • Trend: WooCommerce, powering 39% of e-commerce sites, continues to dominate.
  • Prediction: By 2025, WooCommerce will integrate AI for personalized shopping (e.g., product recommendations) and headless e-commerce for faster load times. Enhanced multilingual and currency support will boost global reach.
  • Impact: WordPress will solidify its position as a leading e-commerce platform, competing with Shopify and others, especially for small to medium businesses.

5. Improved Security

  • Trend: As a major target for cyberattacks, WordPress is prioritizing security.
  • Prediction: By 2025, expect:
    • AI-Powered Security: Real-time threat detection and neutralization.
    • Blockchain: Secure data storage and transactions.
    • Zero Trust Architecture: Mandatory authentication for all users/devices.
    • Default 2FA and Automated Updates: Enhanced protection against vulnerabilities.
  • Impact: Stronger security will maintain user trust, though users must adopt best practices like regular updates.

6. Mobile-First and Performance Optimization

  • Trend: With 58% of global web traffic from mobile devices, mobile optimization is critical.
  • Prediction: WordPress will prioritize mobile-first themes, plugins, and designs, alongside performance tools to reduce load times. Sustainable web design (e.g., energy-efficient hosting) will also gain traction.
  • Impact: Improved mobile experiences and faster sites will boost SEO rankings and user engagement.

7. Multilingual Support and Global Expansion

  • Trend: WordPress’s roadmap includes native multilingual support as part of Gutenberg’s final phase, expected by 2024–2025.
  • Prediction: AI-powered translation tools and native multilingual features will make WordPress more accessible globally, increasing its user base in non-English-speaking regions.
  • Impact: Businesses will reach diverse audiences, strengthening WordPress’s global dominance.

8. Community and Open-Source Strength

  • Trend: WordPress’s open-source nature and community of developers, designers, and enthusiasts ensure its resilience. The “Five for the Future” initiative encourages contributions.
  • Prediction: The community will drive innovation, with more contributors improving documentation, plugins, and core features. In-person events like WordCamps will strengthen collaboration.
  • Impact: Community support will keep WordPress adaptable and competitive, unlike proprietary CMS platforms.

9. Shift to JavaScript and APIs

  • Trend: WordPress is moving toward JavaScript-driven interfaces and REST API integration, reducing reliance on PHP.
  • Prediction: By 2025, JavaScript will dominate frontend development, enabling real-time editing (e.g., Google Docs-style collaboration) and custom dashboards.
  • Impact: Developers will need to upskill in JavaScript, but this shift will make WordPress a robust application framework, not just a CMS.

10. Challenges and Competition

  • Challenges:
    • Market Share Fluctuations: Recent data shows slight declines (e.g., 42.9% in June 2022 vs. 43.3% in March), though WordPress remains dominant.
    • Complexity: Features like headless setups and AI may overwhelm non-technical users.
    • Community Drama: Issues like the 2024 WP Engine lawsuit and forks (e.g., by major hosts) could fragment the ecosystem, though their impact is expected to be minimal.
  • Competition: Platforms like Wix and Squarespace offer simpler interfaces, but WordPress’s open-source flexibility and community keep it ahead.
  • Prediction: WordPress will maintain its lead by simplifying user experiences and leveraging its community to innovate.

11. Release Strategy

  • Trend: WordPress announced a shift to one major release per year starting in 2025, with regular maintenance and security updates.
  • Impact: This allows more focus on significant updates (e.g., multilingual support) while ensuring stability.

Critical Perspective

While WordPress’s dominance is likely to continue, its success hinges on balancing innovation with usability. The shift to AI and headless setups risks alienating non-technical users unless paired with intuitive interfaces. Community disputes, like the WP Engine lawsuit, highlight governance challenges, but the open-source model mitigates risks of fragmentation. Competitors may gain ground if WordPress doesn’t address complexity, but its ecosystem’s depth—plugins, themes, and community—remains unmatched. The narrative of WordPress as “king” can overshadow legitimate criticisms, like Gutenberg’s initial flaws, but its iterative improvements show responsiveness to feedback.

Conclusion

By 2025, WordPress will evolve into a more powerful, AI-enhanced, mobile-first, and globally accessible platform, doubling down on its strengths as an open-source CMS and application framework. Full Site Editing, headless setups, and WooCommerce advancements will cater to diverse needs, while security and performance improvements will maintain trust. The community’s passion, as seen in record WordCamp contributor days, ensures WordPress’s longevity. For users, staying updated with plugins, themes, and skills (e.g., JavaScript) will be key to leveraging its potential. WordPress is not just surviving—it’s poised to thrive, potentially for a century, as co-founder Matt Mullenweg envisions.

If you’d like deeper insights into specific aspects (e.g., AI plugins, developer skills, or e-commerce), let me know!

Babel Explained — Day 13 (JavaScript for WordPress)

Babel is a JavaScript compiler that converts modern JavaScript (ES6+) into backward-compatible JavaScript (ES5). This ensures compatibility across a wide range of browsers, including legacy ones like Internet Explorer 11, which is critical for WordPress themes and plugins serving diverse user bases.

Why Babel Matters for WordPress Developers

WordPress powers sites accessed by users on various browsers, from modern Chrome to older systems. When developing custom themes, plugins, or Gutenberg blocks, Babel enables developers to:

  • Write modern JavaScript (e.g., arrow functions, classes, import statements, async/await) for improved productivity and code clarity.
  • Ensure compatibility with older browsers by transpiling modern code into widely supported ES5.

Example

Without Babel (ES6+ code):

const greet = () => console.log('Hello, World!');

Older browsers may fail to parse this.

With Babel (transpiled to ES5):

var greet = function() { console.log('Hello, World!'); };

Compatible with virtually all browsers.

Integrating Babel into a WordPress Workflow

Babel is commonly paired with Webpack in WordPress development, particularly for:

  • Gutenberg block development using @wordpress/scripts.
  • Custom themes or plugins leveraging modern JavaScript.
  • Headless WordPress setups requiring optimized front-end code.

Setup Overview

  1. Install Dependencies:
   npm install --save-dev webpack webpack-cli babel-loader @babel/core @babel/preset-env
  1. Configure Babel (babel.config.js or .babelrc):
   module.exports = {
     presets: [
       [
         '@babel/preset-env',
         {
           targets: {
             browsers: ['> 1%', 'last 2 versions', 'ie >= 11'],
           },
         },
       ],
     ],
   };

The @babel/preset-env preset automatically determines necessary transformations based on your target browsers.

  1. Configure Webpack (webpack.config.js):
   module.exports = {
     module: {
       rules: [
         {
           test: /\.js$/,
           exclude: /node_modules/,
           use: 'babel-loader',
         },
       ],
     },
   };
  1. Write Modern JavaScript:
   import { __ } from '@wordpress/i18n';

   const MyComponent = () => {
     console.log(__('Hello from a Gutenberg block!', 'text-domain'));
   };

Babel ensures this code is transpiled for broad compatibility.

Practical Application: Gutenberg Blocks

The @wordpress/scripts package, commonly used for Gutenberg block development, leverages Babel and Webpack to:

  • Transpile ES6+ and JSX into browser-compatible JavaScript.
  • Bundle assets into a single file (e.g., /build/index.js).
  • Allow developers to enqueue the resulting script in WordPress:
   wp_enqueue_script(
     'my-block',
     plugins_url('build/index.js', __FILE__),
     ['wp-blocks', 'wp-element', 'wp-editor'],
     filemtime(plugin_dir_path(__FILE__) . 'build/index.js')
   );

Key Benefits for WordPress Development

FeatureBenefit
JavaScript TranspilationWrite modern ES6+ code while supporting legacy browsers.
Integration with WebpackStreamline asset bundling for themes, plugins, or blocks.
Used in @wordpress/scriptsSimplifies Gutenberg block development with preconfigured tools.
Customizable ConfigurationTarget specific browsers via .babelrc or babel.config.js.

Add font families to your WordPress theme using theme.json

What is theme.json?

theme.json is a special file used in WordPress block themes to control the design of your site, like colors, spacing, fonts, and more — all without touching CSS or PHP.

What is Typography (Font Family)?

Typography refers to how text looks on your website. A font family is just the name of a group of fonts, like "Arial, sans-serif" or "Roboto".

Where do you add fonts in theme.json?

You add fonts in this section:

"settings": {
  "typography": {
    "fontFamilies": [ ... ]
  }
}

Each font entry looks like this:

{
  "fontFamily": "Arial, sans-serif",
  "slug": "arial-sans",
  "name": "Arial"
}
  • fontFamily: the actual font (like in CSS)
  • slug: a unique ID used in the background
  • name: what shows in the WordPress editor

Block theme vs Classic theme

The WordPress content management system has undergone a significant architectural evolution with the Gutenberg project and Full Site Editing (FSE). This shift marks a transition from traditional “Classic Themes” to modern “Block Themes.” This evolution presents WordPress developers, agencies, and site administrators with a crucial choice: stick with the proven reliability of Classic Themes or embrace the enhanced flexibility and future-oriented architecture of Block Themes.

This analysis dissects the fundamental differences between WordPress Block Themes and Classic Themes across several critical dimensions to help technically knowledgeable WordPress professionals make informed strategic decisions.

WordPress Block Themes and Full Site Editing (FSE)

Block Themes represent a fundamental departure from traditional theme structures, using “blocks” to construct all parts of a website, including headers, footers, content areas, navigation menus, sidebars, and templates. These themes are intrinsically linked to Full Site Editing features progressively introduced into WordPress core.

Full Site Editing is the umbrella term for features enabling users to edit their entire website using the block editor interface. Block Themes are required to unlock FSE capabilities, most significantly the Site Editor. Activating a Block Theme makes the Site Editor available, often replacing traditional interfaces like the Customizer and Widgets screen.

Architecturally, Block Themes differ significantly from their predecessors. Instead of relying on PHP files for HTML rendering, their templates are constructed using HTML files located in dedicated /templates and /parts directories. These HTML files contain structured block markup that WordPress parses to render the site structure. PHP remains available via functions.php, but its role is diminished.

Central to Block Theme architecture is the theme.json file, acting as a “single source of truth” for defining global settings and styles. It controls aspects like layout widths, color palettes, typography scales, spacing presets, available editor features, and default block styles.

The Site Editor is the primary interface for interacting with a Block Theme’s structure and appearance. Accessible via Appearance > Editor, it provides a visual environment for editing templates, template parts, site-wide styles, navigation menus, and pages.

FSE introduces “Theme Blocks” designed to pull in site or post-specific data, replacing traditional PHP template tags. Examples include Site Title, Site Logo, Post Title, Post Content, Navigation, and Query Loop blocks.

Block Themes signify an architectural transition from server-side PHP template execution towards a declarative, component-based model using structured HTML markup and centralized JSON configuration. This democratizes website design, potentially lowering barriers for users without coding expertise to make significant site-wide changes.

Traditional WordPress Themes (Classic Themes)

Classic Themes represent the established method of structuring WordPress site appearance prior to FSE adoption. They are built primarily using PHP files organized according to the WordPress template hierarchy, which dictates which file WordPress uses to render different site views.

The architecture revolves around PHP template files containing a mix of HTML markup and PHP code. The functions.php file acts as a theme’s plugin for essential setup tasks like registering navigation menus, widget areas, enqueuing stylesheets and scripts, and implementing custom functions. Presentation is controlled via CSS stylesheets.

The WordPress Customizer has historically been the primary interface for modifying Classic Theme appearance without editing code. It provides a live preview alongside controls for adjusting theme-defined options. Common Customizer sections include Site Identity, Colors, Background Image, Menus, and Widgets.

Widgets are modular blocks of content or functionality added to predefined “widget areas” within the theme’s layout. These areas are registered by the theme in functions.php and managed via the Widgets screen or Customizer.

Many Classic Themes provide dedicated Theme Options pages offering additional settings and configurations specific to that theme, outside the standardized Customizer interface.

“Hybrid Themes” have emerged as a transitional category. These are essentially Classic Themes incorporating certain Block Theme features, such as using theme.json to enhance styling options for the block editor content area. However, they still fundamentally rely on PHP templates and typically use the Customizer as the main configuration interface.

Classic Themes benefit from a long history and mature ecosystem, with extensive documentation, vast libraries of existing themes and plugins, and widespread familiarity among PHP-proficient developers. While Block Themes represent WordPress’s future direction, the stability and significant investment in Classic Themes ensure their continued relevance, particularly for legacy websites or PHP-centric development teams.

Comparative Analysis: Customization and Control

Scope of Customization

A fundamental divergence between theme types lies in the scope and granularity of customization they afford end-users.

Block Themes provide comprehensive control over virtually every site element through the Site Editor interface. Users can visually manipulate headers, footers, sidebars, navigation menus, and templates defining the layout for different content types. Global styles affecting typography, colors, and spacing can be managed centrally. This extends the editing paradigm previously limited to content areas to the entire site canvas, allowing direct structure modification without coding.

Classic Themes typically offer customization within more constrained boundaries. The primary avenues for user customization are the WordPress Customizer, widget areas, and sometimes theme options panels. While these tools can offer significant flexibility, they generally provide options to tweak existing elements rather than allowing fundamental template restructuring. Modifications beyond the provided options typically require direct code edits or child themes.

This difference reflects a philosophical shift regarding user control. Block Themes democratize site design by making previously developer-exclusive domains accessible through a visual interface. Classic Themes maintain a clearer separation between the theme’s underlying structure and specific user-modifiable settings, providing a more guided experience but limiting the ability to make fundamental structural changes without technical intervention.

Tools and Workflow

The customization tools and workflows differ significantly between theme types.

Block Themes centralize customization within the integrated Site Editor, serving as a hub for editing templates, template parts, styles, navigation, and pages.

Classic Themes utilize a more fragmented set of tools: the Customizer for theme-specific settings, the Widgets Screen for widget arrangement, the Menus Screen for navigation management, and potentially custom Theme Options pages.

Block Themes effectively absorb or replace older tools’ functionality. The Customizer is largely superseded by the Site Editor’s Styles panel, and fixed widget areas are replaced by the flexibility of inserting any block into any template location.

This consolidation represents a significant effort towards a more unified site-building workflow. By bringing template editing, styling, navigation management, and page creation under the Site Editor umbrella, Block Themes provide a more cohesive experience compared to the disjointed process of navigating multiple interfaces in Classic Themes.

Comparative Analysis: Site Building User Experience (UX)

Editing Interface

The site building and editing experience differs markedly between theme types due to their distinct interfaces.

Block Themes offer a highly visual direct manipulation interface through the Site Editor, extending the block-based editing experience to the entire site structure. Users can directly click on elements within a template preview and modify them using familiar block tools. This approach provides a closer WYSIWYG experience for the entire site layout, with strong visual parity between editor and output.

Classic Themes rely on more abstract interfaces. The Customizer presents settings alongside a live preview pane, but users interact with controls that indirectly affect appearance rather than directly manipulating elements. Widget and Menu management occurs in separate, non-visual screens. Content creation is distinctly separate from theme customization tasks.

The core difference is integration and visual directness. Block Themes integrate site structure, style, and content editing within a unified, visually representative environment, reducing the cognitive distance between making changes and seeing effects. Classic Themes maintain separation between content editing and theme customization, often relying on abstract controls across multiple interfaces.

Workflow Efficiency & Learning Curve

Efficiency and learning curves present another contrast area.

Block Themes aim to create a unified workflow by consolidating customization within the Site Editor. However, this introduces concepts like block-based templates, global styles, and block patterns, presenting a steeper initial learning curve, particularly for users familiar with traditional workflows. Once understood, however, tasks like modifying global elements, creating complex layouts, or ensuring design consistency can become more efficient, often without requiring code or external plugins.

Classic Themes benefit from user familiarity. Many long-time WordPress users are comfortable with the Customizer, widget management, and menu screens, making basic customization tasks feel intuitive within theme-defined limits. However, efficiency decreases significantly when customization exceeds built-in options, often requiring PHP/CSS code, child themes, or page builder plugins.

There’s a trade-off between initial ease-of-use and long-term flexibility. Classic Themes offer a gentler start for basic tasks due to familiarity. Block Themes demand greater initial learning investment but potentially unlock higher code-free customization capabilities and streamlined workflows for complex design tasks, reducing reliance on custom code or third-party plugins.

Comparative Analysis: Performance Implications

Website performance critically influences user experience, conversion rates, and search engine rankings. The architectural differences between theme types have significant implications for site speed.

Architectural Impact

The fundamental technologies underpinning each theme type contribute to performance variations.

Block Themes primarily use HTML files with block markup for templates and leverage theme.json for styles and settings. This modern architecture is designed to generate cleaner, more optimized code. By reducing dynamic PHP execution for basic template structures, Block Themes can potentially lower server-side processing load, shifting processing towards parsing structured HTML and applying JSON-defined styles.

Classic Themes depend heavily on PHP for dynamic template rendering. Each page request involves server execution of PHP code to generate HTML output, potentially increasing processing time and database queries, especially in complex themes. Classic themes often load comprehensive CSS stylesheets covering all potential theme features.

The shift from dynamic PHP rendering to a more declarative model based on HTML markup and JSON configuration provides Block Themes with a theoretical performance advantage. WordPress core is actively optimizing template loading mechanisms specifically for Block Themes, reinforcing this potential.

Asset Loading & Dependencies

How themes load assets and manage dependencies significantly impacts performance.

Block Themes incorporate mechanisms for efficient asset loading, including conditional loading where styles are loaded only for blocks actually present on a page. The style management in theme.json helps optimize CSS delivery, reducing redundancy and preventing specificity conflicts. Additionally, Site Editor capabilities can often replace functionality previously requiring third-party plugins, potentially reducing code bloat and external dependencies.

Classic Themes frequently load large, monolithic CSS stylesheets including styling for all components, regardless of page usage. Due to more limited built-in customization options, they commonly rely on additional plugins for desired layouts and functionality, introducing extra code, potential conflicts, and increased page weight.

Block Themes address common performance bottlenecks through optimized loading strategies and reduced plugin dependencies, offering significant potential advantages for Core Web Vitals and overall site speed.

Real-World Performance Variability

While architectural advantages suggest Block Themes should be faster, real-world comparisons present a nuanced picture.

Some analyses indicate Block Themes exhibit improved performance due to leaner architecture and optimized loading. However, highly optimized Classic Themes like GeneratePress, Kadence, or Astra can still achieve excellent loading speeds, sometimes surpassing current Block Themes, especially on mobile.

Performance is multifactorial, influenced by hosting quality, caching strategies, CDN usage, image optimization, plugins, and page content complexity. A poorly coded Block Theme on an unoptimized site can still be slow, while a meticulously optimized Classic Theme remains competitive.

The emerging consensus is that Block Themes provide a more inherently performance-oriented architecture. As FSE technology matures and WordPress core continues introducing performance enhancements targeting the block paradigm, Block Theme performance advantages are likely to become more pronounced and consistent.

Comparative Analysis: Design Consistency

Maintaining consistent visual identity across a website is crucial for branding and user experience. Block and Classic Themes approach this challenge differently.

Achieving Uniformity

Block Themes introduce Global Styles via theme.json as the central mechanism for enforcing design consistency. This file allows defining presets (colors, typography, spacing), default styles for elements and blocks, layout defaults, and feature toggles. By defining these “design tokens” in a structured file, theme.json acts as a powerful engine for maintaining cohesion across both front-end and editor interfaces. Block Themes also support Style Variations, allowing users to switch between predefined visual schemes while maintaining underlying structure.

Classic Themes lack a standardized, core-level configuration file for comprehensive global design rules. Consistency typically relies on well-structured CSS, Customizer settings, Theme Options panels, and developer discipline. While achievable, the fragmented nature of styling controls makes it more challenging to enforce unified design systems, especially across large sites or with multiple content editors.

The introduction of theme.json is a significant Block Theme advantage regarding design consistency. It provides a standardized, centralized mechanism for defining, managing, and enforcing visual identity in ways previously more difficult and less standardized in Classic Theme architecture. This facilitates design system implementation and helps ensure user customizations preserve brand integrity.

Comparative Analysis: Development Approaches

The methodologies, technologies, and required skillsets differ substantially between theme types.

Theme Structure & Technology

Block Themes use a distinct structure and technology stack: HTML files in /templates and /parts containing block markup instead of PHP rendering logic; theme.json controlling global settings, styles, and features; optional functions.php for specific tasks not covered elsewhere; and potentially custom blocks requiring JavaScript/React knowledge.

Classic Themes adhere to traditional WordPress development: PHP template files following the template hierarchy, mixing HTML and PHP; essential functions.php for theme setup, script enqueuing, and WordPress hook interactions; and styling via CSS files (primarily style.css) with interactivity added using JavaScript/jQuery.

This represents a significant paradigm shift in required developer skills. While PHP knowledge remains valuable, Block Theme development emphasizes understanding block architecture, JSON configuration, HTML structure, and potentially modern JavaScript frameworks for extending the block system. Classic Theme development remains PHP-centric, utilizing server-side rendering and established WordPress APIs.

Developer Workflow & Tooling

Day-to-day workflow and tools also diverge between theme types.

Block Theme development incorporates more visual, iterative workflow: developers can leverage the Site Editor to visually assemble templates and parts, adjust styles via Global Styles, and see real-time changes; export these changes into theme files for code refinement; and use tools like Create Block Theme for scaffolding. This visual nature allows designers with limited coding knowledge to participate more directly in theme construction.

Classic Theme development follows a more traditional code-centric workflow: working primarily in a code editor writing PHP for templates, adding logic to functions.php, and crafting CSS; programmatically interacting with WordPress APIs; and applying PHP debugging techniques. This requires solid understanding of PHP, the template hierarchy, and core WordPress development principles.

The integration of the Site Editor into Block Theme development represents a key workflow difference. While code remains essential for robust development in both paradigms, Block Themes allow greater visual construction, potentially accelerating layout prototyping and iteration. Classic Theme development remains fundamentally grounded in writing code according to established WordPress conventions.

The Future Trajectory: WordPress Core Direction

Understanding WordPress core development direction is essential when evaluating long-term theme viability.

Emphasis on Block Themes and FSE

WordPress core development efforts are overwhelmingly concentrated on refining and expanding FSE capabilities and the Block Theme ecosystem. This is not a fleeting trend but a core part of the long-term Gutenberg roadmap.

Recent and planned WordPress releases reveal a consistent pattern: most new features and enhancements target FSE. This includes Site Editor improvements, theme.json capability expansion, new APIs (Block Hooks, Block Bindings, Interactivity), core block refinements, template and pattern management tools, and block-specific performance optimizations.

Furthermore, official default themes bundled with WordPress since version 5.9 are all Block Themes, serving as reference implementations and best practice demonstrations.

Adopting Block Themes is consistently framed as the path toward future-proofing websites and aligning with ongoing platform innovation. While Classic Themes continue to function and receive maintenance, strategic investment and core development resources are clearly directed toward the block-based FSE system.

The Diminishing Role of the Customizer

The rise of FSE directly impacts the traditional Customizer’s relevance. When a Block Theme is active, the Customizer menu item is hidden by default, reappearing only if specific plugins require it.

Core tasks previously handled by the Customizer are now intended to be performed within the Site Editor, primarily through the Styles panel and direct block manipulation.

While not officially deprecated for Classic or Hybrid themes, the Customizer’s functional role is being superseded by the more comprehensive Site Editor. Its default hidden state in the future-facing theme paradigm signals a clear shift away from it as a central customization tool.

Implications for Developers and Site Owners

This clear strategic direction has significant implications for the WordPress ecosystem:

Developers need to invest in learning Block Theme development to remain current and leverage the latest WordPress capabilities. This includes understanding HTML block templates, mastering theme.json, utilizing block patterns, becoming proficient with the Site Editor workflow, and potentially acquiring React skills for custom block development. While Classic Theme skills remain valuable for maintaining existing websites, new projects aiming for longevity will increasingly benefit from or require an FSE approach.

Site Owners face considerations when migrating from Classic to Block Themes. This involves learning the Site Editor and carefully remapping customizations previously handled elsewhere. However, the transition offers substantial long-term benefits: greater code-free design flexibility, potential performance improvements, alignment with future updates, and potentially easier theme switching. For new websites, starting with a Block Theme is strongly recommended.

The entire WordPress ecosystem is gradually adapting to support FSE and Block Themes, partly aimed at addressing market share concerns by keeping the platform competitive and appealing to modern web development practices.

The trajectory is clear: adaptation to the block-based paradigm is becoming increasingly crucial for all WordPress stakeholders. While the transition presents challenges, the core commitment coupled with potential benefits in flexibility, control, performance, and future-readiness makes embracing Block Themes and FSE a strategic imperative for leveraging the platform effectively moving forward.

Block Themes vs. Classic Themes: Key Differences

Primary Technology

  • Block Theme: HTML Templates, Block Markup, theme.json
  • Classic Theme: PHP Templates, Template Hierarchy, functions.php

Editing Interface

  • Block Theme: Site Editor (Visual, Integrated for entire site)
  • Classic Theme: Customizer, Widgets Admin, Menus Admin, Theme Options (Separate Panels)

Customization Scope

  • Block Theme: Entire Site (Header, Footer, Templates, Content, Global Styles)
  • Classic Theme: Predefined Areas & Options via Customizer/Widgets/Options; Code required for structural changes

Core Styling Control

  • Block Theme: Global Styles via theme.json (Centralized, Standardized)
  • Classic Theme: CSS Files, Customizer Settings (Fragmented, Theme-dependent)

Widget Handling

  • Block Theme: Any Block can be placed anywhere within Templates via Site Editor
  • Classic Theme: Dedicated Widget Areas populated via Widgets Admin/Customizer

Performance Potential

  • Block Theme: Generally Higher (Modern Architecture, Optimized Asset Loading, Fewer Plugin Dependencies)
  • Classic Theme: Variable (Highly dependent on theme quality & optimization; Can be fast but prone to bloat)

Development Paradigm

  • Block Theme: Block-centric, HTML/JSON focus, theme.json mastery, React for custom blocks
  • Classic Theme: PHP-centric, Template Hierarchy, Hooks/Filters, functions.php essential

Future Outlook

  • Block Theme: Primary Focus of WordPress Core Development & Innovation
  • Classic Theme: Supported & Maintained, but less focus for new core features

Conclusion & Recommendations

The analysis reveals a clear divergence between WordPress Block Themes and Classic Themes, representing two distinct platform evolution eras. Block Themes offer a paradigm shift towards a unified, visual, and highly flexible site-building experience with strengths in granular control, design consistency through centralized configuration, and architecture designed for better performance. They align with WordPress’s future strategic direction but come with a steeper learning curve.

Classic Themes benefit from decades of development, familiar workflows, vast libraries of existing themes and plugins, and extensive documentation. However, their customization capabilities are often constrained, requiring code or page builders for significant structural changes, and they can be prone to performance issues from monolithic stylesheets and plugin dependencies. While still supported, they are no longer the primary focus of WordPress core innovation.

Recommendations:

For New Website Builds: Strongly recommended to use Block Themes to leverage FSE power, maximize design flexibility, align with modern web standards, gain potential performance advantages, and position for future WordPress updates.

For Existing Classic Theme Sites: Migration decision requires careful evaluation. If the site is stable, meets business needs, and doesn’t require significant redesign, remaining with the Classic or Hybrid theme is viable, though it may diverge from core innovation. If major redesign is planned or greater flexibility desired, migration to a Block Theme is advisable with adequate resources allocated for transition.

For Developers: Investing in Block Theme development skills is crucial for ecosystem relevance. This includes mastering Site Editor, theme.json, HTML block templates, and potentially React for custom blocks. Classic Theme skills retain value for legacy sites, but future opportunities will increasingly favor FSE paradigm proficiency.

Regarding Performance: While Block Themes offer architectural advantages, performance isn’t guaranteed by theme type alone. Prioritize well-coded, lightweight themes and implement web performance best practices regardless of choice. However, Block Themes’ inherent optimizations provide a stronger foundation for excellent performance.

Block Themes and Full Site Editing represent a transformative step for WordPress, modernizing the platform, empowering users with sophisticated design tools, and establishing a more flexible, consistent, and potentially performant foundation. While transition involves learning curves and adaptation challenges, the clear WordPress core commitment and tangible block-based paradigm benefits suggest embracing this evolution is a strategic necessity for those seeking to fully leverage WordPress capabilities now and in the future.

After gutenberg, are shortcodes still relevant in WordPress?

The WordPress landscape shifted dramatically with the introduction of the Gutenberg block editor. It promised a more visual, intuitive way to build posts and pages. But this left many users wondering: What about shortcodes? Are they obsolete now?

If you’ve relied on those handy [bracketed_codes] to add forms, galleries, or other special features, you might be concerned about their future. Do you need to replace them all? Are they holding your site back?

Let’s dive deep and clarify the role of WordPress shortcodes in the age of Gutenberg blocks in 2025.

First, What Exactly Are WordPress Shortcodes? (A Quick Refresher)

For years, shortcodes were the go-to method for embedding dynamic content or complex functionality directly into your WordPress posts, pages, and widgets without writing long chunks of code. Think of them as shortcuts – simple tags like or [contact_form] that WordPress processes to display something more complex on the front end. They were powerful tools offered by themes and plugins.

Enter Gutenberg: The Block Editor Revolution

Gutenberg replaced the classic WordPress editor with a block-based system. Instead of one big text area, you build content using individual blocks for paragraphs, headings, images, buttons, columns, and much more. This offers a significantly more visual (WYSIWYG – What You See Is What You Get) and structured approach to content creation. Many functionalities that previously required shortcodes now have dedicated blocks.

So, Are Shortcodes Dead? Not Quite!

Here’s the good news: Shortcodes are NOT dead or deprecated in WordPress.

WordPress prioritizes backward compatibility. The core Shortcode API remains functional. Shortcodes you implemented years ago should still work even with the latest WordPress versions using the block editor.

How Do Shortcodes Work with the Gutenberg Editor?

While blocks are the native language of Gutenberg, you can still easily use your existing shortcodes:

  1. The Dedicated Shortcode Block: Gutenberg includes a specific block named “Shortcode”. Simply add this block to your page or post and paste your shortcode (e.g., [your_plugin_shortcode attribute="value"]) into the provided field. This is the cleanest, recommended method.
  2. Pasting into Paragraph Blocks: Often, simply pasting a shortcode directly into a standard Paragraph block will work. WordPress is usually smart enough to recognize and render it correctly on the front end.
  3. The Classic Block: If you have older content originally built with the Classic Editor, it might open within a “Classic” block in Gutenberg. Your shortcodes within this block will continue to function as before.

Why Gutenberg Blocks Are Often the Better Choice Now

While shortcodes still work, blocks represent the evolution and generally offer several advantages:

  • Visual Editing: The biggest win! Blocks provide a live preview or a close representation of the final output directly within the editor. No more guessing what a shortcode will look like until you hit “Preview.”
  • User-Friendliness: Blocks offer intuitive controls (buttons, sliders, color pickers) instead of requiring you to look up and type specific shortcode attributes.
  • Better Integration: Blocks are designed to work seamlessly together, allowing for more complex layouts and consistent styling within the native WordPress environment.
  • Performance: While not always a dramatic difference, blocks can sometimes be more performant as they don’t rely on the same parsing process as shortcodes.
  • Developer Focus: The future of WordPress development is heavily focused on blocks. Expect new features and integrations to primarily leverage the block system.

When Do Shortcodes Still Make Sense?

Despite the advantages of blocks, shortcodes retain their relevance in several key scenarios:

  • Legacy Content: If your site has years of content built with shortcodes, there’s often no urgent need to convert everything to blocks, especially if it works fine.
  • Plugin Functionality: Many plugins, particularly older or very complex ones, still rely heavily on shortcodes to deliver their features. Some offer both blocks and shortcodes for flexibility.
  • Specific Embed Needs: Occasionally, a shortcode might be the only way provided by a plugin or service to embed specific third-party content or achieve a very particular function not yet covered by a standard block.
  • Theme Independence (Plugin Shortcodes): Shortcodes provided by plugins are generally portable. If you switch themes, your plugin and its shortcodes will likely continue to work.

A Word of Caution: Theme-Based Shortcodes

Be very wary of shortcodes that come built into your theme. While convenient initially, they create theme lock-in. If you ever decide to switch themes, those theme-specific shortcodes will stop working, potentially leaving broken code snippets scattered across your site. It’s generally better to get functionality like sliders, buttons, or grids from dedicated plugins that provide blocks or plugin-based shortcodes.

The Future Outlook: Blocks Leading the Way

The trend is undeniable: blocks are the future of WordPress content creation. While shortcodes will likely be supported for a long time due to backward compatibility, expect to see less emphasis on them for new development. More plugins will offer blocks as the primary (or only) way to integrate their features. Some platforms, like the popular Divi builder, are even planning future versions that move away from their own shortcode systems entirely.

Conclusion: Shortcodes Live On, But Embrace the Blocks!

So, are shortcodes still relevant after Gutenberg? Yes, absolutely. They are supported, functional, and necessary for many existing sites and plugin functionalities. You can continue using them, especially via the Shortcode block.

However, Gutenberg blocks are the modern, preferred standard. They offer a superior user experience, better integration, and represent the future direction of WordPress. Where a block alternative exists for a function you need, it’s generally advisable to use the block for new content.

Don’t panic about your existing shortcodes, but embrace the power and convenience of blocks as you move forward with your WordPress site!

The Decade-Long Journey of WordPress Ticket #30465 Finally Coming to Fruition in 2025

It all started with a simple concern back in November 2014. WordPress developer Sergej Mueller raised what seemed like an obvious issue: users had absolutely no way of knowing if a plugin they relied on had been removed from the official repository—even when removed for serious security concerns. His ticket, officially labeled #30465, was initially closed with no resolution. Fast forward a decade, and here we are in early 2025, watching this long-dormant issue finally gaining the momentum it deserves.

A Ticket Born Ahead of Its Time

When Sergej first opened ticket #30465, the WordPress landscape looked quite different. Security wasn’t the front-and-center concern it is today. The ticket received minimal attention before being quickly marked as “won’t fix” by WordPress lead developer Andrew Nacin. His reasoning? Plugin removals happened for various reasons, not just security issues.

For years afterward, the ticket collected digital dust with only occasional attempts to revive it. Someone would stumble across it, leave a hopeful comment, and then silence would fall again. This cycle repeated annually—sometimes even less frequently—until March 2023, when everything changed.

The Reopening That Changed Everything

Enter Joost de Valk, a heavyweight in the WordPress community, who officially reopened the ticket in 2023. His argument was compelling and straightforward: WordPress has a responsibility to tell users whether a plugin is maintained or not. What made his case particularly strong was pointing out that WordPress.org was already showing this information on the platform itself (after a 60-day waiting period)—just not in the WordPress backend where users actually manage their plugins.

This reignited interest sparked a wave of enthusiasm across the thread. The ticket became so popular that Oliver Sild, CEO and co-founder of Patchstack, featured it prominently in his WordCamp Europe 2023 presentation. He even included a custom QR code encouraging attendees to leave comments on the thread—a clever setup for what would become a much larger security initiative the following year.

When Theory Became Alarming Reality

If Oliver’s mention of ticket #30465 at WCEU was subtle foreshadowing, then October 2024 delivered the shocking climax that demanded attention. During Cyber Security Month, Patchstack launched a Bug Bounty event that uncovered horrifying vulnerabilities throughout the WordPress ecosystem.

The numbers were staggering: 1,571 valid security vulnerability reports discovered in a single month. These weren’t minor issues either—they included:

  • 73 cases where attackers could upload malicious files directly to sites
  • 67 SQL injection vulnerabilities putting entire databases at risk
  • 58 pathways for attackers to escalate their privileges
  • 17 remote code execution vulnerabilities (the digital equivalent of leaving your front door wide open with a “free stuff” sign)

Even more concerning was what happened after these discoveries. Close to 1,000 plugins were temporarily closed from the repository. When Patchstack attempted to contact plugin developers about fixing these critical issues, an alarming 74% were completely unreachable—their contact forms broken, emails bouncing, or domains expired.

The most chilling revelation? Many vulnerable plugins had been sitting in the repository for 6-11 years, with some dating back an astonishing 17 years. And yes, there are still active websites depending on these plugins today, completely unaware of the risks they’re taking.

From Conversation to Code

Activity on the ticket thread was already gaining momentum when Oliver added his findings, providing undeniable evidence of the problem’s scope. While WordPress lead developer Dion Hulse (@dd32) initially pushed back on some points, he ultimately took decisive action by creating an experimental plugin implementing the long-awaited feature.

The implementation strikes a perfect balance—when a plugin has been closed in the WordPress.org repository, users see a clear but measured notification. No panic-inducing red alerts, just straightforward information about the plugin’s status. It’s elegantly simple yet addresses the decade-old concern.

As the WordPress community collectively whispers, “Someone find Sergej and tell him we made it!” we’re not quite at the finish line yet. The feature hasn’t been incorporated into WordPress core, but we’re standing at the threshold of resolution.

What’s Next for WordPress Plugin Security Awareness

As of early 2025, this much-needed feature is being considered for inclusion in WordPress 6.8, according to Dion Hulse. However, several important details still need resolution:

  • Finalizing notification timing (there’s ongoing discussion about possibly extending the current 60-day window)
  • Standardizing documentation for closure reasons
  • Finding the right balance between user awareness and developer support burden
  • Determining the optimal placement—site health screen versus directly on the plugin management page

The Evolution of WordPress Security Consciousness

The journey of ticket #30465 perfectly encapsulates how WordPress security priorities have evolved over the past decade. What was once dismissed as an edge case has become increasingly critical as the ecosystem has expanded and security challenges have multiplied exponentially.

Recent research from WebARX Security shows that plugin vulnerabilities account for approximately 68% of all WordPress site compromises, with outdated or abandoned plugins representing the most common attack vector. This statistic underscores why features like those proposed in ticket #30465 are no longer optional but essential for the platform’s continued success.

According to a 2024 State of WordPress Security report, the average WordPress site uses 23 plugins, and approximately 12% of those plugins have been abandoned by their developers. Without proper notifications, that means millions of sites are running potentially vulnerable code without any awareness of the risks.

Real-World Impact

For WordPress site owners, the implementation of this feature would mean:

  • Immediate awareness when a critical plugin has been removed from the repository
  • The ability to make informed decisions about plugin usage and replacement
  • Reduced security risk through enhanced transparency
  • Lower likelihood of site compromise due to abandoned plugins

For the broader WordPress ecosystem, resolving ticket #30465 represents a maturation of security practices that acknowledges the responsibility platform maintainers have toward their users.

While it’s taken ten years to get here, the experimental plugin suggests we’re finally approaching a solution that balances security awareness with an unobtrusive user experience. With over 455 million websites running WordPress worldwide, this feature can’t come soon enough.

If you want to follow along with the development, check out the experimental plugin on GitHub, or keep an eye on ticket #30465. We might be witnessing a rare moment where a decade-long conversation transforms into a tangible feature that improves security for WordPress users everywhere.

What do you think about this upcoming feature? Would knowing that a plugin has been closed from the repository impact how you manage your WordPress site? Share your thoughts in the comments below!