<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>ThriftyWP Web Services</title>
	<atom:link href="https://thriftywp.com/feed/" rel="self" type="application/rss+xml" />
	<link>https://thriftywp.com</link>
	<description>WordPress, Shopify, and Custom Websites</description>
	<lastBuildDate>Thu, 02 Jul 2026 19:30:52 +0000</lastBuildDate>
	<language>en-US</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=7.0.2</generator>

<image>
	<url>https://thriftywp.com/wp-content/uploads/2026/06/thriftyWP-favicon-1.png</url>
	<title>ThriftyWP Web Services</title>
	<link>https://thriftywp.com</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>The Modern Web Platform Landscape</title>
		<link>https://thriftywp.com/the-modern-web-platform-landscape/</link>
		
		<dc:creator><![CDATA[jaroncito]]></dc:creator>
		<pubDate>Thu, 02 Jul 2026 17:46:49 +0000</pubDate>
				<category><![CDATA[AI]]></category>
		<category><![CDATA[Platforms]]></category>
		<guid isPermaLink="false">https://thriftywp.com/?p=83281</guid>

					<description><![CDATA[The web has never offered more ways to build websites, applications, online businesses, and digital experiences than it does today. From AI-powered website builders and visual no-code tools to traditional content management systems, headless platforms, eCommerce solutions, cloud infrastructure, and developer frameworks, the number of available technologies has grown tremendously over the past decade. That [&#8230;]]]></description>
										<content:encoded><![CDATA[<p>The web has never offered more ways to build websites, applications, online businesses, and digital experiences than it does today. From AI-powered website builders and visual no-code tools to traditional content management systems, headless platforms, eCommerce solutions, cloud infrastructure, and developer frameworks, the number of available technologies has grown tremendously over the past decade.</p>
<p>That abundance of choice is both exciting and overwhelming. New platforms appear almost weekly, each promising to be faster, easier, or more powerful than the last. Whether you&#8217;re a business owner trying to choose the right platform, a developer expanding your technical knowledge, or simply curious about the modern web ecosystem, it can be difficult to understand how everything fits together.</p>
<p>This guide was created to serve as a living reference for the modern web platform landscape. Rather than ranking platforms from best to worst, it organizes them into logical categories and explains the role each type of platform plays. You&#8217;ll discover where AI tools fit into the ecosystem, how website builders differ from content management systems, when headless architecture makes sense, and which platforms specialize in areas like eCommerce, cloud computing, marketing, analytics, automation, and more.</p>
<p>No single platform is perfect for every project. Each exists because it solves a different set of problems. Understanding those differences is the first step toward making better technology decisions—and this guide is designed to help you do exactly that.</p>
<h2>AI Platforms</h2>
<h3>AI Website Builders</h3>
<p>These use AI to generate websites, layouts, copy, landing pages, or full web experiences.</p>
<ul>
<li>Dora.run</li>
<li>Base44</li>
<li>Hydra OS</li>
<li>RedRaven.ai</li>
<li>Wix AI Website Builder</li>
<li>Squarespace Blueprint AI</li>
<li>Hostinger AI Website Builder</li>
<li>Durable</li>
<li>10Web AI Builder</li>
<li>Framer AI</li>
<li>Jimdo Dolphin</li>
<li>Bookmark AiDA</li>
</ul>
<hr />
<h3>AI Design Tools</h3>
<p>These tools help generate, refine, or accelerate visual design, UI layouts, wireframes, and product interfaces.</p>
<ul>
<li>Google Stitch
<ul>
<li>AI UI generation</li>
<li>Converts prompts into interface designs</li>
</ul>
</li>
<li>Figma AI
<ul>
<li>AI-assisted design workflows</li>
<li>Design generation, rewriting, search, and organization</li>
</ul>
</li>
<li>Framer AI
<ul>
<li>Prompt-to-website generation</li>
<li>Design and publishing in one platform</li>
</ul>
</li>
<li>Uizard
<ul>
<li>AI wireframing and prototyping</li>
<li>Turns prompts and sketches into UI mockups</li>
</ul>
</li>
<li>Galileo AI
<ul>
<li>Prompt-to-interface generation</li>
<li>Product UI exploration</li>
</ul>
</li>
<li>Visily
<ul>
<li>AI wireframes and mockups</li>
<li>Collaboration-friendly product design</li>
</ul>
</li>
<li>Motiff AI
<ul>
<li>AI-assisted interface design</li>
<li>Design collaboration and prototyping</li>
</ul>
</li>
<li>Canva Magic Design
<ul>
<li>AI-assisted visual content creation</li>
<li>Fast marketing graphics and layouts</li>
</ul>
</li>
</ul>
<hr />
<h3>AI App Builders and Prompt-to-Application Platforms</h3>
<p>These platforms generate functional applications, prototypes, or code-backed web apps from natural language prompts.</p>
<ul>
<li>Lovable</li>
<li>Bolt.new</li>
<li>v0 by Vercel</li>
<li>Base44</li>
<li>Replit Agent</li>
<li>Cursor</li>
<li>Windsurf</li>
</ul>
<hr />
<h3>AI Development Tools</h3>
<p>These tools assist developers with coding, debugging, refactoring, documentation, and application development.</p>
<ul>
<li>Google AntiGravity
<ul>
<li>AI coding/IDE assistant</li>
</ul>
</li>
<li>GitHub Copilot</li>
<li>Cursor</li>
<li>Windsurf</li>
<li>Claude Code</li>
<li>Cline</li>
<li>Roo Code</li>
<li>Aider</li>
<li>Amazon Q Developer</li>
<li>Gemini Code Assist</li>
<li>Continue.dev</li>
<li>Warp</li>
<li>Replit</li>
</ul>
<hr />
<h3>AI Model Platforms</h3>
<p>Platforms for hosting, running, training, accessing, or sharing AI models.</p>
<ul>
<li>Replicate
<ul>
<li>Run open-source AI models via API</li>
<li>Community model marketplace</li>
</ul>
</li>
<li>Hugging Face</li>
<li>OpenAI API</li>
<li>Anthropic API</li>
<li>Google AI Studio</li>
<li>OpenRouter</li>
<li>Together AI</li>
<li>Groq</li>
<li>Fireworks AI</li>
<li>Fal.ai</li>
<li>Ollama</li>
<li>LM Studio</li>
</ul>
<hr />
<h3>Industry-Specific AI</h3>
<h4>Finance</h4>
<ul>
<li>Datarails
<ul>
<li>AI-powered FP&amp;A</li>
<li>Financial planning and forecasting</li>
</ul>
</li>
<li>Cube</li>
<li>Mosaic</li>
<li>Planful</li>
<li>Vena</li>
</ul>
<h4>Sales</h4>
<ul>
<li>Kira
<ul>
<li>AI sales coaching</li>
<li>Sales training</li>
</ul>
</li>
<li>Gong</li>
<li>Clari</li>
<li>Lavender</li>
<li>Regie.ai</li>
<li>Clay</li>
</ul>
<hr />
<h2>Website Platforms</h2>
<h3>Traditional CMS</h3>
<p>These generate HTML pages and include both frontend and backend content management.</p>
<h4>Open Source and Flexible CMS Platforms</h4>
<ul>
<li>WordPress
<ul>
<li>Huge ecosystem</li>
<li>Plugins</li>
<li>Flexible</li>
<li>Good for nearly everything</li>
</ul>
</li>
<li>Drupal
<ul>
<li>Enterprise</li>
<li>Government</li>
<li>Strong permissions/security</li>
</ul>
</li>
<li>Joomla</li>
<li>TYPO3</li>
<li>ProcessWire</li>
<li>Ghost</li>
<li>Umbraco</li>
<li>Statamic</li>
<li>Craft CMS</li>
<li>ExpressionEngine</li>
</ul>
<hr />
<h3>eCommerce Platforms</h3>
<p>Platforms for building online stores, processing orders, managing products, and selling online.</p>
<h4>Hosted eCommerce Platforms</h4>
<ul>
<li>Shopify
<ul>
<li>Best all-around hosted eCommerce platform</li>
<li>Excellent ecosystem</li>
<li>Limited backend flexibility compared to custom development</li>
</ul>
</li>
<li>BigCommerce</li>
<li>Squarespace Commerce</li>
<li>Wix Stores</li>
<li>Ecwid</li>
<li>Shift4Shop</li>
</ul>
<h4>Open Source and Self-Hosted eCommerce Platforms</h4>
<ul>
<li>WordPress + WooCommerce</li>
<li>Magento / Adobe Commerce</li>
<li>OpenCart</li>
<li>PrestaShop</li>
<li>Shopware</li>
<li>Sylius</li>
<li>Medusa</li>
<li>Saleor</li>
</ul>
<hr />
<h3>Visual Website Builders</h3>
<p>Low-code and no-code website builders for creating websites visually.</p>
<h4>Consumer Website Builders</h4>
<p>These are generally aimed at small business owners, solo operators, and non-technical users who want an easier all-in-one website builder.</p>
<ul>
<li>Wix</li>
<li>Squarespace</li>
<li>Weebly</li>
<li>Jimdo</li>
<li>SITE123</li>
<li>Hostinger Website Builder</li>
<li>GoDaddy Websites + Marketing</li>
<li>Webnode</li>
</ul>
<h4>Professional Visual Website Builders</h4>
<p>These are generally more popular with designers, agencies, and teams that want more visual control and stronger design flexibility.</p>
<ul>
<li>Webflow
<ul>
<li>Visual designer</li>
<li>CMS</li>
<li>Hosting</li>
<li>Strong marketing sites</li>
</ul>
</li>
<li>Framer</li>
<li>Readymag</li>
<li>Editor X</li>
</ul>
<h4>WordPress Visual Builders</h4>
<p>These are visual builders inside the WordPress ecosystem.</p>
<ul>
<li>Elementor</li>
<li>Divi</li>
<li>Bricks Builder</li>
<li>Breakdance</li>
<li>Beaver Builder</li>
<li>Oxygen</li>
<li>WPBakery</li>
<li>GenerateBlocks</li>
<li>Kadence Blocks</li>
<li>Spectra</li>
</ul>
<hr />
<h3>Headless CMS</h3>
<p>API-first content platforms for delivering content to websites, apps, and other digital channels.</p>
<ul>
<li>Strapi
<ul>
<li>Open source</li>
<li>Self-hosted</li>
<li>Developer-focused</li>
</ul>
</li>
<li>Prismic
<ul>
<li>Slice/component architecture</li>
<li>Excellent editing experience</li>
<li>Multi-channel publishing</li>
</ul>
</li>
<li>Sanity.io
<ul>
<li>Structured content</li>
<li>Real-time collaboration</li>
<li>Excellent React integration</li>
</ul>
</li>
<li>Contentful</li>
<li>DatoCMS</li>
<li>Directus</li>
<li>Payload CMS</li>
<li>Hygraph</li>
<li>Storyblok</li>
<li>ButterCMS</li>
<li>Cosmic</li>
<li>TinaCMS</li>
<li>Decap CMS</li>
</ul>
<hr />
<h2>Website Templates</h2>
<h3>Starter Kits</h3>
<p>Prebuilt website templates, starter themes, and design kits for accelerating website builds.</p>
<ul>
<li>Kitstarter.io</li>
<li>Envato Elements</li>
<li>ThemeForest</li>
<li>Astra Starter Templates</li>
<li>Kadence Starter Templates</li>
<li>GeneratePress Site Library</li>
<li>Framer Templates</li>
<li>Webflow Templates</li>
<li>Relume Library</li>
<li>Untitled UI</li>
</ul>
<hr />
<h2>Business Platforms</h2>
<h3>All-in-One Business Platforms</h3>
<p>These combine websites, CRM, email, automation, payments, funnels, scheduling, communities, or course delivery.</p>
<ul>
<li>Kajabi
<ul>
<li>Courses</li>
<li>Memberships</li>
<li>Coaching</li>
<li>Community</li>
<li>Podcasts</li>
<li>Email</li>
<li>Funnels</li>
<li>Website</li>
<li>Landing pages</li>
<li>Payments</li>
<li>Analytics</li>
<li>Mobile app</li>
</ul>
</li>
<li>GoHighLevel
<ul>
<li>CRM</li>
<li>Marketing automation</li>
<li>Websites</li>
<li>Funnels</li>
<li>Email</li>
<li>SMS</li>
<li>Scheduling</li>
<li>Reputation management</li>
</ul>
</li>
<li>HubSpot</li>
<li>Zoho One</li>
<li>ClickFunnels</li>
<li>Kartra</li>
<li>Systeme.io</li>
<li>Podia</li>
</ul>
<hr />
<h3>Online Course Platforms</h3>
<p>Platforms focused primarily on education, course delivery, coaching, communities, and digital learning products.</p>
<ul>
<li>Thinkific</li>
<li>Teachable</li>
<li>Kajabi</li>
<li>LearnWorlds</li>
<li>Podia</li>
<li>Mighty Networks</li>
<li>Circle</li>
<li>Skool</li>
<li>LearnDash</li>
<li>LifterLMS</li>
</ul>
<hr />
<h2>Development Platforms</h2>
<h3>Backend Frameworks</h3>
<h4>PHP</h4>
<ul>
<li>Laravel
<ul>
<li>Modern PHP framework</li>
<li>MVC</li>
<li>APIs</li>
<li>SaaS</li>
<li>Enterprise applications</li>
</ul>
</li>
<li>Symfony</li>
<li>CodeIgniter</li>
<li>CakePHP</li>
</ul>
<h4>JavaScript / TypeScript</h4>
<ul>
<li>Node.js</li>
<li>Express</li>
<li>NestJS</li>
<li>Fastify</li>
<li>Hono</li>
</ul>
<h4>Python</h4>
<ul>
<li>Django</li>
<li>Flask</li>
<li>FastAPI</li>
</ul>
<h4>Ruby</h4>
<ul>
<li>Ruby on Rails</li>
</ul>
<hr />
<h3>Frontend Frameworks</h3>
<ul>
<li>React</li>
<li>Next.js</li>
<li>Vue</li>
<li>Nuxt</li>
<li>Angular</li>
<li>Svelte</li>
<li>SvelteKit</li>
<li>Astro</li>
<li>SolidJS</li>
<li>Qwik</li>
<li>Remix</li>
</ul>
<hr />
<h2>Backend as a Service (BaaS)</h2>
<p>Managed backend infrastructure for databases, authentication, storage, APIs, serverless functions, and realtime features.</p>
<ul>
<li>Supabase
<ul>
<li>PostgreSQL</li>
<li>Authentication</li>
<li>Storage</li>
<li>Edge Functions</li>
<li>Realtime</li>
</ul>
</li>
<li>AWS Amplify
<ul>
<li>Authentication</li>
<li>Storage</li>
<li>APIs</li>
<li>Hosting</li>
</ul>
</li>
<li>Firebase</li>
<li>Appwrite</li>
<li>PocketBase</li>
<li>Convex</li>
<li>Backendless</li>
<li>Nhost</li>
</ul>
<hr />
<h2>Cloud Computing</h2>
<h3>Serverless Computing</h3>
<ul>
<li>AWS Lambda</li>
<li>Cloudflare Workers</li>
<li>Vercel Functions</li>
<li>Netlify Functions</li>
<li>Azure Functions</li>
<li>Google Cloud Functions</li>
<li>Deno Deploy</li>
</ul>
<hr />
<h3>Deployment Platforms</h3>
<ul>
<li>Vercel
<ul>
<li>Frontend deployment</li>
<li>Next.js</li>
<li>Edge functions</li>
<li>CDN</li>
</ul>
</li>
<li>Netlify</li>
<li>Cloudflare Pages</li>
<li>Render</li>
<li>Railway</li>
<li>Fly.io</li>
<li>Firebase Hosting</li>
<li>AWS Amplify Hosting</li>
<li>DigitalOcean App Platform</li>
</ul>
<hr />
<h3>Cloud Infrastructure Providers</h3>
<ul>
<li>Amazon Web Services</li>
<li>Google Cloud Platform</li>
<li>Microsoft Azure</li>
<li>DigitalOcean</li>
<li>Linode / Akamai</li>
<li>Hetzner</li>
<li>Vultr</li>
<li>Oracle Cloud</li>
</ul>
<hr />
<h2>Integration Platforms</h2>
<h3>Healthcare Integration</h3>
<ul>
<li>Mirth Connect
<ul>
<li>HL7</li>
<li>Healthcare messaging</li>
<li>EMR/EHR integrations</li>
</ul>
</li>
<li>Redox</li>
<li>Health Gorilla</li>
<li>Particle Health</li>
<li>Rhapsody</li>
</ul>
<hr />
<h3>General Integration Platforms</h3>
<ul>
<li>Zapier</li>
<li>Make</li>
<li>n8n</li>
<li>Pipedream</li>
<li>Workato</li>
<li>Tray.io</li>
<li>MuleSoft</li>
<li>Boomi</li>
</ul>
<hr />
<h2>Productivity</h2>
<h3>Documentation &amp; Knowledge Bases</h3>
<ul>
<li>Notion
<ul>
<li>Notes</li>
<li>Wiki</li>
<li>Project management</li>
<li>Documentation</li>
</ul>
</li>
<li>Confluence</li>
<li>Slab</li>
<li>GitBook</li>
<li>Outline</li>
<li>Obsidian</li>
<li>Coda</li>
<li>BookStack</li>
<li>Guru</li>
</ul>
<hr />
<h2>Payments</h2>
<h3>Payment Processors</h3>
<ul>
<li>Stripe</li>
<li>PayPal</li>
<li>Authorize.net</li>
<li>Square</li>
<li>Braintree</li>
<li>Adyen</li>
<li>Elavon</li>
<li>Clover</li>
<li>Worldpay</li>
<li>Helcim</li>
<li>Payoneer</li>
<li>2Checkout / Verifone</li>
</ul>
<hr />
<h2>WordPress Plugins</h2>
<h3>Booking &amp; Scheduling</h3>
<ul>
<li>Amelia</li>
<li>Sugar Calendar</li>
<li>Bookly</li>
<li>Simply Schedule Appointments</li>
<li>The Events Calendar</li>
<li>Modern Events Calendar</li>
<li>Event Espresso</li>
<li>LatePoint</li>
<li>BookingPress</li>
</ul>
<h3>Forms</h3>
<ul>
<li>Gravity Forms</li>
<li>Fluent Forms</li>
<li>WPForms</li>
<li>Formidable Forms</li>
<li>Ninja Forms</li>
<li>WS Form</li>
<li>Contact Form 7</li>
</ul>
<h3>SEO</h3>
<ul>
<li>Yoast SEO</li>
<li>Rank Math</li>
<li>All in One SEO</li>
<li>The SEO Framework</li>
<li>SEOPress</li>
</ul>
<h3>Performance and Caching</h3>
<ul>
<li>WP Rocket</li>
<li>W3 Total Cache</li>
<li>LiteSpeed Cache</li>
<li>Perfmatters</li>
<li>Autoptimize</li>
<li>FlyingPress</li>
</ul>
<hr />
<h2>Time Tracking</h2>
<h3>Harvest Alternatives</h3>
<ul>
<li>Clockify</li>
<li>Toggl Track</li>
<li>Harvest</li>
<li>Timely</li>
<li>RescueTime</li>
<li>Hubstaff</li>
<li>Time Doctor</li>
<li>Everhour</li>
</ul>
<hr />
<h2>Additional Categories</h2>
<h3>CSS Frameworks</h3>
<ul>
<li>Tailwind CSS</li>
<li>Bootstrap</li>
<li>Bulma</li>
<li>Foundation</li>
<li>Open Props</li>
<li>Pico CSS</li>
</ul>
<h3>UI Component Libraries</h3>
<ul>
<li>Shadcn/ui</li>
<li>Material UI</li>
<li>Chakra UI</li>
<li>Mantine</li>
<li>Ant Design</li>
<li>Radix UI</li>
<li>Headless UI</li>
<li>DaisyUI</li>
</ul>
<h3>Databases</h3>
<ul>
<li>PostgreSQL</li>
<li>MySQL</li>
<li>MariaDB</li>
<li>SQLite</li>
<li>MongoDB</li>
<li>Redis</li>
<li>PlanetScale</li>
<li>Neon</li>
<li>Supabase Database</li>
</ul>
<h3>Authentication</h3>
<ul>
<li>Clerk</li>
<li>Auth0</li>
<li>Supabase Auth</li>
<li>Firebase Auth</li>
<li>Better Auth</li>
<li>NextAuth.js / Auth.js</li>
<li>Stytch</li>
<li>WorkOS</li>
</ul>
<h3>Email Platforms</h3>
<ul>
<li>Brevo</li>
<li>Mailchimp</li>
<li>Kit</li>
<li>Klaviyo</li>
<li>ActiveCampaign</li>
<li>MailerLite</li>
<li>Campaign Monitor</li>
<li>Constant Contact</li>
<li>Omnisend</li>
</ul>
<h3>Transactional Email</h3>
<ul>
<li>SendGrid</li>
<li>Mailgun</li>
<li>Postmark</li>
<li>Amazon SES</li>
<li>Resend</li>
<li>Brevo</li>
<li>Mandrill</li>
</ul>
<h3>CRM Platforms</h3>
<ul>
<li>HubSpot</li>
<li>Salesforce</li>
<li>Pipedrive</li>
<li>Zoho CRM</li>
<li>GoHighLevel</li>
<li>Keap</li>
<li>Freshsales</li>
<li>Copper</li>
<li>Close</li>
</ul>
<h3>Marketing Automation</h3>
<ul>
<li>HubSpot</li>
<li>ActiveCampaign</li>
<li>Klaviyo</li>
<li>Brevo</li>
<li>Mailchimp</li>
<li>Marketo</li>
<li>Pardot / Account Engagement</li>
<li>Customer.io</li>
<li>Drip</li>
</ul>
<h3>Hosting</h3>
<ul>
<li>Cloudways</li>
<li>Kinsta</li>
<li>WP Engine</li>
<li>SiteGround</li>
<li>Liquid Web</li>
<li>DigitalOcean</li>
<li>Hetzner</li>
<li>Linode</li>
<li>Vultr</li>
<li>Flywheel</li>
<li>Pressable</li>
<li>Rocket.net</li>
</ul>
<h3>CDN / Edge</h3>
<ul>
<li>Cloudflare</li>
<li>Bunny.net</li>
<li>Fastly</li>
<li>Akamai</li>
<li>Amazon CloudFront</li>
<li>KeyCDN</li>
</ul>
<h3>Analytics</h3>
<ul>
<li>Google Analytics</li>
<li>Plausible</li>
<li>Fathom</li>
<li>PostHog</li>
<li>Mixpanel</li>
<li>Matomo</li>
<li>Amplitude</li>
<li>Microsoft Clarity</li>
<li>Hotjar</li>
<li>FullStory</li>
</ul>
<h3>Search</h3>
<ul>
<li>Algolia</li>
<li>Typesense</li>
<li>Meilisearch</li>
<li>ElasticSearch</li>
<li>OpenSearch</li>
<li>SearchWP</li>
</ul>
<h3>Forms</h3>
<ul>
<li>Gravity Forms</li>
<li>Fluent Forms</li>
<li>Formidable Forms</li>
<li>Typeform</li>
<li>Jotform</li>
<li>Tally</li>
<li>Fillout</li>
<li>Paperform</li>
<li>Google Forms</li>
</ul>
<h3>Automation</h3>
<ul>
<li>Zapier</li>
<li>Make</li>
<li>n8n</li>
<li>Pipedream</li>
<li>Activepieces</li>
<li>Relay.app</li>
<li>IFTTT</li>
</ul>
<h3>Design</h3>
<ul>
<li>Figma</li>
<li>Penpot</li>
<li>Canva</li>
<li>Framer</li>
<li>Adobe XD</li>
<li>Sketch</li>
<li>Affinity Designer</li>
<li>InVision</li>
</ul>
<h3>Headless Commerce</h3>
<ul>
<li>Commerce Layer</li>
<li>Medusa</li>
<li>Saleor</li>
<li>Shopify Hydrogen</li>
<li>BigCommerce Catalyst</li>
<li>Elastic Path</li>
<li>Commercetools</li>
</ul>
<h3>Static Site Generators</h3>
<ul>
<li>Astro</li>
<li>Gatsby</li>
<li>Hugo</li>
<li>Eleventy</li>
<li>Jekyll</li>
<li>Next.js static export</li>
<li>Nuxt Content</li>
</ul>
<h3>DevOps</h3>
<ul>
<li>Docker</li>
<li>GitHub Actions</li>
<li>GitLab CI</li>
<li>Terraform</li>
<li>Kubernetes</li>
<li>Ansible</li>
<li>Jenkins</li>
<li>CircleCI</li>
</ul>

    <div class="xs_social_share_widget xs_share_url after_content 		main_content  wslu-style-1 wslu-share-box-shaped wslu-fill-colored wslu-none wslu-share-horizontal wslu-theme-font-no wslu-main_content">

		
        <ul>
			        </ul>
    </div> 
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>CREATE A FILTERABLE IMAGE GALLERY USING THE DIVI TABS MODULE</title>
		<link>https://thriftywp.com/create-a-filterable-image-gallery-using-the-divi-tabs-module/</link>
		
		<dc:creator><![CDATA[jaroncito]]></dc:creator>
		<pubDate>Mon, 04 Mar 2024 22:24:26 +0000</pubDate>
				<category><![CDATA[Divi]]></category>
		<category><![CDATA[WordPress]]></category>
		<guid isPermaLink="false">https://thriftywp.com/?p=50410</guid>

					<description><![CDATA[Divi Divi Divi. What can&#8217;t it do? Well. If we&#8217;re being honest, a few things. One of those few things that Divi can&#8217;t do out of the box is a filterable image gallery. What if we want a to do a fancy filterable image gallery on our Divi website build? Well my friend, let&#8217;s figure [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">Divi Divi Divi. What can&#8217;t it do? <br><br>Well. If we&#8217;re being honest, a few things. <br><br>One of those few things that Divi can&#8217;t do out of the box is a filterable image gallery. <br><br>What if we want a to do a fancy filterable image gallery on our Divi website build? Well my friend, let&#8217;s figure that out together. </p>



<h2 class="wp-block-heading">Add A WordPress Gallery Plugin</h2>



<p class="wp-block-paragraph">First things first, you&#8217;ll need to download a gallery plugin. &#8220;But why Jaroncito? Why do we need to add a gallery plugin to our website if Divi has a gallery module?&#8221;<br><br>Great question! I&#8217;ll tell you. We need to be able to add galleries to the Divi Tabs module. You can&#8217;t go embedding Divi modules within other Divi module you silly goose! Well&#8230;technically you can, but that is a conversation for another time. <br><br>There are many WordPress gallery plugin options out there. I&#8217;ll be using FooGallery in this guide which can be found at the WordPress plugin <a href="https://wordpress.org/plugins/foogallery/" target="_blank" rel="noreferrer noopener">repository here</a>. <br><br>Simply download that badraddery from the WordPress plugin page, upload to your website, and activate to get started. Or, you can download it directly to your website by going to your WordPress dashboard, clicking on Plugins, then clicking the &#8220;Add New Plugin&#8221; button in the top left of the screen. <br><br>Search for &#8220;FooGallery&#8221; on the next screen and download this badboy. </p>



<figure class="wp-block-image aligncenter size-full"><img fetchpriority="high" decoding="async" width="707" height="284" src="https://thriftywp.com/wp-content/uploads/2024/03/fooGallery-image.jpg" alt="" class="wp-image-50414" srcset="https://thriftywp.com/wp-content/uploads/2024/03/fooGallery-image.jpg 707w, https://thriftywp.com/wp-content/uploads/2024/03/fooGallery-image-300x121.jpg 300w" sizes="(max-width: 707px) 100vw, 707px" /></figure>



<p class="wp-block-paragraph">Now your ready to make some galleries! Awwww yeeeeeah!</p>



<h2 class="wp-block-heading">Create A FooGallery Image Gallery</h2>



<p class="wp-block-paragraph">To create your first gallery, hover on &#8220;FooGallery&#8221; and click on &#8220;Add Gallery&#8221;. </p>



<figure class="wp-block-image aligncenter size-full"><img decoding="async" width="325" height="131" src="https://thriftywp.com/wp-content/uploads/2024/03/FooGallery-add_Galley.jpg" alt="" class="wp-image-50415" srcset="https://thriftywp.com/wp-content/uploads/2024/03/FooGallery-add_Galley.jpg 325w, https://thriftywp.com/wp-content/uploads/2024/03/FooGallery-add_Galley-300x121.jpg 300w" sizes="(max-width: 325px) 100vw, 325px" /></figure>



<p class="wp-block-paragraph">Go ahead and give your gallery a title and start adding images straight from the website media library or from images stored on your computer. <br><br>There are a lot of customization settings on the free version of FooGallery that you can tinker with to dial in how you would like to display your image gallery. <br><br>Once your images are added to your gallery go ahead and hit the blue &#8220;Publish&#8221; button to publish your gallery. <br><br>Once published, you&#8217;ll now have a &#8220;Gallery Shortcode&#8221; that we&#8217;ll need in the following steps. </p>



<figure class="wp-block-image aligncenter size-large"><img decoding="async" width="1024" height="475" src="https://thriftywp.com/wp-content/uploads/2024/03/FooGallery-3-1024x475.jpg" alt="" class="wp-image-50416" srcset="https://thriftywp.com/wp-content/uploads/2024/03/FooGallery-3-1024x475.jpg 1024w, https://thriftywp.com/wp-content/uploads/2024/03/FooGallery-3-300x139.jpg 300w, https://thriftywp.com/wp-content/uploads/2024/03/FooGallery-3-768x356.jpg 768w, https://thriftywp.com/wp-content/uploads/2024/03/FooGallery-3-1536x712.jpg 1536w, https://thriftywp.com/wp-content/uploads/2024/03/FooGallery-3-2048x950.jpg 2048w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>



<h2 class="wp-block-heading">Add the Divi Tabs Module To Your Page</h2>



<p class="wp-block-paragraph">Ooookay. Moving right along. <br><br>Let&#8217;s now add a Divi Tabs module to our page. </p>



<figure class="wp-block-image aligncenter size-full"><img loading="lazy" decoding="async" width="424" height="313" src="https://thriftywp.com/wp-content/uploads/2024/03/fooGallery-4.jpg" alt="" class="wp-image-50417" srcset="https://thriftywp.com/wp-content/uploads/2024/03/fooGallery-4.jpg 424w, https://thriftywp.com/wp-content/uploads/2024/03/fooGallery-4-300x221.jpg 300w" sizes="(max-width: 424px) 100vw, 424px" /></figure>



<p class="wp-block-paragraph">Once added, hot on into those tab settings and let&#8217;s add us some image gallery shortcode! <br><br>In the Tabs module settings, click the gear icon next to the first default tab. </p>



<figure class="wp-block-image aligncenter size-full"><img loading="lazy" decoding="async" width="496" height="386" src="https://thriftywp.com/wp-content/uploads/2024/03/FooGallery-4-1.jpg" alt="" class="wp-image-50418" srcset="https://thriftywp.com/wp-content/uploads/2024/03/FooGallery-4-1.jpg 496w, https://thriftywp.com/wp-content/uploads/2024/03/FooGallery-4-1-300x233.jpg 300w" sizes="(max-width: 496px) 100vw, 496px" /></figure>



<p class="wp-block-paragraph">Update the Title to whatever you&#8217;d like to display on the filterable image gallery tab. e.g. &#8220;Poopies&#8221; in my example. </p>



<p class="wp-block-paragraph">Next, we&#8217;re going to add the image gallery shortcode to the Tabs module. Go ahead and paste that into the &#8220;Body&#8221; field. </p>



<figure class="wp-block-image aligncenter size-full"><img loading="lazy" decoding="async" width="480" height="638" src="https://thriftywp.com/wp-content/uploads/2024/03/divi_tabs-1.jpg" alt="" class="wp-image-50419" srcset="https://thriftywp.com/wp-content/uploads/2024/03/divi_tabs-1.jpg 480w, https://thriftywp.com/wp-content/uploads/2024/03/divi_tabs-1-226x300.jpg 226w" sizes="(max-width: 480px) 100vw, 480px" /></figure>



<p class="wp-block-paragraph">Huzzah! If you are using the Divi Visual Builder, you should now see your FooGallery appear. Well done!</p>



<h2 class="wp-block-heading">Add Additional Tabs The Divi Filterable Image Gallery</h2>



<p class="wp-block-paragraph">Now it wouldn&#8217;t quite be a Divi filterable image gallery unless we added more tabs to our filter. I mean, for goodness sakes, that would just be a standard gallery!<br><br>Go ahead and rinse and repeat the above steps; create more FooGallery galleries, add additional tabs to your Divi Tabs module, paste gallery shortcodes into the tabs. </p>



<figure class="wp-block-image aligncenter size-full"><img loading="lazy" decoding="async" width="1002" height="456" src="https://thriftywp.com/wp-content/uploads/2024/03/divi_tabs-2.jpg" alt="" class="wp-image-50420" srcset="https://thriftywp.com/wp-content/uploads/2024/03/divi_tabs-2.jpg 1002w, https://thriftywp.com/wp-content/uploads/2024/03/divi_tabs-2-300x137.jpg 300w, https://thriftywp.com/wp-content/uploads/2024/03/divi_tabs-2-768x350.jpg 768w" sizes="(max-width: 1002px) 100vw, 1002px" /></figure>



<p class="wp-block-paragraph"><br>Before you know it, you&#8217;ll have a beautiful Divi Filterable Image Gallery!<br><br>I&#8217;m not crying. You&#8217;re crying. <br><br>It&#8217;s&#8230;sniff&#8230;beautiful&#8230;</p>



<figure class="wp-block-image aligncenter size-large"><img loading="lazy" decoding="async" width="1024" height="394" src="https://thriftywp.com/wp-content/uploads/2024/03/divi_tabs-3-1024x394.jpg" alt="" class="wp-image-50421" srcset="https://thriftywp.com/wp-content/uploads/2024/03/divi_tabs-3-1024x394.jpg 1024w, https://thriftywp.com/wp-content/uploads/2024/03/divi_tabs-3-300x115.jpg 300w, https://thriftywp.com/wp-content/uploads/2024/03/divi_tabs-3-768x295.jpg 768w, https://thriftywp.com/wp-content/uploads/2024/03/divi_tabs-3-1536x590.jpg 1536w, https://thriftywp.com/wp-content/uploads/2024/03/divi_tabs-3.jpg 1845w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>



<p class="wp-block-paragraph">You can also get creative with the built in Divi Tabs design settings as well as your own css to achieve a more desirable appearance. </p>



<figure class="wp-block-image aligncenter size-large is-resized"><img loading="lazy" decoding="async" width="1024" height="470" src="https://thriftywp.com/wp-content/uploads/2024/03/divi_tabs-4-1024x470.jpg" alt="" class="wp-image-50422" style="width:823px;height:auto" srcset="https://thriftywp.com/wp-content/uploads/2024/03/divi_tabs-4-1024x470.jpg 1024w, https://thriftywp.com/wp-content/uploads/2024/03/divi_tabs-4-300x138.jpg 300w, https://thriftywp.com/wp-content/uploads/2024/03/divi_tabs-4-768x352.jpg 768w, https://thriftywp.com/wp-content/uploads/2024/03/divi_tabs-4-1536x705.jpg 1536w, https://thriftywp.com/wp-content/uploads/2024/03/divi_tabs-4.jpg 1661w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>



<p class="wp-block-paragraph">Very nice indeed!</p>

    <div class="xs_social_share_widget xs_share_url after_content 		main_content  wslu-style-1 wslu-share-box-shaped wslu-fill-colored wslu-none wslu-share-horizontal wslu-theme-font-no wslu-main_content">

		
        <ul>
			        </ul>
    </div> 
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>How To Add A Dynamic Image To A Divi Layout Using Advanced Custom Fields (ACF)</title>
		<link>https://thriftywp.com/how-to-add-a-dynamic-image-to-a-divi-layout-using-advanced-custom-fields/</link>
		
		<dc:creator><![CDATA[jaroncito]]></dc:creator>
		<pubDate>Wed, 25 Aug 2021 16:23:00 +0000</pubDate>
				<category><![CDATA[ACF]]></category>
		<category><![CDATA[Divi]]></category>
		<guid isPermaLink="false">https://thriftywp.com/?p=151</guid>

					<description><![CDATA[Divi is a fantastic page builder. If you disagree, maybe this guide isn&#8217;t for you? Or, maybe you are just Divi curious and heard that you can build dynamic layouts with ACF data and think that is rad. Either way, the dynamic content feature in Divi, and now the Divi Theme Builder is a game-changer [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph"><strong>Divi is a fantastic page builder.</strong></p>



<p class="wp-block-paragraph">If you disagree, maybe this guide isn&#8217;t for you?</p>



<p class="wp-block-paragraph">Or, maybe you are just Divi curious and heard that you can build dynamic layouts with ACF data and think that is rad.</p>



<p class="wp-block-paragraph">Either way, the dynamic content feature in Divi, and now the Divi Theme Builder is a game-changer as you can create custom layouts that will pull in dynamic content from any of the standard Divi post fields.</p>



<p class="wp-block-paragraph">You can also now dynamically insert ACF data into Divi layouts. Fantastic.</p>



<p class="wp-block-paragraph">Building Divi layouts that make use of dynamic <em><strong>text</strong></em> content is very straight forward. Load up your text module, click on the &#8220;Use Dynamic Content&#8221; icon, and select the field you&#8217;d like to dynamically insert into the text module.</p>



<p class="wp-block-paragraph">It couldn&#8217;t be easier.</p>



<p class="wp-block-paragraph">However, much less easy is figuring out how <em><strong>how to use a Divi image module to display an image set by an ACF field.</strong></em></p>



<p class="wp-block-paragraph">By default, you can dynamically insert the post/page Featured Image, Author Profile Picture, or Site Logo.</p>



<p class="wp-block-paragraph">If you only need to dynamically insert one image into your Divi Layout, then you could use the post/page&#8217;s Featured Image.</p>



<figure class="wp-block-image aligncenter size-full"><img loading="lazy" decoding="async" width="398" height="494" src="https://thriftywp.com/wp-content/uploads/2021/08/divi-image-module-default-dynamic-options.webp" alt="" class="wp-image-82640" srcset="https://thriftywp.com/wp-content/uploads/2021/08/divi-image-module-default-dynamic-options.webp 398w, https://thriftywp.com/wp-content/uploads/2021/08/divi-image-module-default-dynamic-options-242x300.webp 242w" sizes="(max-width: 398px) 100vw, 398px" /></figure>



<p class="wp-block-paragraph"></p>



<p class="wp-block-paragraph">However, if you need more than one featured image to dynamically load into your Divi Layout, then you are up a creek without one of those paddle things.</p>



<p class="wp-block-paragraph"><em><strong>But, what if I told you there is a solution?</strong></em></p>



<p class="wp-block-paragraph"><strong>Hey you. There is a solution!</strong></p>



<p class="wp-block-paragraph">We&#8217;ve all been trying out different combinations of ACF fields, settings, Divi modules, using the &#8220;Before&#8221; and &#8220;After&#8221; fields in the text module after selecting your ACF field.</p>



<p class="wp-block-paragraph">However, they all end in failure! Either the rendered output shows the raw &amp;lt;img rel=&#8221;lightbox&#8221; src=https://thisimageurl.com/img/le-image&#8221; /&amp;gt; html, or it simply doesn&#8217;t show anything but a big fat blank area where your image should be loading.</p>



<p class="wp-block-paragraph"><span style="text-decoration: underline;"><strong>I&#8217;ll show you how to dynamically insert images from an ACF field into your Divi layout in 5 simple steps!</strong></span></p>



<p class="wp-block-paragraph">Let&#8217;s go gang!</p>



<h2 class="wp-block-heading">Step 1 &#8211; Create Your ACF Field</h2>



<p class="wp-block-paragraph">Add a new ACF field and give it whatever name makes sense to you.</p>



<p class="wp-block-paragraph">You may be tempted to set the Field Type as a URL or even an image.</p>



<p class="wp-block-paragraph">Resist this temptation!</p>



<p class="wp-block-paragraph">You&#8217;re going to <em><strong>set the Field Type to &#8220;Text&#8221;.</strong></em> Yes. That&#8217;s right. A simple text field.</p>



<figure class="wp-block-image aligncenter size-full"><img loading="lazy" decoding="async" width="1028" height="314" src="https://thriftywp.com/wp-content/uploads/2021/08/divi-image-acf-field.webp" alt="" class="wp-image-82644" srcset="https://thriftywp.com/wp-content/uploads/2021/08/divi-image-acf-field.webp 1028w, https://thriftywp.com/wp-content/uploads/2021/08/divi-image-acf-field-300x92.webp 300w, https://thriftywp.com/wp-content/uploads/2021/08/divi-image-acf-field-1024x313.webp 1024w, https://thriftywp.com/wp-content/uploads/2021/08/divi-image-acf-field-768x235.webp 768w" sizes="(max-width: 1028px) 100vw, 1028px" /></figure>



<p class="wp-block-paragraph"></p>



<h2 class="wp-block-heading">Step 2 Insert A Divi Image Module Into Your Layout</h2>



<p class="wp-block-paragraph">Head on over to the Divi layout that uses the ACF field group.</p>



<p class="wp-block-paragraph">Create a new image module.</p>



<figure class="wp-block-image aligncenter size-full"><img loading="lazy" decoding="async" width="405" height="538" src="https://thriftywp.com/wp-content/uploads/2021/08/divi-create-image-module.webp" alt="" class="wp-image-82643" srcset="https://thriftywp.com/wp-content/uploads/2021/08/divi-create-image-module.webp 405w, https://thriftywp.com/wp-content/uploads/2021/08/divi-create-image-module-226x300.webp 226w" sizes="(max-width: 405px) 100vw, 405px" /></figure>



<p class="wp-block-paragraph"></p>



<h2 class="wp-block-heading">Step 3 Set Your Image Module To Dynamically Show Your ACF Field</h2>



<p class="wp-block-paragraph">The new image module will show a placeholder image. Hover on the placeholder image and click the garbage can icon that appears.</p>



<figure class="wp-block-image aligncenter size-full"><img loading="lazy" decoding="async" width="404" height="497" src="https://thriftywp.com/wp-content/uploads/2021/08/divi-image-module-delete-placeholder.webp" alt="" class="wp-image-82641" srcset="https://thriftywp.com/wp-content/uploads/2021/08/divi-image-module-delete-placeholder.webp 404w, https://thriftywp.com/wp-content/uploads/2021/08/divi-image-module-delete-placeholder-244x300.webp 244w" sizes="(max-width: 404px) 100vw, 404px" /></figure>



<p class="wp-block-paragraph"></p>



<p class="wp-block-paragraph">Next, click on the &#8220;Add Dynamic Content&#8221; icon. Scroll down and select the ACF field you created for your image.</p>



<figure class="wp-block-image aligncenter size-full"><img loading="lazy" decoding="async" width="402" height="600" src="https://thriftywp.com/wp-content/uploads/2021/08/divi-image-module-acf-field.webp" alt="" class="wp-image-82645" srcset="https://thriftywp.com/wp-content/uploads/2021/08/divi-image-module-acf-field.webp 402w, https://thriftywp.com/wp-content/uploads/2021/08/divi-image-module-acf-field-201x300.webp 201w" sizes="(max-width: 402px) 100vw, 402px" /></figure>



<p class="wp-block-paragraph"></p>



<p class="wp-block-paragraph">Save the module. If you&#8217;ve already created a page/post that has a value in the image ACF field, that image it will probably load in your layout visual builder. No worries, completely normal.</p>



<p class="wp-block-paragraph">Save the layout.</p>



<h2 class="wp-block-heading">Step 4 Create A Post That Includes The Image ACF Field</h2>



<p class="wp-block-paragraph">Create a page/post that uses the ACF field group as well as the Divi layout.</p>



<p class="wp-block-paragraph">When you get to your image ACF text field, simply <em><strong>add the image URL from your media library</strong></em>. You can even make this a relative URL by dropping the https://domain.com from the image URL and leaving the rest.</p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="750" height="410" src="https://thriftywp.com/wp-content/uploads/2021/08/wordpress-post-acf-field.webp" alt="" class="wp-image-82642" srcset="https://thriftywp.com/wp-content/uploads/2021/08/wordpress-post-acf-field.webp 750w, https://thriftywp.com/wp-content/uploads/2021/08/wordpress-post-acf-field-300x164.webp 300w" sizes="(max-width: 750px) 100vw, 750px" /></figure>



<p class="wp-block-paragraph"></p>



<p class="wp-block-paragraph">Save the page/post.</p>



<h2 class="wp-block-heading">Step 5 Observe Your Victory By Viewing The Image Dynamically Loaded From An ACF Field Through Your Divi Layout</h2>



<p class="wp-block-paragraph">Go ahead. Visit that page/post. Be sure to clear your cache. It&#8217;ll work. I promise. If it doesn&#8217;t, then you screwed something up because these instructions are rock solid!</p>

    <div class="xs_social_share_widget xs_share_url after_content 		main_content  wslu-style-1 wslu-share-box-shaped wslu-fill-colored wslu-none wslu-share-horizontal wslu-theme-font-no wslu-main_content">

		
        <ul>
			        </ul>
    </div> 
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Use Advanced Custom Fields (ACF) In The Divi Theme Builder and Divi Layouts</title>
		<link>https://thriftywp.com/use-advanced-custom-fields-acf-in-the-divi-theme-builder-and-divi-layouts/</link>
		
		<dc:creator><![CDATA[jaroncito]]></dc:creator>
		<pubDate>Fri, 20 Mar 2020 15:46:08 +0000</pubDate>
				<category><![CDATA[ACF]]></category>
		<category><![CDATA[Divi]]></category>
		<guid isPermaLink="false">https://thriftywp.com/?p=312</guid>

					<description><![CDATA[Divi Divi Divi. It seems that all we hear about nowadays is how great the Divi Theme and Divi Page Builder are! That isn&#8217;t what you are hearing? Interesting. I must live in an echo chamber then because that is what I hear quite a bit. Anywho. We&#8217;re here to talk about using Advanced Custom [&#8230;]]]></description>
										<content:encoded><![CDATA[<p>Divi Divi Divi. It seems that all we hear about nowadays is how great the Divi Theme and Divi Page Builder are!</p>
<p>That isn&#8217;t what you are hearing?</p>
<p>Interesting.</p>
<p>I must live in an echo chamber then because that is what I hear quite a bit.</p>
<p>Anywho. We&#8217;re here to talk about using Advanced Custom Fields in Divi Layouts, including the Divi Theme Builder.</p>
<h2>Divi Dynamic Content Quick Overview</h2>
<p>The Divi Theme and Divi Page Builder have the power to pull in WordPress Page/Post fields dynamically.</p>
<p>The Elegant Themes blog has an <a href="https://www.elegantthemes.com/blog/theme-releases/dynamic-content-for-divi-is-available-now" target="_blank" rel="noopener noreferrer">excellent post</a> that covers the basics of using dynamic content in your Divi Layouts. Check it out.</p>
<p>Basically, you can add the standard post type (Page, Post, Project) fields to your Divi Layouts and pull in their values dynamically.</p>
<p>You can even use WooCommerce product post type data in your Divi Layouts.</p>
<p>This gives you full design control over the appearance of your blog posts, blog category pages, WooCommerce product pages, WooCommerce category pages, WooCommerce Cart and Checkout Pages, and virtually any standard WordPress page template.</p>
<p>Awesome!</p>
<h2>Divi And Advanced Custom Fields (ACF) Extends Dynamic Content</h2>
<p>Oooooh boy. Now, we have the power to use ACF fields in our Divi Layouts including the Divi Theme Builder!</p>
<p>The best part is that this feature is supported natively in the Divi Theme!</p>
<p>This means that we are no longer limited to the standard WordPress post type fields in our Divi Layouts. We can create unlimited custom fields and use them in our Divi layouts. Fantastic!</p>
<p>For example, say you wanted to give your blog post a sub-header below the Post Title. There is no &#8220;sub-header&#8221; standard field when creating a new blog post.</p>
<p>This is problematic if you are using a Divi Theme Builder template for your blog posts. We need to use the power of dynamic content to speed up our builds and content deployment!</p>
<p>Also, it really isn&#8217;t the best idea to use regular ol Divi to build blog posts. Why? Why, you ask??!?! Oh, I&#8217;ll tell you why.</p>
<p>Once you use a drag and drop builder on your posts they become loaded with short-codes. If you then try to migrate those posts into another theme you are going to have a very bad time.</p>
<p>You could, of course, create your first blog post, save the layout as a template, and then re-use that template on every blog post thereafter.</p>
<p>But, we all know the pitfall of that method. If you need to make one design change in the blog post layout, you&#8217;ll need to make it on each and every blog post you&#8217;ve posted that used the copied layout</p>
<p>Lame.</p>
<p><strong>There must be as better way! There is.</strong></p>
<p>Back to the example. To achieve the blog post title sub-header, we can create and insert an ACF field in our Divi Theme Builder Layout to dynamically pull in the blog post sub-header value.</p>
<p>Giddyup. Let&#8217;s get it done cowpeople.</p>
<h2>Install Advanced Custom Feilds &#8211; ACF</h2>
<p>First things first. We need to install the Advanced Custom Fields plugin. You know the drill. Or, perhaps you don&#8217;t know the drill.</p>
<p>Click on your &#8220;Plugins&#8221; link in the WordPress admin menu.</p>
<p>Click &#8220;Add New&#8221; to access the searchable plugin page. Do a search for &#8220;Advanced Custom Fields&#8221;.</p>
<p>The first result should be the correct plugin. The plugin author is Elliot Condon. If that is what you see, then click on &#8220;Install Now&#8221;.</p>
<p>The plugin will install. Success! Be sure to click on the blue &#8220;Activate&#8221; button as well.</p>
<p>Congratulations, you&#8217;ve successfully installed the Advanced Custom Fields plugin!</p>
<h2>Create An ACF Field Group</h2>
<p>The next thing you are going to want to do is to create an Advanced Custom Fields field group.</p>
<p>What is a field group you ask yourself sheepishly? Think of a field group as a group of fields that you&#8217;ll use on the same post type or category.</p>
<p>For example, you can create a field group for a category of blogs called &#8220;Homes&#8221; on your website that lists homes for sale.</p>
<p>Or, perhaps you want to create a field group for the Insurance Agents that work for the insurance agency that you are building the website for.</p>
<p>It&#8217;s that simple!</p>
<p>Within a field group, you&#8217;ll have the opportunity to create fields that you&#8217;ll use to populate content on the posts/pages that use the page template that you assign the field group to.</p>
<p>So, the flow is the following. A post type has a field group assigned to it. Within a field group, you create fields.</p>
<p>Using one of the examples above, we could create the following filed under our &#8220;Insurance Agent&#8221; field group.</p>
<ul>
<li style="text-align: left;">Name &#8211; Text Field Type</li>
<li>Phone &#8211; Number Field Type</li>
<li>Headshot &#8211; Image Field Type</li>
<li>Bio &#8211; Textbox Field Type</li>
</ul>
<p>Then, you can assign this Insurance Agent filed group to show on posts within your post category &#8220;Insurance Agent&#8221;.</p>
<h2>Use Your ACF Fields In Your Divi Layout</h2>
<p>The next step is to call your ACF fields into your Divi modules using the Dynamic Content feature.</p>
<p>To do so, add a Divi module that corresponds with the ACF field you will be using in that section. For example, if you want to use the &#8220;Name&#8221; ACF field, you will add a text module to your Divi Layout.</p>
<p>With the module settings open, click on the &#8220;triple pancake&#8221; icon in the top right of the text box. This will open the Dynamic Content option. You will be presented with a list of dynamic content options.</p>
<p>The ACF fields will be at the bottom of this list. Scroll down to see them.</p>
<p>Select the ACF field that you will be using in this template.</p>
<p>What are the Before and After fields used for you ask? I will tell you. YOu can insert HTML into those fields to modify the tag.</p>
<p>For example. If you&#8217;d like the &#8220;Name&#8221; ACF field to be an h tag such as a &lt;h3&gt;, then add &lt;h3&gt; to the before field and &lt;/h3&gt; to the after field.</p>
<p>This will wrap your ACF content with an &lt;h3&gt; open and close tag.</p>
<h2>Advanced ACF Field Insertion Using Shortcodes</h2>
<p>The above method works well are placing a fixed piece of content in an area on your template that doesn&#8217;t interact with other content.</p>
<p>HOwever, what do you do if you need to play dynamic content within your text?! WHAT THEN!?</p>
<p>Thankfully, you can use ACF Field shortcodes within your Divi content to dynamically insert ACF fields throughout your Divi content!</p>
<p>Awesome stuff!</p>
<p>Do do so, all you do is add the ACF shortcode into your content in the following way:</p>
<blockquote><p>[acf field=&#8221;field_name&#8221;]</p></blockquote>
<p>Replace the &#8220;field_name&#8221; with the actual name of your ACF field.</p>
<p>Using the example above, say you wanted to add the Insurance reps name into a standard template that appears on every insurance reps page.</p>
<p>To do this, you will simply add the shortcode into the content where you would like the Insurance Reps name to appear.</p>
<p>For example. &#8220;All of our insurance reps are certified. [acf field=&#8221;name&#8221;] has shown proficiency in client management, vehicle damage assessment, and blah blah blah.</p>
<p>It&#8217;s that simple!</p>
<h2>Conclusion</h2>
<p>Now that you know how to use ACF fields into Divi layouts, the world is your oyster! No, but for reals guys, it opens up the door to many many possibilities and customizations.</p>
<p>Go forth and conquer le ThriftyWP army!</p>
<div class="xs_social_share_widget xs_share_url after_content 		main_content  wslu-style-1 wslu-share-box-shaped wslu-fill-colored wslu-none wslu-share-horizontal wslu-theme-font-no wslu-main_content">
<ul>
			        </ul>
</p></div>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>How To Fix Mixed Content https Errors On Your WordPress Website</title>
		<link>https://thriftywp.com/how-to-fix-https-errors-on-your-wordpress-website/</link>
		
		<dc:creator><![CDATA[jaroncito]]></dc:creator>
		<pubDate>Mon, 09 Mar 2020 03:52:08 +0000</pubDate>
				<category><![CDATA[Security]]></category>
		<category><![CDATA[WordPress]]></category>
		<guid isPermaLink="false">https://thriftywp.com/?p=206</guid>

					<description><![CDATA[Ooooh boy. You&#8217;ve purchased and configured an SSL certificate on your hosting server for your website domain. Yet, you do not see the desired white lock icon in your address bar. Instead, you see an upside-down exclamation point in a circle! On further inspection, you are told that &#8220;Your connection to this site is not [&#8230;]]]></description>
										<content:encoded><![CDATA[<p>Ooooh boy. You&#8217;ve purchased and configured an SSL certificate on your hosting server for your website domain.</p>
<p>Yet, you do not see the desired white lock icon in your address bar. Instead, you see an upside-down exclamation point in a circle!</p>
<p>On further inspection, you are told that &#8220;Your connection to this site is not secure.&#8221;</p>
<p><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-234" src="/wp-content/uploads/2020/06/fix-https-errors-on-wordpress-webiste-secure-vs-not-secure.jpg" alt="" width="634" height="185" /></p>
<p>What? Why not? You did all the right things! What the cow is going on here?</p>
<p>Well, let&#8217;s figure that out.</p>
<p>A &#8220;Your connection to this site is not fully secure&#8221; message usually means that the web browser has loaded both secure (https) resources as well as nonsecure (http) resources.</p>
<p>As it has not loaded 100% secure resources, it cannot display the lock icon.</p>
<p>Read on to learn how to diagnose the issue as well as find out how to fix it.</p>
<h2>How To Use Your Browser Inspector</h2>
<p>The first thing you want to do is figure out why the browser is displaying the error. To do so, you need to open up your browser inspector and look at the console.</p>
<p>This guide will focus on the <a href="https://www.google.com/chrome/" target="_blank" rel="noopener noreferrer">Google Chrome browser</a>. If you don&#8217;t have Google Chrome and would like to try it, click on that link to go to the download page.</p>
<p>Google Chrome dominates the web browser market at around 65% of web traffic at the time this article was written.</p>
<p>In Chrome or your browser of choice, right-click anywhere on your web page or the target webpage you want to diagnose.</p>
<p>Next, click on the &#8220;Inspect&#8221; link.</p>
<p><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-236" src="/wp-content/uploads/2020/06/open-inspector-in-chrome.jpg" alt="" width="591" height="450" /></p>
<p>This will bring up the Dev Tools &#8211; inspector window. The window will be full of all sorts of useful information. However, we are only going to take a look at a couple of tabs to help us diagnose our https security issue.</p>
<p>Let&#8217;s first click on the &#8220;Security&#8221; tab in the Dev Tools &#8211; Inspector window. We want to make sure that our SSL certificate has loaded and is not the reason for the https issue.</p>
<p>The security tab should be the second tab from the right. If you instead see &#8220;&gt;&gt;&#8221; as the last tab, your browser window is not wide enough to display all of the tabs.</p>
<p>In this case, either grab the edge of your browser window and make it wider or, click on the &#8220;&gt;&gt;&#8221; tab which will produce a drop-down menu of the remaining tabs. Click on &#8220;Security.&#8221;</p>
<p>If your SSL certificate has loaded and is operating as it should, you&#8217;ll probably see something like the following.</p>
<p><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-237" src="/wp-content/uploads/2020/06/chrome-inspector-security-tab.jpg" alt="" width="842" height="424" /></p>
<p>Congratulations! It isn&#8217;t an issue with your SSL certificate.</p>
<p>Next, click on the second tab from the left titled &#8220;Console.&#8221;</p>
<p>On this tab, you&#8217;ll see a list of all of the issues and errors the browser has identified on the webpage you targeted.</p>
<p>Read on to learn to find the right information.</p>
<h2>Look For https Specific Errors</h2>
<p>There may be several issues/errors found by the browser on any specific webpage. Hopefully, this is not the case on your own website.</p>
<p>You are going to look for a specific error message on the console tab. It will say &#8220;Mixed Content: The page at &#8216;https://otherdomain.com/&#8217; was loaded over HTTPS, but requested an insecure image &#8216;http://otherdomain.com/wp-content/uploads/2019/05/otherdomain-Logo.png&#8217;. This content should also be served over HTTPS.&#8221;</p>
<p><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-238" src="/wp-content/uploads/2020/06/chrome-inspector-console-errors.jpg" alt="" width="839" height="335" /></p>
<p>Wowzers. What does all of this mean? Basically, your website wants to load everything over the secure https protocol. However, some resources are not set to load over https. Darn.</p>
<p>This can happen for a variety of reasons, such as:</p>
<ul>
<li>You created your website without an SSL certificate, and later someone did the bare minimum to move your website to https (they pretty much only updated the home and site URL in WordPress)</li>
<li>You have hard-coded URLs in your website files. Common occurrences are CSS file background URLs as well as fonts.</li>
<li>Your theme loads the logo and favicon through its theme settings, which for some reason, are outside of the database and other theme files.</li>
</ul>
<p>The https error in the console will point you in the right direction. Let&#8217;s see what info we can glean from the https errors listed above.</p>
<p>We see that each of the mixed content https issues all refer to the same logo file. That helps narrow it down. I know that the website is built on Divi and that Divi uses theme settings to place the logo URL.</p>
<p>With this information, I could fix the https issue by visiting the website theme options and updating the logo file URL to https.</p>
<p>Hopefully, your fix is this easy. If not, keep reading to learn how to fix your insecure resources.</p>
<h2>Fix https Errors Using WP CLI Command Line</h2>
<p><strong><em>Quick note: Grab an export of your database before performing any of the following fixes. I&#8217;ve not had problems with the below methods, but you never know. Better to be safe than sorry. </em></strong></p>
<p>My personal belief is to fix the problem at the root. Otherwise, you are just covering up the problem and hoping that it doesn&#8217;t resurface at some point in the future.</p>
<p>This method requires that you have root access to the server where your website is hosted. You will also need to be able to login to the server via ssh.</p>
<p>Your server must also have the <a href="https://wp-cli.org/" target="_blank" rel="noopener noreferrer">WP CLI</a> (WordPress Command Line Interface) interface installed.</p>
<p>Most major website hosts that I&#8217;ve used or worked with have WP CLI installed.</p>
<p>Once logged into the server via ssh, navigate to the root directory of your WordPress install. This should be the directory with your wp-config.php file in it. Then, simply enter the following command:</p>
<pre><code>wp search-replace http:// https://</code></pre>
<p>This command will crawl through your database and replace all instances of &#8220;http://&#8221; with &#8220;https://&#8221;.</p>
<p>This method will usually fix any https issue that your browser has. However, there are sometimes exceptions.</p>
<p>Some themes pull in the website Logo and Favicon via theme specific pages.</p>
<p>If you still have an https error after running the above WP CLI search-replace command, inspect your webpage once again. If the issue references your logo or favicon image file, you simply need to update the file URL in your theme settings.</p>
<p>For example, the <a href="https://www.elegantthemes.com/gallery/divi/" target="_blank" rel="noopener noreferrer">Divi theme</a> sets the website logo in the theme options. The search-replace WP CLI command will not update the logo file URL. You must navigate to the Divi theme options to manually update the logo file URL.</p>
<h2>Fix https Errors Using A Plugin</h2>
<p><strong><em>Quick note: Grab an export of your database before performing any of the following fixes. I&#8217;ve not had problems with the below methods, but you never know. Better to be safe than sorry. </em></strong></p>
<p>Okay. Perhaps you don&#8217;t have root access to your hosting server. Or, perchance, you have no idea what SSH access is, how to turn it on, or how to create and upload a key to the server.</p>
<p>Understandable.</p>
<p>This option is usually just as good.</p>
<p>There are two different groups of plugins that can help you fix your website https issues:</p>
<ol>
<li>Those that update your database resource URLs similar to the WP CLI method explained above.</li>
<li>Those that update the URL by some other means.</li>
</ol>
<p>We&#8217;ll go over the different plugin options below.</p>
<h3>Plugins That Update Your Database Resource URLs</h3>
<p>These plugins allow you to perform the same search-replace as the WP CLI command.</p>
<ol>
<li><a href="https://wordpress.org/plugins/better-search-replace/" target="_blank" rel="noopener noreferrer">Better Search Replace</a>.</li>
<li><a href="https://wordpress.org/plugins/velvet-blues-update-urls/" target="_blank" rel="noopener noreferrer">Velvet Blues</a>.</li>
</ol>
<h4 id="bsr">Better Search Replace</h4>
<p>Install the plugin. Navigate to your plugins page, click on &#8220;Add New&#8221;, search for the plugin, then click &#8220;Install Now&#8221;. Activate the plugin.</p>
<p><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-273" src="/wp-content/uploads/2020/06/better-search-replace-install-now.jpg" alt="" width="506" height="243" /></p>
<p>Hext, hover on &#8220;Tools&#8221; in your dashboard menu. You should now see a link for &#8220;Better Search Replace.&#8221; Click that link.</p>
<p><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-248" src="/wp-content/uploads/2020/06/WordPress-tools-better-search-replace.jpg" alt="" width="638" height="456" /></p>
<p>On the next screen, do the following:</p>
<ul>
<li>Search For: http://</li>
<li>Replace With: https://</li>
<li>Select Tables: Select all of the tables. You really only need to select the wp_posts and wp_postmeta  tables, but select them all just in case there are some hidden http urls hiding in other tables (e.g. you are using other plugins that have their own database tables)</li>
<li>Case-Insensitive?: Click the checkbox. You want to grab any case variations of http and https.</li>
<li>Replace GUIDs: Leave this unchecked.</li>
<li>Run as dry run?: Keep this checked. It will show you how many instances of your search show up in each table.</li>
</ul>
<p>Click the &#8220;Run Search/Replace&#8221; button.</p>
<p><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-249" src="/wp-content/uploads/2020/06/better-search-replace-setup.jpg" alt="" width="820" height="591" /></p>
<p>You&#8217;ll get the Dry Run results at the top of the page.</p>
<p><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-250" src="/wp-content/uploads/2020/06/better-search-replace-dry-run-results.jpg" alt="" width="730" height="133" /></p>
<p>Click on the &#8220;Click here&#8221; link to see in what tables the update will run.</p>
<p><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-251" src="/wp-content/uploads/2020/06/better-search-replace-dry-run-details.jpg" alt="" width="814" height="504" /></p>
<p>Look at that! There are instances of http in the wp_comments and wp_options tables as well! Good thing we selected all of the database tables!</p>
<p>If you are satisfied with the resulsts, scroll down to the bottom of the Better Search Replace settings page and uncheck the &#8220;Run as dry run?&#8221; checkbox.</p>
<p>Click the &#8220;Run Reach/Replace&#8221; button again.</p>
<p>Go back to your home page, clear your browser cache, and refresh your page. You should be set with the nice lock icon in the address bar! Hooray!</p>
<h4>Velvet Blues</h4>
<p>The process begins the same. Install the plugin. Navigate to your plugins page, click on &#8220;Add New&#8221;, search for the plugin, then click &#8220;Install Now&#8221;. Activate the plugin.</p>
<p><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-274" src="/wp-content/uploads/2020/06/velvet-blues-install-now.jpg" alt="" width="512" height="241" /></p>
<p>Hext, hover on &#8220;Tools&#8221; in your dashboard menu. You should now see a link for &#8220;Update URLs.&#8221; Click that link.</p>
<p><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-269" src="/wp-content/uploads/2020/06/Velvet-blues-update-urls.jpg" alt="" width="310" height="221" /></p>
<p>On the next screen, do the following:</p>
<ul>
<li>Old URL: http://</li>
<li>New URL: https://</li>
<li>URLs in page content ( posts, pages, custom post types, revisions ): Check the checkbox</li>
<li>URLs in excerpts: Check the checkbox</li>
<li>URLs in links: Check the checkbox</li>
<li>URLs for attachments ( images, documents, general media ): Check the checkbox</li>
<li>URLs in custom fields and meta boxes: Check the checkbox</li>
<li>Update ALL GUIDs: DONT check the checkbox</li>
</ul>
<p>See. Like this.</p>
<p><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-270" src="/wp-content/uploads/2020/06/velvet-blues-settings-page.jpg" alt="" width="659" height="458" /></p>
<p>Once that is done, click the &#8220;Update URLs NOW&#8221; button.</p>
<p>You&#8217;ll get a success report of what Velvet Blues was able to update.</p>
<p><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-271" src="/wp-content/uploads/2020/06/velvet-blues-success-report.jpg" alt="" width="427" height="228" /></p>
<p>Navigate to the webpage that was not fully secure, clear your browser cache, refresh the page and voila! You should now have the nice lock icon in your address bar.</p>
<h3>Plugins That Update Your Database URLs by some other means</h3>
<p>The above methods should cure what ales you. However, some https issues can be stubborn.</p>
<p>If you still aren&#8217;t seeing the lock icon in your address bar are still plagued by the circled upside-down exclamation point, read on! We&#8217;ll find a solution that works.</p>
<p>I do believe that the above solutions should be tried and implemented first. While the solutions that are presented below should work where the solutions above fail, the solutions above are addressing the root of the problem.</p>
<p>This next plugin will force all resources load via https regardless of what their URL says (except for hard-coded URLs in files &#8211; such as your style.css)</p>
<ol>
<li><a href="https://wordpress.org/plugins/really-simple-ssl/" target="_blank" rel="noopener noreferrer">Really Simple SSL</a>.</li>
</ol>
<h4 id="reallysimplessl">Really Simple SSL</h4>
<p>As always, you need to install this plugin. Go to your plugins page, click on &#8220;Add New&#8221; and search for &#8220;Really Simple SSL.&#8221; Well done!</p>
<p><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-275" src="/wp-content/uploads/2020/06/really-simple-ssl-install-now.jpg" alt="" width="512" height="259" /></p>
<p>Go ahead and activate that bad rad.</p>
<p>You&#8217;ll then be presented with the following screen letting you know what it will and won&#8217;t fix. Again, if you have hardcoded URLs in your CSS or JS files, you&#8217;ll need to fix those manually.</p>
<p><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-276" src="/wp-content/uploads/2020/06/really-simple-ssl-activate.jpg" alt="" width="1036" height="322" /></p>
<p>Ready? Click on the &#8220;Go ahead, activate SSL!&#8221; In most situations, that is all you will have to do! This plugin does wonders.</p>
<p>Why is that?</p>
<p>Click on the settings page on the next screen after activation. It will look like this. There are several settings here. We&#8217;ll just be writing about the first two. In most scenarios, you won&#8217;t have to mess with any other settings.</p>
<p><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-277" src="/wp-content/uploads/2020/06/really-simple-ssl-settings.jpg" alt="" width="315" height="248" /></p>
<p>See that first setting? &#8220;Mixed content fixer&#8221;. That lil guy does wonders. It recognizes the mixed content your browser is loading and forces it to load via https! Awesome possum.</p>
<h2>Conclusion</h2>
<p>If you&#8217;ve made it this far, there is a 98% chance you&#8217;ve resolved your https issue.</p>
<p>Why do I believe that? Because these solutions have solved 98% of the https issues that I&#8217;ve encountered.</p>
<p>If you found this content useful, then perhaps leave a comment or something and be like &#8220;I found this content useful.&#8221; Then I&#8217;ll be like, &#8220;Awesome.&#8221;</p>
<div class="xs_social_share_widget xs_share_url after_content 		main_content  wslu-style-1 wslu-share-box-shaped wslu-fill-colored wslu-none wslu-share-horizontal wslu-theme-font-no wslu-main_content">
<ul>
			        </ul>
</p></div>
]]></content:encoded>
					
		
		
			</item>
	</channel>
</rss>
