If you’ve worked with WordPress for a while, you’ve probably used both get_posts() and WP_Query to retrieve posts. They seem similar, right? But there are subtle differences that can affect your site’s performance and flexibility. Let’s break down when to use each with examples you can actually use in your next project.

Understanding WP_Query

WP_Query is the foundation of how WordPress fetches posts from the database. It’s a powerful class that gives you full control over the query process.

You can filter posts by category, author, meta fields, date, custom taxonomy, or just about anything. This is what WordPress itself uses to build archive pages, search results, and the main blog loop.

Here’s a simple example:

$args = [
    'post_type'      => 'post',
    'posts_per_page' => 5,
    'category_name'  => 'wordpress-tips'
];

$query = new WP_Query($args);

if ($query->have_posts()) {
    while ($query->have_posts()) {
        $query->the_post();
        echo '

' . get_the_title() . '

';
} wp_reset_postdata(); }
PHP

This gives you a custom query loop. You can place it anywhere — a template, a custom page, or even inside a widget.

Use WP_Query when:

Basically, if you need control, WP_Query is the right choice.

Understanding get_posts()

Now, get_posts() is a simplified wrapper around WP_Query.
It runs the same underlying class but with some defaults that make it lightweight and easy to use.

Here’s how you might use it:

$args = [
    'numberposts' => 5,
    'post_type'   => 'post',
    'orderby'     => 'date',
    'order'       => 'DESC'
];

$recent_posts = get_posts($args);

foreach ($recent_posts as $post) {
    setup_postdata($post);
    echo '

' . get_the_title() . '

';
} wp_reset_postdata();
PHP

The main difference here is that get_posts() returns an array of post objects — it doesn’t handle pagination or global query variables.

Use get_posts() when:

In short, get_posts() is great when you want a lightweight, read-only post fetch without extra overhead.

Performance Considerations

When performance matters, get_posts() is often faster because it doesn’t load extra query features like pagination or conditional tags.

However, if you need total control over your query, such as ordering by meta value or filtering by multiple custom fields, go with WP_Query.

Remember: get_posts() internally calls WP_Query, but with 'suppress_filters' => true by default — meaning filters like pre_get_posts won’t run.

So, if you’re expecting filters or hooks to modify your query, use WP_Query directly.

Quick Comparison

Featureget_posts()WP_Query
Pagination❌ No✅ Yes
Filters Applied❌ Suppressed✅ Runs normally
Performance⚡ Faster for simple queries🧠 More flexible but heavier
Return TypeArray of post objectsFull WP_Query object
Best Use CaseSmall custom fetchCustom loops and templates

Final Thoughts

Both get_posts() and WP_Query are powerful in their own ways.

If you just need a handful of posts, use get_posts() — it’s clean, fast, and easy.
If you’re building a full custom loop or archive, go for WP_Query — it gives you all the tools and hooks WordPress offers.

In the end, it’s not about which one is better, but which one fits the job better.

Ever wondered why some WordPress plugins run flawlessly while others crash your entire site? The secret lies in understanding the WordPress plugin folder structure. Whether you’re a seasoned developer or just starting your WordPress journey, mastering this fundamental concept will transform how you build, organize, and maintain plugins.

Today, over 59,000 plugins exist in the WordPress repository, yet many developers struggle with proper file organization. According to recent WordPress development surveys, 73% of plugin-related errors stem from poor folder structure and file organization. This comprehensive guide will unlock the mysteries of WordPress plugin architecture, helping you create robust, scalable plugins that follow industry best practices.

By the end of this article, you’ll confidently navigate plugin directories, understand core file relationships, and implement professional-grade folder structures that make your plugins stand out in the competitive WordPress ecosystem.

Understanding the WordPress Plugin Directory Structure

The Foundation: Where Plugins Live

WordPress stores all plugins in the /wp-content/plugins/ directory. This location serves as the central hub for all plugin installations, whether they’re downloaded from the repository, uploaded manually, or developed from scratch.

Here’s how the basic structure looks:

wp-content/
└── plugins/
    ├── plugin-name/
       ├── plugin-name.php (main plugin file)
       ├── readme.txt
       ├── assets/
       ├── includes/
       └── languages/
Bash

The Main Plugin File: Your Plugin’s Heart

Every WordPress plugin starts with a main PHP file that contains the plugin header. This file typically shares the same name as your plugin folder and serves as the entry point for WordPress to recognize and activate your plugin.

The plugin header must include essential information:

Essential Folders and Files Explained

Core Directory Structure

Assets Folder: Houses all static resources including CSS stylesheets, JavaScript files, images, and fonts. Organizing assets properly ensures faster loading times and easier maintenance.

Includes Folder: Contains PHP classes, functions, and core logic files. This separation keeps your main plugin file clean and promotes better code organization.

Admin Folder: Dedicated to administrative functionality, dashboard pages, and backend-specific features. This separation enhances security and user experience.

Public Folder: Stores frontend-specific files, shortcodes, and user-facing functionality. This distinction helps maintain clean separation between admin and public features.

Languages Folder: Contains translation files (.po, .pot, .mo) for internationalization support. With WordPress powering 43% of all websites globally, multilingual support is crucial.

Advanced Folder Organization

Professional plugin developers often implement additional organizational layers:

Templates Folder: Stores reusable template files and view components, promoting code reusability and consistency.

Libraries Folder: Contains third-party libraries and dependencies, keeping external code separate from your custom development.

Tests Folder: Houses unit tests and automated testing files, essential for maintaining code quality and preventing regression bugs.

Best Practices for Plugin Folder Structure

Naming Conventions That Matter

Consistency in naming conventions significantly impacts plugin maintainability. Use lowercase letters with hyphens for folder names, matching your main plugin file. For example, if your plugin is called “Amazing SEO Tools,” your folder should be amazing-seo-tools.

File Organization Strategies

Implement logical grouping by functionality rather than file type. Instead of putting all CSS files in one folder, organize them by feature or component. This approach scales better as your plugin grows.

Modular Approach: Break large plugins into smaller, focused modules. Each module should have its own subfolder with related assets, templates, and logic files.

Version Control Considerations: Structure your folders to work seamlessly with Git and other version control systems. Avoid deeply nested structures that complicate repository management.

Common Plugin Structure Patterns

The Simple Plugin Structure

For basic plugins with minimal functionality:

simple-plugin/
├── simple-plugin.php
├── readme.txt
├── assets/
   ├── css/
   └── js/
└── includes/
    └── functions.php
Bash

The Complex Plugin Structure

For feature-rich plugins requiring extensive organization:

complex-plugin/
├── complex-plugin.php
├── uninstall.php
├── readme.txt
├── admin/
   ├── class-admin.php
   ├── partials/
   └── assets/
├── public/
   ├── class-public.php
   ├── partials/
   └── assets/
├── includes/
   ├── class-core.php
   ├── class-loader.php
   └── class-activator.php
└── languages/
Bash

The OOP-Based Structure

Object-oriented plugins benefit from class-based organization:

oop-plugin/
├── oop-plugin.php
├── classes/
   ├── Core/
   ├── Admin/
   ├── Frontend/
   └── Utils/
├── templates/
├── assets/
└── vendor/
Bash

Security Considerations in Folder Structure

Protecting Sensitive Files

Never store sensitive configuration files or credentials in publicly accessible directories. Use the includes folder or create custom directories above the web root for sensitive data.

Index Files: Add index.php files to every folder to prevent directory browsing. These files should either be empty or contain a simple redirect to prevent unauthorized access.

File Permissions: Implement proper file permissions (644 for files, 755 for directories) to maintain security without breaking functionality.

Performance Optimization Through Structure

Efficient File Loading

Organize files to minimize HTTP requests and optimize loading sequences. Group related CSS and JavaScript files together, and consider implementing file concatenation for production environments.

Lazy Loading: Structure your plugin to support lazy loading of non-critical components. This approach improves initial page load times and enhances user experience.

Caching Considerations: Design your folder structure to work effectively with WordPress caching plugins and CDN services.

Troubleshooting Common Structure Issues

Plugin Activation Problems

When plugins fail to activate, the issue often lies in incorrect folder structure or missing files. Ensure your main plugin file contains the proper header information and exists in the correct location.

File Path Errors

Use WordPress-specific functions like plugin_dir_path() and plugin_dir_url() instead of hardcoded paths. This practice ensures compatibility across different WordPress installations and server configurations.

Namespace Conflicts

Implement proper namespacing and prefixing to avoid conflicts with other plugins. Use unique prefixes for all functions, classes, and database tables.

Future-Proofing Your Plugin Structure

Scalability Planning

Design your folder structure with growth in mind. Start with a simple organization but ensure it can accommodate additional features without major restructuring.

API Integration: Plan for future API integrations by creating dedicated folders for external service connections and data handling.

Multi-site Compatibility: Structure your plugin to work seamlessly with WordPress multisite installations, considering network-wide settings and site-specific configurations.

Conclusion

Mastering WordPress plugin folder structure is fundamental to creating professional, maintainable, and scalable plugins. The organizational principles covered in this guide will help you build plugins that not only function correctly but also stand the test of time.

Remember that good structure is an investment in your plugin’s future. While it might seem like extra work initially, proper organization pays dividends in maintenance, debugging, and feature expansion. Start implementing these practices in your next plugin project, and you’ll quickly see the benefits of clean, well-organized code.

Take action today by reviewing your existing plugins and implementing the structural improvements discussed here. Your future self – and your plugin users – will thank you for the effort you invest in proper organization.

WordPress continues to dominate the web, now powering 43.4% of all websites as of September 2025. With plugin submissions growing by 87% in 2025 and over 65,000 plugins available in the repository, the competition for plugin developers has intensified significantly.

Creating a successful WordPress plugin requires more than basic coding skills. It demands adherence to strict development standards, security protocols, and user experience principles. This comprehensive guide outlines 18 essential best practices that will help you build secure, scalable, and market-ready WordPress plugins that stand out in today’s competitive landscape.

Understanding the WordPress Plugin Ecosystem in 2025

The WordPress ecosystem has experienced unprecedented growth, with 34,342,409 live sites currently using WordPress. This massive user base presents both tremendous opportunities and significant responsibilities for plugin developers.

The WordPress.org review team maintains rigorous standards to ensure plugin quality and security. Understanding these requirements before development begins can save countless hours of revision and resubmission. The review process now incorporates automated security scanning, code quality analysis, and compliance verification against the latest WordPress coding standards.

Key Development Stages Overview

Before diving into best practices, it’s essential to understand the structured approach to WordPress plugin development:

  1. Market Research and Validation: Identify genuine user needs and market gaps
  2. Strategic Planning: Define unique value propositions and core features
  3. Technical Architecture: Design scalable, maintainable code structures
  4. Security Implementation: Integrate security measures from the ground up
  5. Testing and Quality Assurance: Comprehensive testing across environments
  6. Documentation and Compliance: Prepare for WordPress.org submission
  7. Launch and Post-Launch Support: Deploy and maintain your plugin

18 Essential WordPress Plugin Development Best Practices

1. Conduct Thorough Market Research and Competitive Analysis

Before writing a single line of code, invest significant time in market research. Analyze existing plugins in your category, identify feature gaps, and understand user pain points through forums, reviews, and support tickets.

Create user personas and map their journey to understand how your plugin will fit into their workflow. This research phase should inform every subsequent development decision, from feature prioritization to user interface design.

2. Establish a Comprehensive Development Strategy

Develop a clear roadmap that outlines your plugin’s unique selling proposition, target audience, feature set, and long-term vision. Your strategy should address:

3. Adhere Strictly to WordPress Coding Standards

WordPress maintains comprehensive coding standards for PHP, JavaScript, CSS, and HTML. These standards ensure code consistency, readability, and maintainability across the global WordPress community.

Key areas of focus include:

Use automated tools like PHP_CodeSniffer with WordPress rules to validate your code continuously during development.

4. Implement Robust Namespacing and Avoid Conflicts

With thousands of plugins potentially installed on a single WordPress site, namespace conflicts pose significant risks. Implement comprehensive prefixing strategies:

For Functions and Variables:

// Good: Prefixed function name
function my_awesome_plugin_process_data() { }

// Good: Prefixed variable
$my_awesome_plugin_settings = array();

// Bad: Generic naming
function process_data() { }
$settings = array();
PHP

For Classes:

// Good: Namespaced class
namespace My_Awesome_Plugin;
class Data_Processor { }

// Good: Prefixed class name
class My_Awesome_Plugin_Data_Processor { }
PHP

For Database Tables and Options:

// Good: Prefixed database operations
$table_name = $wpdb->prefix . 'my_awesome_plugin_data';
update_option('my_awesome_plugin_settings', $settings);
PHP

5. Prioritize Security at Every Development Stage

Security should be integrated into every aspect of your plugin development, not added as an afterthought. Modern WordPress security follows OWASP Top 10 compliance standards and requires comprehensive input validation, output sanitization, and access control.

Essential Security Measures:

Advanced Security Implementation:

// Comprehensive nonce verification
if (!wp_verify_nonce($_POST['my_awesome_plugin_nonce'], 'my_awesome_plugin_action')) {
    wp_die(__('Security check failed', 'my-awesome-plugin'));
}

// Capability verification
if (!current_user_can('manage_options')) {
    wp_die(__('Insufficient permissions', 'my-awesome-plugin'));
}

// Sanitized input processing
$user_input = sanitize_text_field($_POST['user_data']);
$processed_data = $wpdb->prepare(
    "INSERT INTO {$table_name} (data) VALUES (%s)",
    $user_input
);
PHP

6. Utilize WordPress Nonces Effectively

Nonces (Numbers Used Once) provide crucial protection against cross-site request forgery (CSRF) attacks. Implement nonces for all administrative actions, form submissions, and AJAX requests.

Comprehensive Nonce Implementation:

// Generate nonce for forms
wp_nonce_field('my_plugin_action', 'my_plugin_nonce');

// Verify nonce on submission
if (!wp_verify_nonce($_POST['my_plugin_nonce'], 'my_plugin_action')) {
    return new WP_Error('invalid_nonce', 'Security verification failed');
}

// AJAX nonce handling
wp_localize_script('my-plugin-ajax', 'my_plugin_ajax', array(
    'ajax_url' => admin_url('admin-ajax.php'),
    'nonce' => wp_create_nonce('my_plugin_ajax_nonce')
));
PHP

7. Leverage Modern Boilerplate and Framework Solutions

Starting with a proven boilerplate accelerates development while ensuring adherence to best practices. The WordPress Plugin Boilerplate provides a solid foundation with:

Consider modern alternatives like:

8. Enable and Utilize WP_DEBUG During Development

WordPress debugging capabilities have expanded significantly, offering granular control over error reporting and logging. Configure comprehensive debugging in your development environment:

// wp-config.php development settings
define('WP_DEBUG', true);
define('WP_DEBUG_LOG', true);
define('WP_DEBUG_DISPLAY', false);
define('SCRIPT_DEBUG', true);
define('SAVEQUERIES', true);

// Advanced debugging options
define('WP_DEBUG_LOG_ERRORS', true);
define('WP_DEBUG_LOG_QUERIES', true);
define('WP_DEBUG_LOG_DEPRECATED', true);
PHP

Implement custom logging for complex debugging scenarios:

// Custom debug logging
if (defined('WP_DEBUG') && WP_DEBUG) {
    error_log('My Plugin Debug: ' . print_r($debug_data, true));
}

// Conditional debugging based on user role
if (current_user_can('administrator') && WP_DEBUG) {
    echo '';
}
PHP

9. Maintain Organized and Scalable File Structure

A well-organized file structure enhances maintainability, facilitates team collaboration, and simplifies debugging. Implement a comprehensive directory structure:

/my-awesome-plugin/
├── my-awesome-plugin.php (Main plugin file)
├── uninstall.php (Uninstallation cleanup)
├── readme.txt (WordPress.org documentation)
├── README.md (Development documentation)
├── /admin/ (Administrative interface)
   ├── /css/
   ├── /js/
   ├── /partials/
   └── class-admin.php
├── /public/ (Public-facing functionality)
   ├── /css/
   ├── /js/
   ├── /partials/
   └── class-public.php
├── /includes/ (Core plugin logic)
   ├── class-activator.php
   ├── class-deactivator.php
   ├── class-loader.php
   └── class-i18n.php
├── /languages/ (Translation files)
├── /assets/ (Images, icons, media)
├── /tests/ (Unit and integration tests)
├── /vendor/ (Composer dependencies)
└── composer.json (Dependency management)
Bash

10. Create Comprehensive Documentation with readme.txt

The readme.txt file serves as your plugin’s first impression and primary documentation. WordPress.org requires specific formatting and comprehensive information:

Essential readme.txt Sections:

=== My Awesome Plugin ===
Contributors: yourusername
Tags: functionality, feature, solution
Requires at least: 6.0
Tested up to: 6.4
Requires PHP: 8.0
Stable tag: 1.0.0
License: GPLv2 or later
License URI: https://www.gnu.org/licenses/gpl-2.0.html

Brief, compelling description under 150 characters.

== Description ==
Comprehensive plugin description with features, benefits, and use cases.

== Installation ==
Step-by-step installation and setup instructions.

== Frequently Asked Questions ==
Common questions and detailed answers.

== Screenshots ==
1. Screenshot description
2. Another screenshot description

== Changelog ==
= 1.0.0 =
* Initial release with core functionality
Bash

11. Implement Comprehensive Internationalization (i18n)

With WordPress powering websites globally, internationalization is crucial for plugin success. Implement thorough i18n support from the beginning:

Text Domain Setup:

// Load text domain in main plugin file
load_plugin_textdomain('my-awesome-plugin', false, dirname(plugin_basename(__FILE__)) . '/languages');

// Use consistent text domain throughout
__('Hello World', 'my-awesome-plugin');
_e('Display directly', 'my-awesome-plugin');
printf(__('Welcome %s', 'my-awesome-plugin'), $user_name);
PHP

Translation Best Practices:

12. Optimize Performance and Resource Management

Modern WordPress sites demand optimal performance. Implement efficient resource management strategies:

Conditional Loading:

// Load admin scripts only in admin area
if (is_admin()) {
    wp_enqueue_script('my-plugin-admin', plugin_dir_url(__FILE__) . 'admin/js/admin.js');
}

// Page-specific resource loading
if (is_singular() && has_shortcode(get_post()->post_content, 'my_shortcode')) {
    wp_enqueue_style('my-plugin-shortcode', plugin_dir_url(__FILE__) . 'public/css/shortcode.css');
}
PHP

Database Query Optimization:

// Use transients for expensive operations
$cached_data = get_transient('my_plugin_cached_data');
if (false === $cached_data) {
    $cached_data = expensive_database_operation();
    set_transient('my_plugin_cached_data', $cached_data, HOUR_IN_SECONDS);
}

// Implement proper database indexing
$wpdb->query("CREATE INDEX idx_my_plugin_field ON {$table_name} (field_name)");
PHP

13. Implement Comprehensive Testing Strategies

Modern plugin development requires systematic testing approaches. Implement multiple testing layers:

Unit Testing with PHPUnit:

// Basic unit test structure
class MyPluginTest extends WP_UnitTestCase {
    public function test_plugin_activation() {
        $this->assertTrue(is_plugin_active('my-awesome-plugin/my-awesome-plugin.php'));
    }
    
    public function test_data_processing() {
        $input = 'test data';
        $result = my_plugin_process_data($input);
        $this->assertEquals('expected output', $result);
    }
}
PHP

Integration Testing:

Security Testing:

14. Establish Proper Version Control and Release Management

Implement systematic version control and release processes:

Semantic Versioning:

Git Workflow Best Practices:

# Feature branch workflow
git checkout -b feature/new-functionality
git commit -m "feat: add advanced data processing"
git checkout main
git merge feature/new-functionality
git tag -a v1.2.0 -m "Release version 1.2.0"
Bash

15. Implement Advanced Security Measures

Beyond basic sanitization, implement enterprise-grade security measures:

Content Security Policy (CSP):

// Implement CSP headers for admin pages
function my_plugin_add_csp_header() {
    if (is_admin()) {
        header("Content-Security-Policy: default-src 'self'; script-src 'self' 'unsafe-inline'");
    }
}
add_action('admin_init', 'my_plugin_add_csp_header');
PHP

Rate Limiting:

// Implement API rate limiting
function my_plugin_check_rate_limit($user_id) {
    $key = 'my_plugin_rate_limit_' . $user_id;
    $count = get_transient($key);
    
    if ($count >= 100) { // 100 requests per hour
        return new WP_Error('rate_limit_exceeded', 'Too many requests');
    }
    
    set_transient($key, ($count + 1), HOUR_IN_SECONDS);
    return true;
}
PHP

Data Encryption:

// Encrypt sensitive data before storage
function my_plugin_encrypt_data($data) {
    if (function_exists('openssl_encrypt')) {
        $key = wp_salt('auth');
        return openssl_encrypt($data, 'AES-256-CBC', $key, 0, substr($key, 0, 16));
    }
    return $data; // Fallback for environments without OpenSSL
}
PHP

16. Create Intuitive User Interfaces and Experiences

Modern WordPress users expect intuitive, responsive interfaces that integrate seamlessly with the WordPress admin experience:

Admin Interface Best Practices:

// Follow WordPress admin UI patterns
function my_plugin_admin_page() {
    ?>
    <div class="wrap">
        <h1>php echo esc_html(get_admin_page_title()); ?>h1>
        
        <div class="notice notice-info">
            <p>php _e('Welcome to My Awesome Plugin settings!', 'my-awesome-plugin'); ?>p>
        div>
        
        <form method="post" action="options.php">
            php
            settings_fields('my_plugin_settings');
            do_settings_sections('my_plugin_settings');
            submit_button();
            ?>
        form>
    div>
    php
}
PHP

Responsive Design Implementation:

17. Plan for Scalability and Future Growth

Design your plugin architecture to accommodate future feature additions and increased load:

Modular Architecture:

// Implement plugin modules for scalability
abstract class My_Plugin_Module {
    abstract public function init();
    abstract public function get_dependencies();
}

class My_Plugin_Email_Module extends My_Plugin_Module {
    public function init() {
        add_action('my_plugin_send_notification', array($this, 'send_email'));
    }
    
    public function get_dependencies() {
        return array('wp_mail');
    }
}

// Module manager
class My_Plugin_Module_Manager {
    private $modules = array();
    
    public function register_module($module) {
        if ($this->check_dependencies($module)) {
            $this->modules[] = $module;
            $module->init();
        }
    }
}
PHP

Database Schema Versioning:

// Implement database migration system
function my_plugin_check_database_version() {
    $current_version = get_option('my_plugin_db_version', '1.0');
    $latest_version = '1.2';
    
    if (version_compare($current_version, $latest_version, '<')) {
        my_plugin_run_database_migrations($current_version, $latest_version);
        update_option('my_plugin_db_version', $latest_version);
    }
}
PHP

18. Establish Comprehensive Documentation and Support Systems

Professional plugin development requires thorough documentation and support infrastructure:

Developer Documentation:

User Documentation:

Support Infrastructure:

Advanced Security Considerations for 2025

With WordPress websites experiencing attacks every 32 minutes in 2025, security implementation has become more critical than ever. Modern plugins must address sophisticated attack vectors and implement defense-in-depth strategies.

OWASP Compliance and Security Testing

Implement comprehensive security testing using industry-standard methodologies. OWASP Top 10 compliance should be verified through automated scanning and manual testing procedures.

Essential Security Testing Tools:

Data Privacy and Compliance

Modern plugins must address global privacy regulations including GDPR, CCPA, and other regional requirements:

// GDPR compliance implementation
function my_plugin_privacy_policy_content() {
    return array(
        'plugin_name' => 'My Awesome Plugin',
        'policy_text' => __('This plugin collects user data for functionality purposes...', 'my-awesome-plugin'),
        'suggested_text' => __('Data processing description for privacy policy', 'my-awesome-plugin')
    );
}
add_filter('wp_privacy_policy_content', 'my_plugin_privacy_policy_content');

// Data export functionality
function my_plugin_export_user_data($email_address) {
    $data_to_export = array();
    // Implement user data collection and formatting
    return array('data' => $data_to_export, 'done' => true);
}
add_filter('wp_privacy_personal_data_exporters', 'my_plugin_register_exporter');
PHP

Testing and Quality Assurance Best Practices

Comprehensive testing ensures plugin reliability across diverse WordPress environments. Implement systematic testing approaches covering functionality, security, performance, and compatibility.

Automated Testing Implementation

Modern WordPress development benefits significantly from automated testing pipelines:

# GitHub Actions workflow for automated testing
name: WordPress Plugin Tests
on: [push, pull_request]

jobs:
  test:
    runs-on: ubuntu-latest
    strategy:
      matrix:
        php-version: [7.4, 8.0, 8.1, 8.2]
        wordpress-version: [6.0, 6.1, 6.2, 6.3, 6.4]
    
    steps:
    - uses: actions/checkout@v2
    - name: Setup PHP
      uses: shivammathur/setup-php@v2
      with:
        php-version: ${{ matrix.php-version }}
    - name: Run WordPress Tests
      run: |
        composer install
        ./vendor/bin/phpunit
YAML

Performance Testing and Optimization

Performance optimization has become crucial with modern WordPress hosting environments emphasizing speed and efficiency:

Performance Monitoring Implementation:

// Performance monitoring for critical functions
function my_plugin_monitor_performance($function_name, $callback) {
    if (defined('WP_DEBUG_PERFORMANCE') && WP_DEBUG_PERFORMANCE) {
        $start_time = microtime(true);
        $result = call_user_func($callback);
        $execution_time = microtime(true) - $start_time;
        
        error_log("Performance: {$function_name} executed in {$execution_time} seconds");
        return $result;
    }
    return call_user_func($callback);
}

// Usage example
$processed_data = my_plugin_monitor_performance('data_processing', function() {
    return expensive_data_processing_function();
});
PHP

Plugin Submission and WordPress.org Guidelines

The WordPress.org plugin directory maintains strict submission standards that continue to evolve with the platform. Understanding these requirements ensures successful plugin approval and ongoing compliance.

Pre-Submission Checklist

Before submitting your plugin to WordPress.org, verify compliance with all current requirements:

Technical Requirements:

Security Requirements:

Code Quality Requirements:

Post-Approval Maintenance

Plugin approval marks the beginning of ongoing maintenance responsibilities:

Update Management:

Common Development Pitfalls and How to Avoid Them

Learning from common mistakes accelerates professional plugin development and reduces revision cycles during the approval process.

Critical Mistakes to Avoid

Security Oversights:

Performance Issues:

User Experience Problems:

Future-Proofing Your WordPress Plugin

The WordPress ecosystem continues evolving rapidly, with new features, security requirements, and development practices emerging regularly. Building future-ready plugins requires anticipating these changes and implementing adaptable architectures.

Emerging WordPress Trends for 2025 and Beyond

Block Editor Integration: Modern plugins increasingly require Gutenberg block integration for content management functionality. Plan for block development even if not immediately necessary.

REST API Utilization: WordPress’s REST API powers modern headless implementations and mobile applications. Design your plugin with API-first architecture when possible.

Performance Optimization: With Core Web Vitals becoming increasingly important for SEO, plugin performance optimization will become mandatory rather than optional.

Security Enhancement: Security requirements continue tightening, with automated vulnerability scanning and real-time threat detection becoming standard practices.

Conclusion

WordPress plugin development in 2025 demands comprehensive understanding of security, performance, user experience, and compliance requirements. The 18 best practices outlined in this guide provide a roadmap for creating professional, secure, and successful plugins that serve the global WordPress community effectively.

Success in the competitive plugin marketplace requires commitment to ongoing learning, user feedback integration, and continuous improvement. By following these established best practices and staying current with WordPress development trends, you’ll create plugins that not only pass the WordPress.org review process but also deliver exceptional value to users worldwide.

Remember that plugin development is an iterative process. Start with a solid foundation using these best practices, gather user feedback, and continuously refine your approach based on real-world usage and evolving WordPress standards.

The WordPress ecosystem’s continued growth presents tremendous opportunities for developers who commit to excellence in their craft. With proper planning, implementation, and maintenance, your plugin can become an essential tool for thousands of websites while contributing meaningfully to the WordPress community’s success.

WordPress development demands precision, speed, and creativity. ChatGPT, an AI powerhouse, can transform how you code, debug, and optimize WordPress sites. This article delivers 25 meticulously crafted ChatGPT prompts to supercharge your workflow, tackle complex challenges, and boost site performance. Designed for developers of all levels, these prompts are actionable, SEO-optimized, and proven to save time-up to 30% on coding tasks, per a 2024 JetBrains report. Dive in to revolutionize your WordPress projects with cutting-edge AI assistance. Act now to stay ahead!

25 ChatGPT Prompts for WordPress Developers

  1. “Write a complete PHP function for a WordPress plugin that creates a custom post type for ‘Events’ with support for categories, tags, and a custom meta box for event dates, ensuring compatibility with WordPress 6.5.”
  2. “Generate a fully responsive CSS stylesheet for a WordPress blog page, including a 3-column grid layout for posts, mobile-first design, and hover effects, optimized for the Twenty Twenty-Four theme.”
  3. “Debug this WordPress PHP code causing a ‘Call to undefined function’ error and provide a corrected version with detailed explanations: [insert code snippet].”
  4. “Create a JavaScript function to implement lazy-loading for images in a WordPress site, including error handling and compatibility with WooCommerce product galleries.”
  5. “Write a WordPress hook to automatically add rel=’nofollow’ to all external links in post content, excluding links to mydomain.com, with comments explaining each step.”
  6. “Generate a custom WordPress shortcode to display a dynamic FAQ accordion, pulling data from a custom post type, with collapsible sections styled in CSS.”
  7. “Provide a detailed SQL query to optimize a WordPress database by removing orphaned post meta and unused transients, including safety checks to prevent data loss.”
  8. “Write a WordPress REST API endpoint to fetch the 10 most recent posts from a custom post type ‘Portfolio’ in JSON format, including featured image URLs and custom fields.”
  9. “Suggest a comprehensive .htaccess configuration for a WordPress site to enable browser caching, GZIP compression, and redirect non-www to www, with comments for clarity.”
  10. “Create a WordPress child theme for the Astra theme, including a functions.php file to enqueue custom styles and a template for a full-width page layout.”
  11. “Write a PHP script to bulk update all WordPress posts in the ‘News’ category to ‘Featured’ status, including error handling and logging for failed updates.”
  12. “Generate a CSS animation for a WordPress hero section with a fading background image slideshow, optimized for performance and cross-browser compatibility.”
  13. “Provide a WordPress cron job script to automatically delete spam comments older than 30 days, including a fallback for manual execution.”
  14. “Write a custom WordPress widget to display a user’s recent posts with thumbnails, limited to 5 posts, styled with Tailwind CSS classes.”
  15. “Generate a step-by-step PHP code snippet to integrate Google Analytics 4 tracking into a WordPress site without using plugins, including GDPR-compliant consent.”
  16. “Write a WordPress function to limit login attempts to 3 per user within 15 minutes, with a lockout period and admin notifications for failed attempts.”
  17. “Write a shortcode to embed a responsive YouTube video in a WordPress post with custom play button styling and lazy-loading support.”
  18. “Suggest 10 WordPress security practices to prevent XSS attacks, including code examples for sanitizing user inputs in forms and comments.”
  19. “Generate a .gitignore file tailored for a WordPress project, excluding uploads, cache, and sensitive configuration files, with comments explaining each rule.”
  20. “Write a WordPress hook to add custom meta tags for social sharing (Open Graph and Twitter Cards) to the header of specific post types.”
  21. “Create a custom WordPress dashboard widget to display real-time site stats, including page views and active users, using the WP REST API.”
  22. “Provide a regex pattern to validate email and phone number inputs in a WordPress contact form, with JavaScript for client-side validation.”
  23. “Write a PHP script to migrate all WordPress posts, comments, and media from one domain to another, including database updates and URL replacements.”
  24. “Generate a WooCommerce-compatible function to display a product upsell section on single product pages, pulling related products by category.”
  25. “Suggest optimizations for reducing WordPress Time to First Byte (TTFB), including server-side tweaks, caching strategies, and database query improvements.”

Frequently Asked Questions About ChatGPT Prompts for WordPress Developers

1. How Can ChatGPT Improve WordPress Development Efficiency?

ChatGPT generates code, debugs errors, and suggests optimizations, cutting development time by up to 30%, according to JetBrains’ 2024 report. Specific prompts ensure tailored solutions for WordPress tasks.

2. Can ChatGPT Help with WordPress SEO?

Yes, prompts like “Write an SEO-optimized meta description for a WordPress blog post” create content that boosts rankings, with 68% of online searches starting on search engines, per BrightEdge 2025.

3. Is ChatGPT Reliable for Debugging WordPress Code?

ChatGPT excels at analyzing error logs and code snippets. Prompts like “Debug this WordPress error: [insert log]” provide accurate fixes, reducing troubleshooting time significantly.

4. Can ChatGPT Assist with Plugin Development?

Absolutely. Prompts like “Generate boilerplate code for a WordPress plugin” scaffold plugins quickly, streamlining custom development for specific functionalities.

5. How Do I Craft Effective ChatGPT Prompts?

Include WordPress version, theme, plugins, and code snippets. Be specific, request step-by-step guides, and iterate prompts for precision.

Conclusion

These 25 ChatGPT prompts empower WordPress developers to code smarter, debug faster, and optimize effectively. From crafting custom plugins to boosting SEO, these prompts address real-world challenges with precision. With 62% of developers using AI tools for coding efficiency (Stack Overflow, 2024), now is the time to harness ChatGPT’s potential. Implement these prompts today to elevate your WordPress projects and outpace the competition. Don’t wait—transform your development process now!

Is your WordPress site running slower than it should? A slow website can kill user experience, lower your SEO rankings, and crush conversion rates. But here’s the good news: with a few expert tips, you can dramatically improve your site speed today.

In this blog, we’ll break down exactly how to make your WordPress site lightning-fast, backed by proven techniques, practical steps, and expert insights.

Why WordPress Speed Matters More Than Ever

Let’s face it: no one likes waiting for a slow site to load. According to Google, 53% of mobile users abandon a site that takes more than 3 seconds to load. Page speed is a direct ranking factor, and it’s essential for user engagement, SEO, and conversions.

Faster websites don’t just perform better — they convert more, retain visitors longer, and rank higher on search engines.

So, how do you go from sluggish to speedy? Let’s explore the top expert strategies to supercharge your WordPress performance.

1. Choose a Lightweight WordPress Theme

Your theme can make or break your site speed. Many feature-rich themes come bloated with scripts, styles, and page builders that slow everything down.

Expert Tip: Use a lightweight theme like Astra, GeneratePress, or Kadence. These themes are built for speed and compatibility with most popular plugins.

Bonus Tip: Use the theme’s performance settings to disable unused features.

2. Use a Speed-Optimized Hosting Provider

Your hosting is the foundation of your WordPress site’s performance. Cheap shared hosting often leads to high latency and slow load times.

Go for managed WordPress hosting like Kinsta, SiteGround, or WP Engine. They offer faster servers, built-in caching, and better uptime.

Stat to Remember: Sites on premium managed hosting load 2x faster on average than those on shared hosting.

3. Install a Caching Plugin

Caching creates a static version of your site that loads faster for users. It significantly reduces server processing time.

Top caching plugins:

Quick Win: Enable browser caching, GZIP compression, and preload cache for best results.

4. Optimize Your Images the Smart Way

Large image files are among the biggest culprits of slow sites. Always compress and resize your images before uploading.

Use plugins like:

Pro Tip: Use modern formats like WebP — they’re 25-35% smaller without losing quality.

5. Minify CSS, JavaScript, and HTML

Every byte counts. Minification removes unnecessary code characters (like spaces and line breaks) to reduce file size and speed up load time.

Tools you can use:

And remember — fewer plugins mean fewer scripts to load. Audit your plugin list and remove what’s not essential.

6. Use a Content Delivery Network (CDN)

A CDN stores copies of your website across multiple servers globally. It serves content to users from the server closest to them, reducing latency.

Top CDN options:

Did You Know? Sites using CDNs load 30-60% faster, especially for global traffic.

7. Clean Up Your WordPress Database

Your WordPress database collects unnecessary data like post revisions, spam comments, and trashed items. Over time, this bloats the database and slows down queries.

Use WP-Optimize or Advanced Database Cleaner to:

Set up a weekly cleaning schedule for long-term results.

Frequently Asked Questions

Q: What’s a good page speed score for WordPress?

A: Aim for a Google PageSpeed Insights score of 90+. However, focus more on actual load time — under 2 seconds is ideal.

Q: Does a slow website affect SEO?

A: Absolutely. Google uses page speed as a ranking factor, especially for mobile-first indexing.

Q: How can I test my current speed?

A: Use tools like:

These tools show you load time, bottlenecks, and actionable fixes.

Conclusion

Speed isn’t just a feature — it’s a foundation for success. A fast WordPress site keeps users happy, boosts your SEO, and increases your revenue.

With these expert strategies, you can transform your sluggish site into a performance powerhouse.

Remember, every second counts. Take action today, implement these tips, and watch your website fly.

Get Your Free WordPress Site Audit – Instantly Identify SEO & Speed Issues

ওয়ার্ডপ্রেসের গুটেনবার্গ এডিটর ২০১৮ সালে ওয়ার্ডপ্রেস ৫.০ আপডেটের মাধ্যমে আনুষ্ঠানিকভাবে যুক্ত হয়। এটি ওয়ার্ডপ্রেসে কন্টেন্ট তৈরি এবং ডিজাইন করার এক নতুন দিগন্ত খুলে দেয়। গুটেনবার্গ ব্লক এডিটর ব্যবহার করে, আপনি পোস্ট এবং পেজের বিভিন্ন এলিমেন্টগুলোকে ব্লক হিসেবে সাজিয়ে কাস্টম লেআউট তৈরি করতে পারেন। তবে, একজন ডেভেলপার হিসেবে গুটেনবার্গ ব্লক ডেভেলপমেন্ট শুরুর আগে কিছু বিষয় মাথায় রাখা জরুরি।

১. গুটেনবার্গ ব্লক কীভাবে কাজ করে?

গুটেনবার্গ এডিটর একটি ব্লক-ভিত্তিক এডিটর, যেখানে প্রতিটি কন্টেন্ট এলিমেন্ট (যেমন টেক্সট, ছবি, ভিডিও) একটি ব্লক হিসেবে সংরক্ষিত হয়। প্রতিটি ব্লক সম্পূর্ণ আলাদা এবং স্বতন্ত্রভাবে কাজ করে, যা ড্র্যাগ-এন্ড-ড্রপ পদ্ধতিতে পেজ বা পোস্টে সাজানো যায়।

ডেভেলপারদের জন্য গুটেনবার্গ ব্লক ডেভেলপমেন্ট মূলত React.js এর উপর ভিত্তি করে। ওয়ার্ডপ্রেস নিজস্ব @wordpress প্যাকেজগুলোর মাধ্যমে React, JSX, এবং ESNext ফিচারগুলোকে সমর্থন করে, যা ডেভেলপারদের ব্লক তৈরির প্রক্রিয়া সহজ করে তোলে।

২. প্রয়োজনীয় টুলস এবং প্লাগইন

গুটেনবার্গ ব্লক ডেভেলপমেন্ট শুরু করার জন্য কিছু নির্দিষ্ট টুলস এবং প্লাগইনের প্রয়োজন হবে। এর মধ্যে অন্যতম হল:

৩. গুটেনবার্গ ব্লকের কাঠামো

গুটেনবার্গ ব্লক মূলত তিনটি অংশে বিভক্ত:

৪. React.js এর জ্ঞান

গুটেনবার্গ ব্লক ডেভেলপমেন্টের একটি গুরুত্বপূর্ণ অংশ হল React.js এর উপর দক্ষতা অর্জন করা। ওয়ার্ডপ্রেস ব্লক ডেভেলপমেন্টের সম্পূর্ণ প্রক্রিয়াটি React.js ফ্রেমওয়ার্কের উপর ভিত্তি করে তৈরি। JSX এবং React কম্পোনেন্টের মাধ্যমে ব্লক তৈরি ও ম্যানেজ করা হয়। তাই যারা নতুন ডেভেলপার, তাদের React.js শিখতে হবে।

৫. ESNext এবং JSX এর ব্যবহার

ESNext ওয়ার্ডপ্রেস ব্লক ডেভেলপমেন্টে JavaScript এর সর্বাধুনিক সংস্করণ ব্যবহার করা হয়। এই সংস্করণটি ডেভেলপারদের জন্য নতুন ফিচার যেমন const, let, অ্যারো ফাংশন, মডিউল ইমপোর্ট এক্সপোর্ট ইত্যাদি নিয়ে আসে। একইসঙ্গে JSX (JavaScript XML) ব্যবহার করে ব্লকের টেমপ্লেট তৈরি করা হয়। এটি মূলত HTML এর মতো দেখতে হলেও, এর পেছনে রয়েছে JavaScript এর শক্তি।

৬. WordPress Coding Standard অনুসরণ করা

ওয়ার্ডপ্রেসের জন্য ব্লক ডেভেলপমেন্ট করতে গেলে ওয়ার্ডপ্রেস কোডিং স্ট্যান্ডার্ড মেনে চলা অত্যন্ত গুরুত্বপূর্ণ। এর মধ্যে HTML, CSS, এবং JavaScript এর স্ট্যান্ডার্ড প্রাকটিসগুলো অন্তর্ভুক্ত রয়েছে। ব্লক ডেভেলপ করার সময় wp-scripts lint এর মাধ্যমে কোডিং স্টাইল চেক করা উচিত।

৭. গুটেনবার্গ ব্লক ডেভেলপমেন্টের সুবিধা

গুটেনবার্গ ব্লক ডেভেলপমেন্টের মাধ্যমে ব্যবহারকারীদের জন্য কাস্টমাইজড কন্টেন্ট তৈরি করা আরও সহজ হয়ে গেছে। গুটেনবার্গ ব্লকগুলোর প্রধান সুবিধাগুলো হল:

৮. ডেভেলপমেন্ট পরিবেশ প্রস্তুত করা

ওয়ার্ডপ্রেস ব্লক ডেভেলপমেন্টের জন্য একটি ভালো ডেভেলপমেন্ট পরিবেশ প্রস্তুত করা গুরুত্বপূর্ণ। এর জন্য আপনার প্রয়োজন হবে:

৯. প্রয়োজনীয় ডকুমেন্টেশন এবং কমিউনিটি সাপোর্ট

গুটেনবার্গ ব্লক ডেভেলপমেন্টের সময় ওয়ার্ডপ্রেসের ডকুমেন্টেশন অত্যন্ত সহায়ক। ওয়ার্ডপ্রেসের নিজস্ব ডকুমেন্টেশনে ব্লক ডেভেলপমেন্টের জন্য প্রয়োজনীয় সকল তথ্য রয়েছে। এছাড়াও ওয়ার্ডপ্রেসের ফোরাম এবং Stack Overflow এ প্রয়োজনীয় সাপোর্ট পাওয়া যায়।

১০. সিকিউরিটি এবং অপ্টিমাইজেশন

ব্লক ডেভেলপমেন্টের সময় সিকিউরিটি এবং পারফরম্যান্স অপ্টিমাইজেশন গুরুত্বপূর্ণ। সঠিকভাবে ডেটা ভ্যালিডেশন এবং সেনিটাইজেশন করা উচিত যাতে ব্লক ইনজেকশন বা অন্য কোনো ধরনের নিরাপত্তা ঝুঁকি না থাকে। এছাড়াও ব্লকের পারফরম্যান্স অপ্টিমাইজ করার জন্য JavaScript এবং CSS মিনিফিকেশন এবং কন্ডিশনাল লোডিং প্রাকটিসগুলো অনুসরণ করতে হবে।

উপসংহার

ওয়ার্ডপ্রেস গুটেনবার্গ ব্লক ডেভেলপমেন্ট শুরু করার আগে উপরের বিষয়গুলো সম্পর্কে পরিষ্কার ধারণা থাকা জরুরি। সঠিকভাবে ব্লক তৈরি করলে এটি ব্যবহারকারীদের জন্য ওয়েবসাইট ব্যবস্থাপনা আরও সহজ করে তুলবে।

সম্ভাব্য প্রশ্ন এবং উত্তর

প্রশ্ন ১: গুটেনবার্গ ব্লক ডেভেলপমেন্ট শুরু করার জন্য কোন টুলসগুলো প্রয়োজন?
উত্তর: Node.js, npm, এবং WordPress Scripts প্রয়োজন হবে। এগুলো দিয়ে প্রয়োজনীয় প্যাকেজ ইনস্টল এবং প্রজেক্ট ম্যানেজ করা হয়।

প্রশ্ন ২: ওয়ার্ডপ্রেস ব্লক তৈরি করতে কোন ভাষা প্রয়োজন?
উত্তর: ওয়ার্ডপ্রেস ব্লক তৈরি করতে JavaScript (ESNext), JSX, এবং React.js এর জ্ঞান প্রয়োজন।

প্রশ্ন ৩: ব্লক কীভাবে রেজিস্টার করতে হয়?
উত্তর: registerBlockType ফাংশন ব্যবহার করে ব্লক রেজিস্টার করতে হয়।

প্রশ্ন ৪: গুটেনবার্গ ব্লক কীভাবে কাস্টমাইজ করা যায়?
উত্তর: ব্লকের attributes এবং edit/save functions এর মাধ্যমে ব্লক কাস্টমাইজ করা যায়।

প্রশ্ন ৫: গুটেনবার্গ ব্লক তৈরি করতে কীভাবে নিরাপত্তা নিশ্চিত করা যায়?
উত্তর: সঠিকভাবে ডেটা ভ্যালিডেশন এবং সেনিটাইজেশন করে নিরাপত্তা নিশ্চিত করা যায়।

Introduction

In the world of PHP and WordPress development, writing clean, efficient, and maintainable code is crucial. One powerful technique that can significantly improve your code quality is the “return early” pattern. This approach not only enhances readability but also optimizes performance and reduces complexity. In this article, we’ll dive deep into the “return early” concept, exploring its benefits and providing practical examples for PHP and WordPress developers.

What is “Return Early” and Why Should You Care?

The “return early” pattern is a coding technique where you check for certain conditions at the beginning of a function and return immediately if those conditions are met. This approach helps to:

  1. Reduce nesting and improve code readability
  2. Minimize the cognitive load on developers
  3. Optimize performance by avoiding unnecessary computations
  4. Simplify error handling and edge case management

Let’s explore how you can leverage this technique in your PHP and WordPress projects.

7 Powerful “Return Early” Techniques for PHP and WordPress

1. Guard Clauses: Your First Line of Defense

Guard clauses are simple conditional statements at the beginning of a function that return early if certain conditions are met. They act as a protective barrier, filtering out invalid inputs or edge cases before proceeding with the main logic.

function processOrder($orderId) {
    if (!is_numeric($orderId)) {
        return false;
    }

    if ($orderId <= 0) {
        return false;
    }

    // Main order processing logic here
}

2. Null Checks: Avoid the Dreaded Null Pointer Exception

Early null checks can prevent unexpected errors and simplify your code structure:

function getUserName($user) {
    if (null === $user) {
        return 'Guest';
    }

    return $user->getName();
}

3. Permission Checks: Secure Your WordPress Functions

In WordPress, it’s crucial to check user permissions early:

function custom_admin_action() {
    if (!current_user_can('manage_options')) {
        wp_die('You do not have sufficient permissions to access this page.');
    }

    // Admin action logic here
}

4. Validation in WordPress Hook Callbacks

When working with WordPress hooks, validate inputs early:

add_action('wp_ajax_custom_action', 'handle_custom_action');

function handle_custom_action() {
    if (!isset($_POST['nonce']) || !wp_verify_nonce($_POST['nonce'], 'custom_action_nonce')) {
        wp_send_json_error('Invalid nonce');
    }

    if (!isset($_POST['data']) || empty($_POST['data'])) {
        wp_send_json_error('Missing data');
    }

    // Process the action
    $result = process_custom_action($_POST['data']);
    wp_send_json_success($result);
}

5. Early Returns in Loops

When searching for a specific item in an array, return as soon as you find it:

function findPost($posts, $targetId) {
    foreach ($posts as $post) {
        if ($post->ID === $targetId) {
            return $post;
        }
    }

    return null;
}

6. Simplify Complex Conditions

Instead of nesting multiple conditions, use early returns to simplify your logic:

function canUserEditPost($userId, $postId) {
    $post = get_post($postId);

    if (!$post) {
        return false;
    }

    if (user_can($userId, 'edit_others_posts')) {
        return true;
    }

    if ($post->post_author === $userId) {
        return true;
    }

    return false;
}

7. Optimize WordPress Shortcodes

Apply the “return early” pattern in your shortcode callbacks:

function custom_button_shortcode($atts) {
    $atts = shortcode_atts([
        'url' => '',
        'text' => 'Click me',
    ], $atts, 'custom_button');

    if (empty($atts['url'])) {
        return '';
    }

    return sprintf('%s', esc_url($atts['url']), esc_html($atts['text']));
}
add_shortcode('custom_button', 'custom_button_shortcode');

Conclusion

Embracing the “return early” pattern in your PHP and WordPress projects can lead to cleaner, more efficient, and easier-to-maintain code. By implementing guard clauses, performing early validation, and simplifying complex conditions, you’ll create more robust and readable functions.

Remember, the key is to strike a balance. Use “return early” where it makes sense, but don’t force it into every situation. As you practice this technique, you’ll develop an intuition for when and where it’s most effective.

Start incorporating these “return early” techniques into your coding practices today, and watch your code quality soar. Your future self (and your team members) will thank you for writing more maintainable and efficient PHP and WordPress code.