WordPress Development Complete Course

Go from PHP basics to building, securing and scaling real WordPress sites.

  • Intermediate
  • 35 lessons
  • 16 hours

Start the course

WordPress runs a large share of the web, and most of the work behind serious WordPress sites is development, not configuration. This course teaches WordPress the way professional developers use it: as a PHP application with a clear request lifecycle, a hook system you can extend, and APIs for content, data, security and caching.

Across the lessons you build a custom content site in a plugin: an events listing with its own post type, taxonomies for event types and speakers, date and price fields, custom queries, REST endpoints that a JavaScript frontend can call, and caching so it stays fast under load. Each lesson adds one piece and ends with code you can run on a local site.

The later lessons cover what production work needs: WP-CLI, debugging, performance profiling, hardening, Multisite, background jobs, headless setups and safe deployments.

Keep a local WordPress site running for the whole course and build the examples into one plugin. By the end you will have a working reference project of your own.

Curriculum

  1. 1 WordPress foundations

    How WordPress fits together, a local development setup, the file structure, the request lifecycle and where code belongs.

    1. WordPress for developers: how it fits together 6 min
    2. Setting up local WordPress development 6 min
    3. WordPress file structure and wp-config.php 7 min
    4. How WordPress loads a page 7 min
    5. Themes versus plugins: where code belongs 6 min
  2. 2 Hooks, templates and data

    Actions and filters, the Loop and template tags, the database tables, and custom hooks of your own.

    1. Actions and filters: introduction to hooks 7 min
    2. The Loop and template tags 8 min
    3. Posts, meta and the WordPress database 9 min
    4. Hook priority, arguments and custom hooks 8 min
  3. 3 Content types and queries

    Model content with custom post types and taxonomies, then query it with WP_Query, meta and tax queries and pre_get_posts.

    1. Custom post types 8 min
    2. Custom taxonomies 8 min
    3. WP_Query in depth 9 min
    4. Meta queries and tax queries 10 min
    5. Changing the main query with pre_get_posts 8 min
  4. 4 Assets and the REST API

    Load scripts and styles properly, read data from the REST API, and register your own endpoints.

    1. Enqueuing scripts and styles 9 min
    2. The WordPress REST API: reading data 7 min
    3. Custom REST API endpoints 13 min
  5. 5 Security and data APIs

    Roles and capabilities, sanitising and escaping, nonces, prepared database queries, options and transients.

    1. Users, roles and capabilities 9 min
    2. Sanitising, validating and escaping 11 min
    3. Nonces and CSRF protection in WordPress 9 min
    4. The database API: $wpdb and prepared queries 9 min
    5. Options and transients 9 min
  6. 6 Tooling, performance and hardening

    WP-CLI, internationalisation, object and page caching, performance profiling and hardening a site.

    1. WP-CLI for developers 10 min
    2. Internationalisation: translating themes and plugins 8 min
    3. Object caching and persistent caches 9 min
    4. Page caching, CDNs and cache invalidation 10 min
    5. WordPress performance: queries, autoload and profiling 9 min
    6. Hardening a WordPress site 8 min
  7. 7 Advanced WordPress and production

    Multisite, background jobs, headless WordPress, debugging, scaling, contributing to core and safe deployments.

    1. WordPress Multisite 9 min
    2. WP-Cron and background processing 9 min
    3. Headless WordPress 9 min
    4. Debugging WordPress 9 min
    5. WordPress at scale 10 min
    6. Contributing to WordPress core 9 min
    7. Deploying and migrating WordPress safely 10 min

Test yourself: WordPress Development Complete Course: final quiz

12 questions. Pass mark 70%.

  1. Question 1 of 12 A client wants a “Testimonials” post type that must keep working if they switch theme next year. Where should you register it?
  2. Question 2 of 12 What does this filter callback do to post titles?
    PHP
    add_filter( 'the_title', 'myplugin_title' );
    
    function myplugin_title( $title ) {
    	strtoupper( $title );
    }
  3. Question 3 of 12 Your callback needs both arguments that the save_post action passes: the post ID and the post object. Which call is correct?
  4. Question 4 of 12 In which database table does WordPress store custom field values for posts?
  5. Question 5 of 12 You registered a custom post type with a new rewrite slug and its URLs return 404. What fixes it?
  6. Question 6 of 12 You need the five latest events for a sidebar and will never paginate them. Which arguments avoid unnecessary work?
    PHP
    $query = new WP_Query( array(
    	'post_type'      => 'myplugin_event',
    	'posts_per_page' => 5,
    	// ?
    ) );
  7. Question 7 of 12 Which is the right way to change how many posts the main blog archive shows?
  8. Question 8 of 12 Which of these stop a REST route from doing its work for users who cannot edit posts? Choose two.

    Select all that apply.

  9. Question 9 of 12 You print a post meta value inside an HTML attribute. Which is correct?
    PHP
    $colour = get_post_meta( $post_id, 'myplugin_colour', true );
  10. Question 10 of 12 Which query is safe when $email comes from user input?
  11. Question 11 of 12 What happens to a transient after its expiry time has passed?
  12. Question 12 of 12 After moving a site from staging to production, which WP-CLI command updates the old domain stored in the database, including inside serialised data?