{"id":168,"date":"2026-08-11T21:07:41","date_gmt":"2026-08-11T21:07:41","guid":{"rendered":"https:\/\/orionpulse.in\/blog\/?p=168"},"modified":"2026-08-12T14:56:19","modified_gmt":"2026-08-12T14:56:19","slug":"i-struggled-to-build-a-custom-wordpress-theme-so-i-built-a-gpt","status":"publish","type":"post","link":"https:\/\/orionpulse.in\/blog\/i-struggled-to-build-a-custom-wordpress-theme-so-i-built-a-gpt\/","title":{"rendered":"I Struggled to Build a Custom WordPress Theme \u2014 So I Built a GPT"},"content":{"rendered":"\n<h2 class=\"wp-block-heading\"><strong>Problem I Faced<\/strong><\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">The generated live preview wasn&#8217;t actually complete<br>The generated design didn&#8217;t properly match the existing website<br>I had to repeatedly explain the same requirements<br>The output could look good but still not be production-ready<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>The Way I Started<\/strong><br><\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">As you know, we had already completed the setup of the WordPress blog page, but that was not the main challenge. The real problem started when we began building the custom WordPress theme.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">At first, it seemed simple. We just needed to create a WordPress theme that matched the design of the existing website. But as we started implementing it, we realized that creating a theme that was not only visually similar but also properly structured, responsive, functional, and actually installable in WordPress was much more difficult than expected.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">The biggest challenge was getting the generated theme to behave like a real WordPress theme rather than just looking like a static HTML page.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Before getting into the solution, let&#8217;s understand the two ways I initially approached the problem.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"576\" src=\"https:\/\/orionpulse.in\/blog\/wp-content\/uploads\/2026\/08\/image-12-1024x576.png\" alt=\"\" class=\"wp-image-184\" srcset=\"https:\/\/orionpulse.in\/blog\/wp-content\/uploads\/2026\/08\/image-12-1024x576.png 1024w, https:\/\/orionpulse.in\/blog\/wp-content\/uploads\/2026\/08\/image-12-300x169.png 300w, https:\/\/orionpulse.in\/blog\/wp-content\/uploads\/2026\/08\/image-12-768x432.png 768w, https:\/\/orionpulse.in\/blog\/wp-content\/uploads\/2026\/08\/image-12.png 1366w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>Two Ways to Create a WordPress Theme<\/strong><\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">There are generally two approaches:<br><\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>Choose an existing\/predefined WordPress theme<\/strong><\/li>\n\n\n\n<li><strong>Build a custom WordPress theme<\/strong><\/li>\n<\/ol>\n\n\n\n<p class=\"wp-block-paragraph\">For a website that needs its blog to look exactly like the existing website, I needed the second approach.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\"><br><strong>1. Choosing an Existing WordPress Theme<\/strong><\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">If you are already inside the WordPress Admin Panel, you can easily choose from the themes available in WordPress.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Step 1:<\/strong> On the left-hand side of the WordPress Admin Panel, find <strong>Appearance<\/strong> and click on it.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Step 2:<\/strong> Open <strong>Themes<\/strong>.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Step 3:<\/strong> Click <strong>Add New Theme<\/strong>. You will see several themes that you can choose from.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Step 4:<\/strong> Select a theme you like and use the preview option to see how it will look on your website. If the design works for your requirements, activate the theme.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">This approach is perfectly fine when you are happy with an existing design.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">But that was not my requirement.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">I already had an existing React website, and I wanted the WordPress blog to feel like a natural extension of that website. Using a random WordPress theme would mean spending a lot of time modifying it\u2014and even then, it might not perfectly match the original design.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">That is where the second approach came in.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"576\" src=\"https:\/\/orionpulse.in\/blog\/wp-content\/uploads\/2026\/08\/image-10-1024x576.png\" alt=\"\" class=\"wp-image-182\" srcset=\"https:\/\/orionpulse.in\/blog\/wp-content\/uploads\/2026\/08\/image-10-1024x576.png 1024w, https:\/\/orionpulse.in\/blog\/wp-content\/uploads\/2026\/08\/image-10-300x169.png 300w, https:\/\/orionpulse.in\/blog\/wp-content\/uploads\/2026\/08\/image-10-768x432.png 768w, https:\/\/orionpulse.in\/blog\/wp-content\/uploads\/2026\/08\/image-10.png 1366w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>2. Creating a Custom WordPress Theme<\/strong><\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Now I wanted to create a completely custom theme for the website.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">A WordPress theme is not just a static HTML page. It needs to work with WordPress itself. That means the theme has to properly handle PHP templates, WordPress functions, dynamic posts, menus, featured images, archives, search, categories, tags, and other WordPress functionality.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">I knew that creating all of this manually would take significant time.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">So I decided to use AI to help generate the theme.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">At first, this seemed like the perfect solution.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">I could give an AI coding assistant my existing React project, explain what I wanted, and ask it to convert the design into a WordPress theme.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">But this is where the actual problems started.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"576\" src=\"https:\/\/orionpulse.in\/blog\/wp-content\/uploads\/2026\/08\/image-2-1024x576.png\" alt=\"\" class=\"wp-image-172\" srcset=\"https:\/\/orionpulse.in\/blog\/wp-content\/uploads\/2026\/08\/image-2-1024x576.png 1024w, https:\/\/orionpulse.in\/blog\/wp-content\/uploads\/2026\/08\/image-2-300x169.png 300w, https:\/\/orionpulse.in\/blog\/wp-content\/uploads\/2026\/08\/image-2-768x432.png 768w, https:\/\/orionpulse.in\/blog\/wp-content\/uploads\/2026\/08\/image-2-1536x864.png 1536w, https:\/\/orionpulse.in\/blog\/wp-content\/uploads\/2026\/08\/image-2.png 1672w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>The First Problem: The Theme Looked Like a Website, Not a WordPress Theme<\/strong><\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">The AI could generate HTML that looked visually impressive.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">But looking good was not enough.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">I needed the theme to actually work inside WordPress.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">For example, blog posts needed to come dynamically from WordPress instead of being hardcoded. The theme needed proper templates such as:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>header.php<\/li>\n\n\n\n<li>footer.php<\/li>\n\n\n\n<li>single.php<\/li>\n\n\n\n<li>archive.php<\/li>\n\n\n\n<li>search.php<\/li>\n\n\n\n<li>404.php<\/li>\n\n\n\n<li>functions.php<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">It also needed proper CSS and JavaScript, WordPress functions, asset loading, menus, featured images, and responsive behavior.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">So I realized that there was a difference between:<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>\u201cGenerate a webpage that looks like my website.\u201d<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">and<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>\u201cBuild a complete WordPress theme that reproduces my website&#8217;s design.\u201d<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">The second one was much more complicated.<br><\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>The Second Problem: The Live Preview Wasn&#8217;t Really Complete<\/strong><\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Another major problem was the live preview.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Sometimes the generated preview contained the HTML structure, but the actual styling or JavaScript behavior was missing or incomplete.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">The result could look something like a basic HTML page instead of the polished website I was trying to recreate.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">This made testing difficult.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">I didn&#8217;t just want to see a static representation. I wanted to verify:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>CSS styling<\/li>\n\n\n\n<li>responsive behavior<\/li>\n\n\n\n<li>animations<\/li>\n\n\n\n<li>navigation<\/li>\n\n\n\n<li>buttons<\/li>\n\n\n\n<li>hover effects<\/li>\n\n\n\n<li>mobile menu<\/li>\n\n\n\n<li>blog cards<\/li>\n\n\n\n<li>links<\/li>\n\n\n\n<li>WordPress functionality<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">A preview that only showed HTML was not enough<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"576\" src=\"https:\/\/orionpulse.in\/blog\/wp-content\/uploads\/2026\/08\/image-3-1024x576.png\" alt=\"\" class=\"wp-image-173\" srcset=\"https:\/\/orionpulse.in\/blog\/wp-content\/uploads\/2026\/08\/image-3-1024x576.png 1024w, https:\/\/orionpulse.in\/blog\/wp-content\/uploads\/2026\/08\/image-3-300x169.png 300w, https:\/\/orionpulse.in\/blog\/wp-content\/uploads\/2026\/08\/image-3-768x432.png 768w, https:\/\/orionpulse.in\/blog\/wp-content\/uploads\/2026\/08\/image-3-1536x864.png 1536w, https:\/\/orionpulse.in\/blog\/wp-content\/uploads\/2026\/08\/image-3.png 1672w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>The Third Problem: Matching the Existing Website<\/strong><\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">This was probably one of the biggest challenges.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">My goal was not to create a beautiful blog from scratch.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">The goal was to make the WordPress blog look like it belonged to the existing website.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">That meant the AI needed to understand things such as:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>typography<\/li>\n\n\n\n<li>colors<\/li>\n\n\n\n<li>spacing<\/li>\n\n\n\n<li>buttons<\/li>\n\n\n\n<li>gradients<\/li>\n\n\n\n<li>cards<\/li>\n\n\n\n<li>borders<\/li>\n\n\n\n<li>animations<\/li>\n\n\n\n<li>header<\/li>\n\n\n\n<li>footer<\/li>\n\n\n\n<li>responsive behavior<\/li>\n\n\n\n<li>overall design language<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Even when I explained these requirements, the generated result could still look like a generic WordPress blog.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">So I had to repeatedly explain the same design requirements.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">And that became frustrating.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>The Fourth Problem: Repeating the Same Instructions<\/strong><\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Every time I wanted to generate or improve something, I had to explain the same things again.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">I had to tell the AI:<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Analyze the existing website.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Match the existing design.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Don&#8217;t create a generic WordPress theme.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Make it responsive.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Include CSS and JavaScript.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Make it actually work with WordPress.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Don&#8217;t hardcode the blog posts.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Make the theme installable.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">The problem wasn&#8217;t that AI couldn&#8217;t write the code.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">The problem was that I needed to repeatedly provide the <strong>same context, rules, requirements, and workflow<\/strong>.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">That&#8217;s when I started thinking:<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>What if I could put all of these instructions and requirements into one system and make the AI follow them every time?<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">That was the point where the idea for my Custom GPT started.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"576\" src=\"https:\/\/orionpulse.in\/blog\/wp-content\/uploads\/2026\/08\/image-11-1024x576.png\" alt=\"\" class=\"wp-image-183\" srcset=\"https:\/\/orionpulse.in\/blog\/wp-content\/uploads\/2026\/08\/image-11-1024x576.png 1024w, https:\/\/orionpulse.in\/blog\/wp-content\/uploads\/2026\/08\/image-11-300x169.png 300w, https:\/\/orionpulse.in\/blog\/wp-content\/uploads\/2026\/08\/image-11-768x432.png 768w, https:\/\/orionpulse.in\/blog\/wp-content\/uploads\/2026\/08\/image-11.png 1366w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>Building the Custom GPT<\/strong><\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Instead of repeatedly explaining the entire process, I decided to create a Custom GPT specifically for WordPress blog theme development.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">The idea was simple:<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Give the GPT the knowledge, rules, workflow, and requirements once\u2014and then use it whenever I need to create a new website-matched WordPress theme.<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">The workflow I wanted was:<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Existing Website \u2192 Analyze Design \u2192 Understand Requirements \u2192 Plan Theme \u2192 Generate WordPress Theme \u2192 Test \u2192 Review \u2192 Improve<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">This was much more useful than simply asking an AI:<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u201cCreate a WordPress theme for me.\u201d<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>Step 1: Analyze the Existing React Project<\/strong><\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">The first instruction I created for my coding assistant was to analyze the entire React project before making any changes.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">I wanted it to understand:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>project architecture<\/li>\n\n\n\n<li>routing<\/li>\n\n\n\n<li>header<\/li>\n\n\n\n<li>footer<\/li>\n\n\n\n<li>colors<\/li>\n\n\n\n<li>typography<\/li>\n\n\n\n<li>spacing<\/li>\n\n\n\n<li>cards<\/li>\n\n\n\n<li>animations<\/li>\n\n\n\n<li>buttons<\/li>\n\n\n\n<li>gradients<\/li>\n\n\n\n<li>responsiveness<\/li>\n\n\n\n<li>reusable components<\/li>\n\n\n\n<li>design system<\/li>\n\n\n\n<li>assets<\/li>\n\n\n\n<li>external libraries<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">The important part was:<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Do not modify anything during the analysis.<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">First understand the project.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Then create a report.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Only after that should the actual WordPress theme development begin.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"576\" src=\"https:\/\/orionpulse.in\/blog\/wp-content\/uploads\/2026\/08\/image-14-1024x576.png\" alt=\"\" class=\"wp-image-186\" srcset=\"https:\/\/orionpulse.in\/blog\/wp-content\/uploads\/2026\/08\/image-14-1024x576.png 1024w, https:\/\/orionpulse.in\/blog\/wp-content\/uploads\/2026\/08\/image-14-300x169.png 300w, https:\/\/orionpulse.in\/blog\/wp-content\/uploads\/2026\/08\/image-14-768x432.png 768w, https:\/\/orionpulse.in\/blog\/wp-content\/uploads\/2026\/08\/image-14.png 1366w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>Step 2: Create a WordPress Theme Development Plan<\/strong><\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Once the project was understood, I instructed the AI to create an implementation plan.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">For my OrionPulse project, for example, the React website would continue running on the main domain while WordPress would control only the \/blog section.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">The theme needed to recreate the existing website&#8217;s visual identity while keeping the blog content dynamic through WordPress.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">This planning stage helped separate <strong>understanding the website<\/strong> from <strong>actually writing the theme code<\/strong>.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>Step 3: Generate the Complete WordPress Theme<\/strong><\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">After the planning stage, I gave the AI the complete implementation requirements.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">The theme needed to include:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>responsive design<\/li>\n\n\n\n<li>SEO-friendly structure<\/li>\n\n\n\n<li>custom header<\/li>\n\n\n\n<li>custom footer<\/li>\n\n\n\n<li>blog listing<\/li>\n\n\n\n<li>featured posts<\/li>\n\n\n\n<li>categories<\/li>\n\n\n\n<li>search<\/li>\n\n\n\n<li>pagination<\/li>\n\n\n\n<li>single blog pages<\/li>\n\n\n\n<li>category archives<\/li>\n\n\n\n<li>tag archives<\/li>\n\n\n\n<li>search results<\/li>\n\n\n\n<li>custom 404 page<\/li>\n\n\n\n<li>WordPress menus<\/li>\n\n\n\n<li>featured images<\/li>\n\n\n\n<li>comments<\/li>\n\n\n\n<li>custom logo<\/li>\n\n\n\n<li>dynamic metadata<\/li>\n\n\n\n<li>responsive images<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Most importantly, the blog content had to come dynamically from WordPress.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">There should be <strong>no hardcoded blog posts<\/strong> inside the theme.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">If I published a new post from the WordPress Admin Panel, it should automatically appear on the blog.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>Step 4: Review the Theme Like a Senior Developer<\/strong><\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">After generating the theme, I added another important stage.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Instead of assuming the generated code was correct, I instructed the AI to review the entire theme like a senior WordPress developer.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">It needed to check:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>broken links<\/li>\n\n\n\n<li>PHP warnings<\/li>\n\n\n\n<li>WordPress coding practices<\/li>\n\n\n\n<li>escaping<\/li>\n\n\n\n<li>security<\/li>\n\n\n\n<li>translation support<\/li>\n\n\n\n<li>performance<\/li>\n\n\n\n<li>responsive issues<\/li>\n\n\n\n<li>duplicate CSS<\/li>\n\n\n\n<li>duplicate JavaScript<\/li>\n\n\n\n<li>unused assets<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">The goal was not simply to generate code.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">The goal was to generate something that was much closer to a <strong>production-ready WordPress theme<\/strong>.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"576\" src=\"https:\/\/orionpulse.in\/blog\/wp-content\/uploads\/2026\/08\/image-13-1024x576.png\" alt=\"\" class=\"wp-image-185\" srcset=\"https:\/\/orionpulse.in\/blog\/wp-content\/uploads\/2026\/08\/image-13-1024x576.png 1024w, https:\/\/orionpulse.in\/blog\/wp-content\/uploads\/2026\/08\/image-13-300x169.png 300w, https:\/\/orionpulse.in\/blog\/wp-content\/uploads\/2026\/08\/image-13-768x432.png 768w, https:\/\/orionpulse.in\/blog\/wp-content\/uploads\/2026\/08\/image-13.png 1366w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\"> <strong>Fixing the WordPress Links<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">One issue I encountered was that the theme could look correct while some WordPress routes and links were not working properly.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Because my WordPress installation was running inside \/blog, the rewrite configuration also needed to be configured correctly.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">For my setup, I used the following .htaccess configuration in the \/blog directory:<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"># BEGIN WordPress<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">&lt;IfModule mod_expires.c&gt;<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">&nbsp;&nbsp;&nbsp;&nbsp;ExpiresActive On<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">&nbsp;&nbsp;&nbsp;&nbsp;ExpiresByType image\/jpg &#8220;access plus 1 year&#8221;<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">&nbsp;&nbsp;&nbsp;&nbsp;ExpiresByType image\/jpeg &#8220;access plus 1 year&#8221;<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">&nbsp;&nbsp;&nbsp;&nbsp;ExpiresByType image\/gif &#8220;access plus 1 year&#8221;<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">&nbsp;&nbsp;&nbsp;&nbsp;ExpiresByType image\/png &#8220;access plus 1 year&#8221;<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">&nbsp;&nbsp;&nbsp;&nbsp;ExpiresByType text\/css &#8220;access plus 1 month&#8221;<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">&nbsp;&nbsp;&nbsp;&nbsp;ExpiresByType application\/pdf &#8220;access plus 1 month&#8221;<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">&nbsp;&nbsp;&nbsp;&nbsp;ExpiresByType text\/javascript &#8220;access plus 1 month&#8221;<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">&nbsp;&nbsp;&nbsp;&nbsp;ExpiresByType image\/x-icon &#8220;access plus 1 year&#8221;<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">&nbsp;&nbsp;&nbsp;&nbsp;ExpiresDefault &#8220;access plus 1 week&#8221;<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">&lt;\/IfModule&gt;<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">&lt;IfModule mod_rewrite.c&gt;<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">&nbsp;&nbsp;&nbsp;&nbsp;RewriteEngine On<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">&nbsp;&nbsp;&nbsp;&nbsp;RewriteBase \/blog\/<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">&nbsp;&nbsp;&nbsp;&nbsp;RewriteRule ^index\\.php$ &#8211; [L]<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">&nbsp;&nbsp;&nbsp;&nbsp;RewriteCond %{REQUEST_FILENAME} !-f<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">&nbsp;&nbsp;&nbsp;&nbsp;RewriteCond %{REQUEST_FILENAME} !-d<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">&nbsp;&nbsp;&nbsp;&nbsp;RewriteRule . \/blog\/index.php [L]<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">&lt;\/IfModule&gt;<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"># END WordPress<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">With the correct WordPress permalink and rewrite configuration, the blog routes can work properly under \/blog.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Important:<\/strong> .htaccess rules depend on the hosting\/server configuration. If your WordPress installation is already generating its own WordPress rules, use those generated rules as the source of truth rather than blindly replacing them.<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img loading=\"lazy\" decoding=\"async\" width=\"1844\" height=\"1383\" src=\"https:\/\/orionpulse.in\/blog\/wp-content\/uploads\/2026\/08\/IMG_20260812_171814-1-edited.jpg\" alt=\"\" class=\"wp-image-196\" srcset=\"https:\/\/orionpulse.in\/blog\/wp-content\/uploads\/2026\/08\/IMG_20260812_171814-1-edited.jpg 1844w, https:\/\/orionpulse.in\/blog\/wp-content\/uploads\/2026\/08\/IMG_20260812_171814-1-edited-300x225.jpg 300w, https:\/\/orionpulse.in\/blog\/wp-content\/uploads\/2026\/08\/IMG_20260812_171814-1-edited-1024x768.jpg 1024w, https:\/\/orionpulse.in\/blog\/wp-content\/uploads\/2026\/08\/IMG_20260812_171814-1-edited-768x576.jpg 768w, https:\/\/orionpulse.in\/blog\/wp-content\/uploads\/2026\/08\/IMG_20260812_171814-1-edited-1536x1152.jpg 1536w\" sizes=\"auto, (max-width: 1844px) 100vw, 1844px\" \/><\/figure>\n\n\n\n<h3 class=\"wp-block-heading\">Try the Custom GPT<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Try the Custom GPT<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">After going through all of these problems, I decided to build my own Custom GPT specifically for creating website-matched WordPress blog themes. I called it <strong>WP Blog Page Builder<\/strong>. Instead of repeatedly explaining the same requirements, the GPT is designed to follow a structured workflow\u2014from understanding an existing website and its design system to planning, generating, and reviewing a WordPress blog theme. If you are working on a similar project, you can &lt;a href=&#8221;<a href=\"https:\/\/chatgpt.com\/g\/g-6a629e13f95481919921b63467e97a37-wp-blog-page-builder\">https:\/\/chatgpt.com\/g\/g-6a629e13f95481919921b63467e97a37-wp-blog-page-builder<\/a>&#8221; target=&#8221;_blank&#8221; rel=&#8221;noopener noreferrer&#8221;&gt;try the WP Blog Page Builder Custom GPT&lt;\/a&gt; and test it with your own website. I would also love to see how it performs on different projects, so feel free to use it, test its limitations, and share feedback on what could be improved.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Problem I Faced The generated live preview wasn&#8217;t actually completeThe generated design didn&#8217;t properly match the existing websiteI had to repeatedly explain the same requirementsThe output could look&#8230;<\/p>\n","protected":false},"author":4,"featured_media":202,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1],"tags":[],"class_list":["post-168","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-blog"],"_links":{"self":[{"href":"https:\/\/orionpulse.in\/blog\/wp-json\/wp\/v2\/posts\/168","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/orionpulse.in\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/orionpulse.in\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/orionpulse.in\/blog\/wp-json\/wp\/v2\/users\/4"}],"replies":[{"embeddable":true,"href":"https:\/\/orionpulse.in\/blog\/wp-json\/wp\/v2\/comments?post=168"}],"version-history":[{"count":7,"href":"https:\/\/orionpulse.in\/blog\/wp-json\/wp\/v2\/posts\/168\/revisions"}],"predecessor-version":[{"id":201,"href":"https:\/\/orionpulse.in\/blog\/wp-json\/wp\/v2\/posts\/168\/revisions\/201"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/orionpulse.in\/blog\/wp-json\/wp\/v2\/media\/202"}],"wp:attachment":[{"href":"https:\/\/orionpulse.in\/blog\/wp-json\/wp\/v2\/media?parent=168"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/orionpulse.in\/blog\/wp-json\/wp\/v2\/categories?post=168"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/orionpulse.in\/blog\/wp-json\/wp\/v2\/tags?post=168"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}