Become a WordPress Developer: Unlocking Power With Code
Together we will build a website for a fictional university and along the way we will:
Install WordPress on your personal computer so you have a private playground copy of WordPress to practice and experiment with
Get introduced to the PHP language (this is what powers WordPress)
Set Up a New Theme (You'll learn how to convert any HTML template into a living breathing WordPress theme)
Create Custom Post Types and Custom Fields
Relate pieces of content with each other (e.g. a professor and a program)
Learn the basics of (object-oriented) JavaScript
Leverage the WP REST API
Learn to use JavaScript to communicate with the WordPress back-end on-the-fly
Let visitors sign up for a basic account on our site
Build a "My Notes" feature (user specific single page application with real-time CRUD actions)
Let users "like" or "heart" a professor (update the professor's like count on-the-fly)
Deploy our website live up onto the web for the entire world to view
And much more!
About the Author: Udemy
Udemy is the largest open marketplace for online courses on the internet. Founded in 2010 by Eren Bali, Oktay Caglar, and Gagan Biyani and headquartered in San Francisco, the company went public on the Nasdaq in 2021 under the ticker UDMY. The platform hosts well over two hundred thousand courses across software development, IT and cloud, data science, design, business, marketing, and creative skills, taught by tens of thousands of independent instructors. Roughly seventy million learners use it worldwide, and the corporate arm — Udemy Business — supplies a curated subset of that catalog to enterprise customers.
Because Udemy is a marketplace rather than a single editorial publisher, the catalog is uneven by design. The strongest material lives in the long-form, project-based courses authored by working engineers — full-stack JavaScript, React, Node.js, Python data science, AWS, Docker and Kubernetes, mobile development with Flutter and React Native, and cloud certification preparation. The CourseFlix listing under this source is the slice of that catalog that has been mirrored here for offline-friendly viewing, organized by topic and updated as new releases land. Pricing on Udemy itself swings dramatically with the site's near-permanent sales, which is why the platform is best treated as a deep reference catalog: pick instructors with strong reviews and a track record of updating their material rather than buying on the headline price alone.
Watch Online 173 lessons
| # | Lesson Title | Duration | Access |
|---|---|---|---|
| 1 | Welcome to the Course! Demo | 10:00 | |
| 2 | What is a Dev Environment? (Your First Installation) | 13:35 | |
| 3 | About The Recent Big Changes To WordPress | 03:48 | |
| 4 | First Taste of PHP | 16:32 | |
| 5 | Creating a New Theme | 12:05 | |
| 6 | PHP Functions | 14:53 | |
| 7 | PHP Arrays | 12:29 | |
| 8 | The Famous "Loop" in WordPress | 14:31 | |
| 9 | Header & Footer | 18:34 | |
| 10 | Convert Static HTML Template into WordPress (Part 1) | 03:30 | |
| 11 | Convert Static HTML Template into WordPress (Part 2) | 18:04 | |
| 12 | Interior Page Template | 17:53 | |
| 13 | Parent & Children Pages | 16:59 | |
| 14 | To Echo or Not To Echo | 09:02 | |
| 15 | Menu of Child Page Links | 19:58 | |
| 16 | A Few Quick Edits / Improvements | 09:22 | |
| 17 | Navigation Menus | 15:39 | |
| 18 | Navigation Menus (Continued) | 05:07 | |
| 19 | Blog Listing Page (index.php vs front-page.php) | 19:59 | |
| 20 | Blog Continued | 13:15 | |
| 21 | Blog Archives (archive.php) | 12:10 | |
| 22 | Custom Queries | 19:59 | |
| 23 | Blog: Few Quick Edits & Improvements | 06:32 | |
| 24 | Custom Post Types | 17:50 | |
| 25 | Displaying Custom Post Types | 19:49 | |
| 26 | Quick Timeout: Misc Updates | 14:24 | |
| 27 | Custom Fields | 19:10 | |
| 28 | Ordering (Sorting) Custom Queries | 14:10 | |
| 29 | Manipulating Default URL Based Queries | 17:52 | |
| 30 | Past Events Page (Custom Query Pagination) | 18:32 | |
| 31 | Creating Relationships Between Content | 18:41 | |
| 32 | Displaying Relationships (Front-End) | 19:59 | |
| 33 | Quick Program Edits | 08:51 | |
| 34 | Professors Post Type | 19:13 | |
| 35 | Featured Image (Post Thumbnail) | 19:07 | |
| 36 | Featured Image Sizes & Cropping | 09:16 | |
| 37 | Page Banner Dynamic Background Image | 15:13 | |
| 38 | Reduce Duplicate Code - Create Our Own Function | 19:51 | |
| 39 | Using Our "pageBanner" Function | 10:55 | |
| 40 | Reduce Duplication - "get_template_part()" | 11:29 | |
| 41 | Getting Our Computer & Project Ready for JavaScript | 16:07 | |
| 42 | Optional: The Finished Product Of This Course: All In One Import File | 13:31 | |
| 43 | Campus Post Type | 19:47 | |
| 44 | Campus Map on Front-End | 18:52 | |
| 45 | Campuses Continued | 19:54 | |
| 46 | Final Campus Details | 04:36 | |
| 47 | Live Search | 09:54 | |
| 48 | Open and Close Search Overlay | 18:17 | |
| 49 | Keyboard Events in JavaScript | 19:39 | |
| 50 | Managing Time in JavaScript | 15:33 | |
| 51 | Waiting / Loading Spinner Icon | 19:59 | |
| 52 | Load WP Content with JS | 17:51 | |
| 53 | Generate HTML Based on JSON | 19:59 | |
| 54 | Conditional Logic Within Template Literal | 17:44 | |
| 55 | Quick Misc Edits | 10:52 | |
| 56 | Synchronous vs Asynchronous (Part 1) | 11:47 | |
| 57 | Synchronous vs Asynchronous (Part 2) | 10:12 | |
| 58 | REST API: Add New Custom Field | 15:51 | |
| 59 | REST API: Add New Custom Route (URL) | 16:38 | |
| 60 | Create Your Own Raw JSON Data | 14:11 | |
| 61 | WP_Query and Keyword Searching | 08:26 | |
| 62 | Working With Multiple Post Types | 10:41 | |
| 63 | 3 Column Layout for Search Overlay | 19:59 | |
| 64 | Custom Layout & JSON based on Post Type | 19:34 | |
| 65 | Search Logic That's Aware of Relationships | 16:03 | |
| 66 | Search Logic That's Aware of Relationships (Part 2) | 19:47 | |
| 67 | Completing Our Search Overlay | 14:26 | |
| 68 | jQuery Free Live Search | 06:51 | |
| 69 | Traditional WordPress Searching | 19:02 | |
| 70 | Traditional WordPress Searching (Part 2) | 19:59 | |
| 71 | User Roles and Permissions | 19:59 | |
| 72 | Open Registration | 20:00 | |
| 73 | Open Registration (Part 2) | 11:49 | |
| 74 | "My Notes" Feature | 20:00 | |
| 75 | "My Notes" Front-end Part 1 | 07:32 | |
| 76 | "My Notes" Front-end Part 2 | 14:56 | |
| 77 | Delete Posts with the REST API | 17:52 | |
| 78 | Edit / Update Posts with the REST API | 18:31 | |
| 79 | Creating New Notes | 14:53 | |
| 80 | Creating New Notes (Part 2) | 08:49 | |
| 81 | Note Permissions and Security (Part 1) | 19:59 | |
| 82 | Note Permissions and Security (Part 2) | 20:00 | |
| 83 | Per-User Post Limit | 19:57 | |
| 84 | jQuery Free My Notes | 06:14 | |
| 85 | Let Users "Like" Content (Part 1) | 19:32 | |
| 86 | Let Users "Like" Content (Part 2) | 12:55 | |
| 87 | Creating Custom POST and DELETE Endpoints | 14:14 | |
| 88 | Programmatically Create a Post | 19:18 | |
| 89 | Enforce Limit of One Like Per User/Teacher Combo | 17:29 | |
| 90 | Completing the LikeBox | 19:46 | |
| 91 | jQuery Free LikeBox | 02:19 | |
| 92 | Going Live with Our Website | 09:04 | |
| 93 | Path A (Simple and Quick) | 18:27 | |
| 94 | Path B (Advanced / Manually Moving a Site) | 13:24 | |
| 95 | Database Config for Two Site Environments | 10:22 | |
| 96 | Ignoring Certain Files with Git | 07:52 | |
| 97 | Automatic Git Deployments to Web Host | 14:59 | |
| 98 | Challenge: Make Homepage Slideshow Dynamic | 09:32 | |
| 99 | Introduction to Plugin Development | 13:36 | |
| 100 | Let's Create Our First Plugin | 10:40 | |
| 101 | Adding a Settings Page For Our Plugin | 15:00 | |
| 102 | Settings API (Saving Settings Data) | 19:52 | |
| 103 | Finishing Our Settings Form | 19:59 | |
| 104 | Actually Counting the Words, Characters, and Read Time | 19:57 | |
| 105 | Translations / Localization (For PHP) | 19:44 | |
| 106 | Admin Sub-Menu | 16:00 | |
| 107 | Custom Admin Menu Icon | 17:06 | |
| 108 | Alternative: Manually Handling Admin Form Submit | 15:24 | |
| 109 | Finishing Word Filter Plugin | 18:04 | |
| 110 | Introduction to JavaScript Plugin Development | 19:45 | |
| 111 | Introduction to JSX | 19:47 | |
| 112 | Block Type Attributes | 20:00 | |
| 113 | Let's Discuss the Output of Our Block (Part 1) | 11:53 | |
| 114 | Let's Discuss the Output of Our Block (Part 2) | 10:08 | |
| 115 | Starting Our Multiple Choice Block Type | 18:26 | |
| 116 | Styling Our Block | 11:26 | |
| 117 | Event Handling & Updating Block Attributes | 20:00 | |
| 118 | Setting Up The Correct Answer | 19:53 | |
| 119 | How To Use React on The Front-End of WordPress | 18:52 | |
| 120 | Passing Block Data From PHP Into JavaScript / React | 12:26 | |
| 121 | Letting Users Click On (Guess) An Answer | 15:16 | |
| 122 | Attention To Detail | 14:37 | |
| 123 | Let Admin Choose Background Color of Block | 15:07 | |
| 124 | Block Text Alignment & Block Preview | 08:31 | |
| 125 | Using The "block.json" File | 17:28 | |
| 126 | Starting Our Featured Professor Plugin | 14:24 | |
| 127 | Loading a List of Professors | 13:10 | |
| 128 | Displaying Professor Info | 19:59 | |
| 129 | Professor Preview In Editor (Part 1) | 05:23 | |
| 130 | Professor Preview In Editor (Part 2) | 19:23 | |
| 131 | Control Post Meta With Block Type | 19:58 | |
| 132 | Add Related Posts to Professor Detail Page | 12:06 | |
| 133 | Translations / Localization (For JavaScript) | 11:30 | |
| 134 | Understanding The Pros and Cons of the "Post" Paradigm | 20:00 | |
| 135 | Creating Our Own Custom Table | 19:43 | |
| 136 | Querying Our Table | 16:07 | |
| 137 | Building Dynamic Queries (Part 1) | 10:57 | |
| 138 | Building Dynamic Queries (Part 2) | 17:35 | |
| 139 | Create Pet From Front-End | 11:35 | |
| 140 | Delete Pet From Front-End | 09:41 | |
| 141 | What Is Full Site Editing? | 10:11 | |
| 142 | Creating A Block Theme | 19:59 | |
| 143 | Where Should We Begin With Block Themes? | 10:40 | |
| 144 | Custom Banner Block (Part 1) | 04:40 | |
| 145 | Custom Banner Block (Part 2) | 18:55 | |
| 146 | Making Our Block Editable | 10:16 | |
| 147 | Generic Heading Block | 12:15 | |
| 148 | Finishing Generic Heading Block | 18:50 | |
| 149 | What Is "theme.json" In A Block Theme? (Part 1) | 02:52 | |
| 150 | What Is "theme.json" In A Block Theme? (Part 2) | 19:36 | |
| 151 | Custom Button Block (Part 1) | 05:02 | |
| 152 | Custom Button Block (Part 2) | 19:12 | |
| 153 | Color Picker For Button Block (Part 1) | 11:07 | |
| 154 | Color Picker For Button Block (Part 2) | 14:11 | |
| 155 | Our PHP Render Approach | 18:51 | |
| 156 | User Uploaded Background Images (Part 1) | 10:16 | |
| 157 | User Uploaded Background Images (Part 2) | 14:17 | |
| 158 | Quick Details: Banner Block | 09:08 | |
| 159 | Events And Blogs Area (Part 1) | 06:26 | |
| 160 | Events And Blogs Area (Part 2) | 14:39 | |
| 161 | Header & Footer Blocks | 12:46 | |
| 162 | Slideshow Block (Part 1) | 16:56 | |
| 163 | Slideshow Block (Part 2) | 11:20 | |
| 164 | Templates (Part 1) | 08:31 | |
| 165 | Templates (Part 2) | 12:22 | |
| 166 | Single Page & Post Templates | 18:41 | |
| 167 | Remaining Templates | 14:41 | |
| 168 | Only Allow Certain Block Types In Certain Editor Environments | 07:53 | |
| 169 | Creating A "Blank" Template For Landing Pages | 06:06 | |
| 170 | Challenge: Have an Update Plan in Place (Security) | 08:13 | |
| 171 | Challenge: Query Vars | 12:48 | |
| 172 | Finale: JavaScript Next Steps | 06:07 | |
| 173 | Bonus Lecture | 03:36 |
Get instant access to all 172 lessons in this course, plus thousands of other premium courses. One subscription, unlimited knowledge.
Learn more about subscriptionCourse content
173 lessons · 41h 45m 55sShow all 173 lessons
- 1 Welcome to the Course! 10:00
- 2 What is a Dev Environment? (Your First Installation) 13:35
- 3 About The Recent Big Changes To WordPress 03:48
- 4 First Taste of PHP 16:32
- 5 Creating a New Theme 12:05
- 6 PHP Functions 14:53
- 7 PHP Arrays 12:29
- 8 The Famous "Loop" in WordPress 14:31
- 9 Header & Footer 18:34
- 10 Convert Static HTML Template into WordPress (Part 1) 03:30
- 11 Convert Static HTML Template into WordPress (Part 2) 18:04
- 12 Interior Page Template 17:53
- 13 Parent & Children Pages 16:59
- 14 To Echo or Not To Echo 09:02
- 15 Menu of Child Page Links 19:58
- 16 A Few Quick Edits / Improvements 09:22
- 17 Navigation Menus 15:39
- 18 Navigation Menus (Continued) 05:07
- 19 Blog Listing Page (index.php vs front-page.php) 19:59
- 20 Blog Continued 13:15
- 21 Blog Archives (archive.php) 12:10
- 22 Custom Queries 19:59
- 23 Blog: Few Quick Edits & Improvements 06:32
- 24 Custom Post Types 17:50
- 25 Displaying Custom Post Types 19:49
- 26 Quick Timeout: Misc Updates 14:24
- 27 Custom Fields 19:10
- 28 Ordering (Sorting) Custom Queries 14:10
- 29 Manipulating Default URL Based Queries 17:52
- 30 Past Events Page (Custom Query Pagination) 18:32
- 31 Creating Relationships Between Content 18:41
- 32 Displaying Relationships (Front-End) 19:59
- 33 Quick Program Edits 08:51
- 34 Professors Post Type 19:13
- 35 Featured Image (Post Thumbnail) 19:07
- 36 Featured Image Sizes & Cropping 09:16
- 37 Page Banner Dynamic Background Image 15:13
- 38 Reduce Duplicate Code - Create Our Own Function 19:51
- 39 Using Our "pageBanner" Function 10:55
- 40 Reduce Duplication - "get_template_part()" 11:29
- 41 Getting Our Computer & Project Ready for JavaScript 16:07
- 42 Optional: The Finished Product Of This Course: All In One Import File 13:31
- 43 Campus Post Type 19:47
- 44 Campus Map on Front-End 18:52
- 45 Campuses Continued 19:54
- 46 Final Campus Details 04:36
- 47 Live Search 09:54
- 48 Open and Close Search Overlay 18:17
- 49 Keyboard Events in JavaScript 19:39
- 50 Managing Time in JavaScript 15:33
- 51 Waiting / Loading Spinner Icon 19:59
- 52 Load WP Content with JS 17:51
- 53 Generate HTML Based on JSON 19:59
- 54 Conditional Logic Within Template Literal 17:44
- 55 Quick Misc Edits 10:52
- 56 Synchronous vs Asynchronous (Part 1) 11:47
- 57 Synchronous vs Asynchronous (Part 2) 10:12
- 58 REST API: Add New Custom Field 15:51
- 59 REST API: Add New Custom Route (URL) 16:38
- 60 Create Your Own Raw JSON Data 14:11
- 61 WP_Query and Keyword Searching 08:26
- 62 Working With Multiple Post Types 10:41
- 63 3 Column Layout for Search Overlay 19:59
- 64 Custom Layout & JSON based on Post Type 19:34
- 65 Search Logic That's Aware of Relationships 16:03
- 66 Search Logic That's Aware of Relationships (Part 2) 19:47
- 67 Completing Our Search Overlay 14:26
- 68 jQuery Free Live Search 06:51
- 69 Traditional WordPress Searching 19:02
- 70 Traditional WordPress Searching (Part 2) 19:59
- 71 User Roles and Permissions 19:59
- 72 Open Registration 20:00
- 73 Open Registration (Part 2) 11:49
- 74 "My Notes" Feature 20:00
- 75 "My Notes" Front-end Part 1 07:32
- 76 "My Notes" Front-end Part 2 14:56
- 77 Delete Posts with the REST API 17:52
- 78 Edit / Update Posts with the REST API 18:31
- 79 Creating New Notes 14:53
- 80 Creating New Notes (Part 2) 08:49
- 81 Note Permissions and Security (Part 1) 19:59
- 82 Note Permissions and Security (Part 2) 20:00
- 83 Per-User Post Limit 19:57
- 84 jQuery Free My Notes 06:14
- 85 Let Users "Like" Content (Part 1) 19:32
- 86 Let Users "Like" Content (Part 2) 12:55
- 87 Creating Custom POST and DELETE Endpoints 14:14
- 88 Programmatically Create a Post 19:18
- 89 Enforce Limit of One Like Per User/Teacher Combo 17:29
- 90 Completing the LikeBox 19:46
- 91 jQuery Free LikeBox 02:19
- 92 Going Live with Our Website 09:04
- 93 Path A (Simple and Quick) 18:27
- 94 Path B (Advanced / Manually Moving a Site) 13:24
- 95 Database Config for Two Site Environments 10:22
- 96 Ignoring Certain Files with Git 07:52
- 97 Automatic Git Deployments to Web Host 14:59
- 98 Challenge: Make Homepage Slideshow Dynamic 09:32
- 99 Introduction to Plugin Development 13:36
- 100 Let's Create Our First Plugin 10:40
- 101 Adding a Settings Page For Our Plugin 15:00
- 102 Settings API (Saving Settings Data) 19:52
- 103 Finishing Our Settings Form 19:59
- 104 Actually Counting the Words, Characters, and Read Time 19:57
- 105 Translations / Localization (For PHP) 19:44
- 106 Admin Sub-Menu 16:00
- 107 Custom Admin Menu Icon 17:06
- 108 Alternative: Manually Handling Admin Form Submit 15:24
- 109 Finishing Word Filter Plugin 18:04
- 110 Introduction to JavaScript Plugin Development 19:45
- 111 Introduction to JSX 19:47
- 112 Block Type Attributes 20:00
- 113 Let's Discuss the Output of Our Block (Part 1) 11:53
- 114 Let's Discuss the Output of Our Block (Part 2) 10:08
- 115 Starting Our Multiple Choice Block Type 18:26
- 116 Styling Our Block 11:26
- 117 Event Handling & Updating Block Attributes 20:00
- 118 Setting Up The Correct Answer 19:53
- 119 How To Use React on The Front-End of WordPress 18:52
- 120 Passing Block Data From PHP Into JavaScript / React 12:26
- 121 Letting Users Click On (Guess) An Answer 15:16
- 122 Attention To Detail 14:37
- 123 Let Admin Choose Background Color of Block 15:07
- 124 Block Text Alignment & Block Preview 08:31
- 125 Using The "block.json" File 17:28
- 126 Starting Our Featured Professor Plugin 14:24
- 127 Loading a List of Professors 13:10
- 128 Displaying Professor Info 19:59
- 129 Professor Preview In Editor (Part 1) 05:23
- 130 Professor Preview In Editor (Part 2) 19:23
- 131 Control Post Meta With Block Type 19:58
- 132 Add Related Posts to Professor Detail Page 12:06
- 133 Translations / Localization (For JavaScript) 11:30
- 134 Understanding The Pros and Cons of the "Post" Paradigm 20:00
- 135 Creating Our Own Custom Table 19:43
- 136 Querying Our Table 16:07
- 137 Building Dynamic Queries (Part 1) 10:57
- 138 Building Dynamic Queries (Part 2) 17:35
- 139 Create Pet From Front-End 11:35
- 140 Delete Pet From Front-End 09:41
- 141 What Is Full Site Editing? 10:11
- 142 Creating A Block Theme 19:59
- 143 Where Should We Begin With Block Themes? 10:40
- 144 Custom Banner Block (Part 1) 04:40
- 145 Custom Banner Block (Part 2) 18:55
- 146 Making Our Block Editable 10:16
- 147 Generic Heading Block 12:15
- 148 Finishing Generic Heading Block 18:50
- 149 What Is "theme.json" In A Block Theme? (Part 1) 02:52
- 150 What Is "theme.json" In A Block Theme? (Part 2) 19:36
- 151 Custom Button Block (Part 1) 05:02
- 152 Custom Button Block (Part 2) 19:12
- 153 Color Picker For Button Block (Part 1) 11:07
- 154 Color Picker For Button Block (Part 2) 14:11
- 155 Our PHP Render Approach 18:51
- 156 User Uploaded Background Images (Part 1) 10:16
- 157 User Uploaded Background Images (Part 2) 14:17
- 158 Quick Details: Banner Block 09:08
- 159 Events And Blogs Area (Part 1) 06:26
- 160 Events And Blogs Area (Part 2) 14:39
- 161 Header & Footer Blocks 12:46
- 162 Slideshow Block (Part 1) 16:56
- 163 Slideshow Block (Part 2) 11:20
- 164 Templates (Part 1) 08:31
- 165 Templates (Part 2) 12:22
- 166 Single Page & Post Templates 18:41
- 167 Remaining Templates 14:41
- 168 Only Allow Certain Block Types In Certain Editor Environments 07:53
- 169 Creating A "Blank" Template For Landing Pages 06:06
- 170 Challenge: Have an Update Plan in Place (Security) 08:13
- 171 Challenge: Query Vars 12:48
- 172 Finale: JavaScript Next Steps 06:07
- 173 Bonus Lecture 03:36
Related courses
-

Modern JavaScript From The Beginning 2.0
By: Brad TraversyThis is a 37+ hour in-depth course that will take you from the absolute beginning of JavaScript, learning about data types, functions and loops to learning DOM36 hours 42 minutes 18 seconds 5 / 5 -
FreeData Visualization + D3.js
By: SuperHiOur Data Visualization course focuses on the practical aspects of working with data. In our 6-week long course, we’ll cover the basics of storytelling and worki16 hours 48 minutes 54 seconds 5 / 5 -

The Ultimate JavaScript Animation Course
By: Dev EdLearn how to do creative and engaging animation with no previous experience. Animation is so important in front end design as it grabs the attention of the user8 hours 32 minutes 37 seconds