<?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></title>
	<atom:link href="https://codekosh.com/feed/" rel="self" type="application/rss+xml" />
	<link>https://codekosh.com/</link>
	<description></description>
	<lastBuildDate>Sun, 01 Nov 2026 05:51:55 +0000</lastBuildDate>
	<language>en-US</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=7.1.4</generator>

<image>
	<url>https://codekosh.com/wp-content/uploads/2025/08/Fav-ico-150x150.jpg</url>
	<title></title>
	<link>https://codekosh.com/</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>How to Add Free Repeater Fields in ACF: Complete Guide to Codekosh Custom Repeater Field</title>
		<link>https://codekosh.com/how-to-add-free-repeater-fields-in-acf-complete-guide-to-codekosh-custom-repeater-field/</link>
					<comments>https://codekosh.com/how-to-add-free-repeater-fields-in-acf-complete-guide-to-codekosh-custom-repeater-field/#respond</comments>
		
		<dc:creator><![CDATA[Shubham Rana]]></dc:creator>
		<pubDate>Sun, 01 Nov 2026 05:27:01 +0000</pubDate>
				<category><![CDATA[Core Php]]></category>
		<category><![CDATA[Development]]></category>
		<category><![CDATA[Elementor]]></category>
		<category><![CDATA[SEO]]></category>
		<category><![CDATA[Web development]]></category>
		<category><![CDATA[WordPress]]></category>
		<category><![CDATA[WordPress Plugin]]></category>
		<guid isPermaLink="false">https://codekosh.com/?p=8359</guid>

					<description><![CDATA[<p>Introduction: The ACF Repeater Dilemma Advanced Custom Fields (ACF) is one of the most trusted tools in the WordPress developer [&#8230;]</p>
<p>The post <a href="https://codekosh.com/how-to-add-free-repeater-fields-in-acf-complete-guide-to-codekosh-custom-repeater-field/">How to Add Free Repeater Fields in ACF: Complete Guide to Codekosh Custom Repeater Field</a> appeared first on <a href="https://codekosh.com"></a>.</p>
]]></description>
										<content:encoded><![CDATA[<h2 data-pm-slice="1 1 []">Introduction: The ACF Repeater Dilemma</h2>
<p>Advanced Custom Fields (ACF) is one of the most trusted tools in the WordPress developer ecosystem. From portfolio showcases to event schedules and pricing tables, repetitive structured data is everywhere in modern web design.</p>
<p>However, standard ACF users hit a common roadblock: <strong>the official Repeater Field is strictly locked behind ACF Pro</strong>.</p>
<p>While ACF Pro is a fantastic product, many freelance developers, agencies, and small business owners building lean client sites find that purchasing an ongoing license for simple repeating tables is cost-prohibitive. Furthermore, many existing community add-ons are outdated, introduce database bloat, or break whenever WordPress releases a major core update.</p>
<p data-pm-slice="1 1 []">To solve this problem, we built and released <a title="null" href="https://wordpress.org/plugins/codekosh-custom-repeater-field/" target="_blank" rel="noopener"><strong>Codekosh Custom Repeater Field for Advanced Custom Fields</strong></a>—a 100% free, lightweight, and modern repeating field plugin published directly on the official WordPress.org plugin directory.</p>
<p>In this guide, we will explore:</p>
<ol>
<li>What the Codekosh Custom Repeater Field is.</li>
<li>The core problems it solves.</li>
<li>How to configure subfields using simple pipe-separated syntax.</li>
<li>How to display repeating data on the frontend using PHP.</li>
</ol>
<h2>What is Codekosh Custom Repeater Field?</h2>
<p><strong>Codekosh Custom Repeater Field for Advanced Custom Fields</strong> is a lightweight extension that adds a new, fully functional <strong>Custom Repeater</strong> field type to your free version of ACF (compatible with ACF 5.8+ through WordPress 6.x and 7.x).</p>
<p>Instead of managing complex nested subfield interfaces, Codekosh allows you to configure your repeating columns using a clean, text-based syntax. Once defined, your authors and content managers get a slick, intuitive tabular interface with reordering, dynamic row creation, and rich media management.</p>
<h3>Key Features at a Glance</h3>
<ul>
<li><strong>100% Free &amp; Open Source:</strong> Full repeating table functionality without requiring ACF Pro.</li>
<li><strong>WYSIWYG Rich Text Support:</strong> Add formatted descriptions, bullet lists, bold text, and links directly inside repeating rows without JavaScript breaking upon drag-and-drop.</li>
<li><strong>Drag-and-Drop Sorting:</strong> Smooth row reordering powered by WordPress core&#8217;s native jQuery UI Sortable library.</li>
<li><strong>Multiple Field Types Supported:</strong>
<ul>
<li>Single-line Text (<code>text</code>)</li>
<li>URLs &amp; Links (<code>url</code>)</li>
<li>Multi-line Textareas (<code>textarea</code>)</li>
<li>WYSIWYG TinyMCE Rich Text (<code>wysiwyg</code>)</li>
<li>WordPress Media Image Uploaders (<code>image</code>)</li>
<li>HTML5 Date Pickers (<code>date</code>)</li>
</ul>
</li>
<li><strong>Clean Database Architecture:</strong> Saves data in clean arrays, avoiding unnecessary database bloat or duplicate orphaned postmeta rows.</li>
<li><strong>Safe &amp; WPCS Compliant:</strong> Fully sanitized inputs, strictly escaped outputs, and zero external CDN dependencies.</li>
</ul>
<h2>Step-by-Step Tutorial: Setting Up Your First Custom Repeater</h2>
<p>Let&#8217;s walk through building an interactive &#8220;Team Members&#8221; section using the plugin.</p>
<h3>Step 1: Install &amp; Activate the Plugin</h3>
<ol>
<li>Go to your WordPress Dashboard and navigate to <strong>Plugins &gt; Add New Plugin</strong>.</li>
<li>In the search box, type: <code>Codekosh Custom Repeater Field</code>.</li>
<li>Click <strong>Install Now</strong>, then click <strong>Activate</strong>. <em>(Note: Ensure you already have Advanced Custom Fields installed and activated).</em></li>
</ol>
<h3>Step 2: Configure the Field in ACF</h3>
<ol>
<li>Go to <strong>ACF &gt; Field Groups</strong> (or <strong>Custom Fields &gt; Field Groups</strong>) and click <strong>Add Field Group</strong>.</li>
<li>Add a title (e.g., <em>Page Settings</em>).</li>
<li>Click <strong>+ Add Field</strong> and choose the settings below:
<ul>
<li><strong>Field Type:</strong> Select <code>Custom Repeater</code> (found under the Relational category).</li>
<li><strong>Field Label:</strong> <code>Team Members</code></li>
<li><strong>Field Name:</strong> <code>team_members</code></li>
<li><strong>Button Text:</strong> <code>Add Team Member</code> (Default: <code>+ Add Row</code>)</li>
</ul>
</li>
</ol>
<h3>Step 3: Define Your Columns</h3>
<p>In the <strong>Column Definitions</strong> textarea, specify your subfields line by line using this clean pattern:</p>
<pre><code>field_slug : Field Label : field_type
</code></pre>
<h4>Example Configuration:</h4>
<pre><code>member_name : Full Name : text
role        : Job Title : text
bio         : Biography : wysiwyg
linkedin    : Profile URL : url
photo       : Profile Picture : image
start_date  : Joined Date : date
</code></pre>
<p>Save or update your Field Group.</p>
<p><img fetchpriority="high" decoding="async" class="alignnone  wp-image-8365" src="https://codekosh.com/wp-content/uploads/2026/11/screenshot-1-300x168.jpg" alt="ACF Fields Area" width="425" height="238" srcset="https://codekosh.com/wp-content/uploads/2026/11/screenshot-1-300x168.jpg 300w, https://codekosh.com/wp-content/uploads/2026/11/screenshot-1-1024x572.jpg 1024w, https://codekosh.com/wp-content/uploads/2026/11/screenshot-1-768x429.jpg 768w, https://codekosh.com/wp-content/uploads/2026/11/screenshot-1-1536x858.jpg 1536w, https://codekosh.com/wp-content/uploads/2026/11/screenshot-1.jpg 1920w" sizes="(max-width: 425px) 100vw, 425px" />    <img decoding="async" class="alignnone  wp-image-8366" src="https://codekosh.com/wp-content/uploads/2026/11/screenshot-2-300x168.jpg" alt="Showing Free Repeater Fields in Pages, Posts etc." width="431" height="241" srcset="https://codekosh.com/wp-content/uploads/2026/11/screenshot-2-300x168.jpg 300w, https://codekosh.com/wp-content/uploads/2026/11/screenshot-2-1024x572.jpg 1024w, https://codekosh.com/wp-content/uploads/2026/11/screenshot-2-768x429.jpg 768w, https://codekosh.com/wp-content/uploads/2026/11/screenshot-2-1536x858.jpg 1536w, https://codekosh.com/wp-content/uploads/2026/11/screenshot-2.jpg 1920w" sizes="(max-width: 431px) 100vw, 431px" /></p>
<h3>Step 4: Add Repeating Rows in the Post Editor</h3>
<ol>
<li>Open any Post or Page where your Field Group is assigned.</li>
<li>You will see a clean, organized table matching your defined columns.</li>
<li>Click <strong>+ Add Team Member</strong> to spawn new rows.</li>
<li>Click the upload button to choose profile pictures via the native WordPress Media Library.</li>
<li>Use the drag handles (<code>:::</code>) on the left to reorder team members on the fly.</li>
<li>Click <strong>Update</strong> to save the post.</li>
</ol>
<h2>Frontend Integration: How to Display the Data in Your Theme</h2>
<p>Because the plugin stores field data in standard array structures, retrieving and printing values using the familiar ACF <code>get_field()</code> function is fast and intuitive.</p>
<p>Add this code snippet to your theme template file (<code>page.php</code>, <code>single.php</code>, or your custom template part):</p>
<pre data-pm-slice="1 1 []"><code>&lt;?php
/**
 * Display Codekosh Custom Repeater Field Data
 */
$team_members = get_field( 'team_members' );

if ( ! empty( $team_members ) &amp;&amp; is_array( $team_members ) ) : ?&gt;
    &lt;section class="team-grid"&gt;
        &lt;div class="container"&gt;
            &lt;h2 class="section-title"&gt;Meet Our Team&lt;/h2&gt;
            
            &lt;div class="team-cards"&gt;
                &lt;?php foreach ( $team_members as $member ) : 
                    // Safely extract subfield values
                    $name       = ! empty( $member['member_name'] ) ? esc_html( $member['member_name'] ) : '';
                    $role       = ! empty( $member['role'] ) ? esc_html( $member['role'] ) : '';
                    $linkedin   = ! empty( $member['linkedin'] ) ? esc_url( $member['linkedin'] ) : '';
                    $bio        = ! empty( $member['bio'] ) ? wp_kses_post( $member['bio'] ) : '';
                    $photo_id   = ! empty( $member['photo'] ) ? absint( $member['photo'] ) : 0;
                    $start_date = ! empty( $member['start_date'] ) ? esc_html( $member['start_date'] ) : '';
                ?&gt;
                    &lt;article class="team-card"&gt;
                        &lt;?php if ( $photo_id ) : ?&gt;
                            &lt;div class="team-avatar"&gt;
                                &lt;?php echo wp_get_attachment_image( $photo_id, 'medium', false, [ 'class' =&gt; 'avatar-img' ] ); ?&gt;
                            &lt;/div&gt;
                        &lt;?php endif; ?&gt;

                        &lt;div class="team-info"&gt;
                            &lt;?php if ( $name ) : ?&gt;
                                &lt;h3 class="team-name"&gt;&lt;?php echo $name; ?&gt;&lt;/h3&gt;
                            &lt;?php endif; ?&gt;

                            &lt;?php if ( $role ) : ?&gt;
                                &lt;p class="team-role"&gt;&lt;?php echo $role; ?&gt;&lt;/p&gt;
                            &lt;?php endif; ?&gt;

                            &lt;?php if ( $bio ) : ?&gt;
                                &lt;div class="team-bio"&gt;
                                    &lt;?php echo $bio; ?&gt;
                                &lt;/div&gt;
                            &lt;?php endif; ?&gt;

                            &lt;?php if ( $linkedin ) : ?&gt;
                                &lt;a href="&lt;?php echo $linkedin; ?&gt;" target="_blank" rel="noopener noreferrer" class="team-link"&gt;
                                    Connect on LinkedIn &amp;rarr;
                                &lt;/a&gt;
                            &lt;?php endif; ?&gt;
                        &lt;/div&gt;
                    &lt;/article&gt;
                &lt;?php endforeach; ?&gt;
            &lt;/div&gt;
        &lt;/div&gt;
    &lt;/section&gt;
&lt;?php endif; ?&gt;</code></pre>
<h2><span class="selected">Why Choose Codekosh Custom Repeater Over Heavy Alternatives?</span></h2>
<table>
<tbody>
<tr>
<td><strong>Feature</strong></td>
<td><strong>Codekosh Custom Repeater</strong></td>
<td><strong>Traditional ACF Pro Repeater</strong></td>
<td><strong>Heavy Third-Party Addons</strong></td>
</tr>
<tr>
<td><strong><span class="selected">Cost</span></strong></td>
<td><span class="selected">100% Free (GPL v2+)</span></td>
<td><span class="selected">Paid Annual License</span></td>
<td><span class="selected">Mixed / Freemium</span></td>
</tr>
<tr>
<td><strong><span class="selected">Setup Time</span></strong></td>
<td><span class="selected">Under 2 minutes via text syntax</span></td>
<td><span class="selected">Requires manual nested field clicks</span></td>
<td><span class="selected">Complex multi-tab config</span></td>
</tr>
<tr>
<td><strong><span class="selected">WYSIWYG Inside Rows</span></strong></td>
<td><span class="selected">Full TinyMCE support included</span></td>
<td><span class="selected">Yes</span></td>
<td><span class="selected">Often breaks on drag</span></td>
</tr>
<tr>
<td><strong><span class="selected">Media Uploader</span></strong></td>
<td><span class="selected">Core WordPress Media Library modal</span></td>
<td><span class="selected">Yes</span></td>
<td><span class="selected">Custom buggy scripts</span></td>
</tr>
<tr>
<td><strong><span class="selected">Performance</span></strong></td>
<td><span class="selected">Zero external libraries or CDN calls</span></td>
<td><span class="selected">High</span></td>
<td><span class="selected">Often loads heavy CSS frameworks</span></td>
</tr>
</tbody>
</table>
<h2><span class="selected">Conclusion &amp; Next Steps</span></h2>
<p><span class="selected">Dynamic repeating data is an essential part of professional WordPress theme development. With </span><strong><span class="selected">Codekosh Custom Repeater Field for Advanced Custom Fields</span></strong><span class="selected">, you no longer need to compromise between project budget and clean site architecture.</span></p>
<ul>
<li><strong><span class="selected">Download the plugin on WordPress.org:</span></strong> <a title="null" href="https://wordpress.org/plugins/codekosh-custom-repeater-field/" target="_blank" rel="noopener"><span class="selected">Codekosh Custom Repeater Field</span></a></li>
<li><strong><span class="selected">Explore more tools &amp; tutorials:</span></strong><span class="selected"> Visit </span><a title="null" href="https://codekosh.com/"><span class="selected">Codekosh Solutions</span></a></li>
</ul>
<p><span class="selected">Have you tried using the Custom Repeater on your client sites? Drop your questions or feature requests in the comments below!</span></p>
<p>The post <a href="https://codekosh.com/how-to-add-free-repeater-fields-in-acf-complete-guide-to-codekosh-custom-repeater-field/">How to Add Free Repeater Fields in ACF: Complete Guide to Codekosh Custom Repeater Field</a> appeared first on <a href="https://codekosh.com"></a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://codekosh.com/how-to-add-free-repeater-fields-in-acf-complete-guide-to-codekosh-custom-repeater-field/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Connecting the Dots: How Webhooks &#038; Zapier Can Automate Your E-Commerce Sales Funnel</title>
		<link>https://codekosh.com/connecting-the-dots-how-webhooks-zapier-can-automate-your-e-commerce-sales-funnel/</link>
					<comments>https://codekosh.com/connecting-the-dots-how-webhooks-zapier-can-automate-your-e-commerce-sales-funnel/#respond</comments>
		
		<dc:creator><![CDATA[Shubham Rana]]></dc:creator>
		<pubDate>Mon, 12 Oct 2026 09:27:30 +0000</pubDate>
				<category><![CDATA[E-Commerce Automation]]></category>
		<guid isPermaLink="false">https://codekosh.com/?p=8346</guid>

					<description><![CDATA[<p>If you manage an e-commerce store, you know that the actual sale is only half the battle. What happens after [&#8230;]</p>
<p>The post <a href="https://codekosh.com/connecting-the-dots-how-webhooks-zapier-can-automate-your-e-commerce-sales-funnel/">Connecting the Dots: How Webhooks &#038; Zapier Can Automate Your E-Commerce Sales Funnel</a> appeared first on <a href="https://codekosh.com"></a>.</p>
]]></description>
										<content:encoded><![CDATA[<p data-path-to-node="3">If you manage an e-commerce store, you know that the actual sale is only half the battle. What happens <i data-path-to-node="3" data-index-in-node="103">after</i> the checkout—the order fulfillment, the CRM update, the post-purchase email sequence, the inventory sync—often involves a messy web of disconnected tools.</p>
<p data-path-to-node="4">When your storefront (like WooCommerce or Shopify), your CRM (like GoHighLevel), and your email marketing platform don&#8217;t talk to each other perfectly, it usually means someone on your team is exporting CSVs, manually updating records, or worse, letting warm leads slip through the cracks.</p>
<p data-path-to-node="5">The solution isn&#8217;t hiring more people to manage data entry; it&#8217;s connecting the dots with <b data-path-to-node="5" data-index-in-node="90">Webhooks and Zapier</b>.</p>
<h3 data-path-to-node="7">What is a Webhook? (The Non-Jargon Explanation)</h3>
<p data-path-to-node="8">Most apps communicate using standard APIs. Think of an API like a kid in the back seat on a road trip constantly asking, <i data-path-to-node="8" data-index-in-node="121">&#8220;Are we there yet? Are we there yet?&#8221;</i> The app has to keep checking the server (a process called polling) to see if a new order has come in. This is slow, inefficient, and eats up system resources.</p>
<p data-path-to-node="9">A <b data-path-to-node="9" data-index-in-node="2">Webhook</b>, on the other hand, is entirely event-driven. Your e-commerce store says, <i data-path-to-node="9" data-index-in-node="84">&#8220;I will tell you the exact millisecond a customer buys something, so you don&#8217;t have to keep asking.&#8221;</i></p>
<p><img decoding="async" class="alignnone size-medium wp-image-8349" src="https://codekosh.com/wp-content/uploads/2026/10/What-is-a-Webhook-The-Non-Jargon-Explanation-300x179.webp" alt="What is a Webhook? (The Non-Jargon Explanation)" width="100%" height="100%" srcset="https://codekosh.com/wp-content/uploads/2026/10/What-is-a-Webhook-The-Non-Jargon-Explanation-300x179.webp 300w, https://codekosh.com/wp-content/uploads/2026/10/What-is-a-Webhook-The-Non-Jargon-Explanation-1024x610.webp 1024w, https://codekosh.com/wp-content/uploads/2026/10/What-is-a-Webhook-The-Non-Jargon-Explanation-768x458.webp 768w, https://codekosh.com/wp-content/uploads/2026/10/What-is-a-Webhook-The-Non-Jargon-Explanation-1536x916.webp 1536w, https://codekosh.com/wp-content/uploads/2026/10/What-is-a-Webhook-The-Non-Jargon-Explanation.webp 1778w" sizes="(max-width: 300px) 100vw, 300px" /></p>
<p><span class="citation-43 citation-end-43">When you pair this instant, push-based communication with an automation platform like Zapier, you can trigger complex, multi-step workflows across more than 9,000 apps without writing a single line of code.</span> <span class="citation-42 citation-end-42">If an app doesn&#8217;t have a native integration, a webhook can bridge the gap instantly.</span></p>
<h3 data-path-to-node="13">3 High-Impact Automations Every E-Commerce Store Needs</h3>
<h4 data-path-to-node="14">1. The Instant Abandoned Cart Rescue</h4>
<p data-path-to-node="15">Cart abandonment is the silent killer of e-commerce revenue. While standard platforms have built-in recovery emails, webhooks allow you to take this further:</p>
<ul data-path-to-node="16">
<li>
<p data-path-to-node="16,0,0"><b data-path-to-node="16,0,0" data-index-in-node="0">The Trigger:</b> A customer enters their email but leaves the checkout page (Webhook fires).</p>
</li>
<li>
<p data-path-to-node="16,1,0"><b data-path-to-node="16,1,0" data-index-in-node="0">The Automation:</b> Zapier catches the webhook and instantly routes the data to your CRM.</p>
</li>
<li>
<p data-path-to-node="16,2,0"><b data-path-to-node="16,2,0" data-index-in-node="0">The Result:</b> The CRM immediately triggers an SMS reminder and a targeted retargeting ad on social media, catching the buyer while they are still holding their phone.</p>
</li>
</ul>
<h4 data-path-to-node="17">2. The VIP Customer Tagging &amp; Onboarding Experience</h4>
<p data-path-to-node="18">Not all customers are created equal. You want to roll out the red carpet for high-ticket buyers.</p>
<ul data-path-to-node="19">
<li>
<p data-path-to-node="19,0,0"><b data-path-to-node="19,0,0" data-index-in-node="0">The Trigger:</b> An order over a specific threshold (e.g., $500) is placed.</p>
</li>
<li>
<p data-path-to-node="19,1,0"><b data-path-to-node="19,1,0" data-index-in-node="0">The Automation:</b> Zapier filters the order value. If it&#8217;s over the threshold, it adds a &#8220;VIP&#8221; tag in your email platform, sends a notification to your team&#8217;s Slack channel, and enrolls the customer in a premium post-purchase sequence.</p>
</li>
<li>
<p data-path-to-node="19,2,0"><b data-path-to-node="19,2,0" data-index-in-node="0">The Result:</b> Your team can personally thank high-value buyers, increasing lifetime value and brand loyalty.</p>
</li>
</ul>
<h4 data-path-to-node="20">3. Intelligent Inventory &amp; Supplier Alerts</h4>
<p data-path-to-node="21">Overselling out-of-stock items creates a customer service nightmare.</p>
<ul data-path-to-node="22">
<li>
<p data-path-to-node="22,0,0"><b data-path-to-node="22,0,0" data-index-in-node="0">The Trigger:</b> Inventory for a specific SKU drops below 10 units.</p>
</li>
<li>
<p data-path-to-node="22,1,0"><b data-path-to-node="22,1,0" data-index-in-node="0">The Automation:</b> Zapier automatically drafts an email to your wholesale supplier with a reorder request and updates a shared Google Sheet for your fulfillment team.</p>
</li>
<li>
<p data-path-to-node="22,2,0"><b data-path-to-node="22,2,0" data-index-in-node="0">The Result:</b> You never run out of your best-sellers, and you eliminate the manual stock-checking process.</p>
</li>
</ul>
<h3 data-path-to-node="24">The True ROI of Automation</h3>
<p id="p-rc_37b14d7425af607a-26" data-path-to-node="25">Implementing webhooks and Zapier isn&#8217;t just a &#8220;nice to have&#8221; tech upgrade. <span class="citation-41 citation-end-41">It directly impacts your bottom line by providing real-time visibility into your metrics without manual exports.</span></p>
<p><img decoding="async" class="alignnone size-medium wp-image-8348" src="https://codekosh.com/wp-content/uploads/2026/10/The-True-ROI-of-Automation-300x172.webp" alt="The True ROI of Automation" width="100%" height="100%" srcset="https://codekosh.com/wp-content/uploads/2026/10/The-True-ROI-of-Automation-300x172.webp 300w, https://codekosh.com/wp-content/uploads/2026/10/The-True-ROI-of-Automation-1024x587.webp 1024w, https://codekosh.com/wp-content/uploads/2026/10/The-True-ROI-of-Automation-768x441.webp 768w, https://codekosh.com/wp-content/uploads/2026/10/The-True-ROI-of-Automation-1536x881.webp 1536w, https://codekosh.com/wp-content/uploads/2026/10/The-True-ROI-of-Automation.webp 1848w" sizes="(max-width: 300px) 100vw, 300px" /></p>
<ul>
<li>
<p id="p-rc_37b14d7425af607a-27" data-path-to-node="27,0,0"><b data-path-to-node="27,0,0" data-index-in-node="0">Eliminating Human Error:</b> <span class="citation-40 citation-end-40">Data moving from your store to your CRM is 100% accurate, every single time.</span></p>
</li>
<li>
<p data-path-to-node="27,1,0"><b data-path-to-node="27,1,0" data-index-in-node="0">Speeding Up Lead Response:</b> Leads and VIPs are engaged in seconds, not hours.</p>
</li>
<li>
<p data-path-to-node="27,2,0"><b data-path-to-node="27,2,0" data-index-in-node="0">Reclaiming Billable Hours:</b> Your marketing team can focus on strategy and creative, rather than administrative data transfer.<br />
<b data-path-to-node="29" data-index-in-node="0"><br />
Ready to connect your tools and automate your growth?</b> Stop wrestling with disconnected platforms. If you want to see how custom API and Zapier integrations can streamline your exact sales funnel, let&#8217;s talk. <b data-path-to-node="29" data-index-in-node="208"><a href="https://codekosh.com/contact-us/">Book a free</a> technical audit with our development team today, and we&#8217;ll map out your first automated workflow.</b></p>
</li>
</ul>
<p>The post <a href="https://codekosh.com/connecting-the-dots-how-webhooks-zapier-can-automate-your-e-commerce-sales-funnel/">Connecting the Dots: How Webhooks &#038; Zapier Can Automate Your E-Commerce Sales Funnel</a> appeared first on <a href="https://codekosh.com"></a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://codekosh.com/connecting-the-dots-how-webhooks-zapier-can-automate-your-e-commerce-sales-funnel/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>How to Use custom Shortcodes to Render Elementor Saved Templates</title>
		<link>https://codekosh.com/how-to-use-custom-shortcodes-to-render-elementor-saved-templates/</link>
					<comments>https://codekosh.com/how-to-use-custom-shortcodes-to-render-elementor-saved-templates/#respond</comments>
		
		<dc:creator><![CDATA[Shubham Rana]]></dc:creator>
		<pubDate>Mon, 23 Dec 2024 11:34:59 +0000</pubDate>
				<category><![CDATA[Core Php]]></category>
		<category><![CDATA[Elementor]]></category>
		<category><![CDATA[WordPress]]></category>
		<guid isPermaLink="false">https://codekosh.com/?p=1061</guid>

					<description><![CDATA[<p>Elementor is one of the most popular page builders used in the wordpress, but its free version doesn’t allow you [&#8230;]</p>
<p>The post <a href="https://codekosh.com/how-to-use-custom-shortcodes-to-render-elementor-saved-templates/">How to Use custom Shortcodes to Render Elementor Saved Templates</a> appeared first on <a href="https://codekosh.com"></a>.</p>
]]></description>
										<content:encoded><![CDATA[		<div data-elementor-type="wp-post" data-elementor-id="1061" class="elementor elementor-1061">
				<div class="elementor-element elementor-element-68c8d42 e-flex e-con-boxed e-con e-parent" data-id="68c8d42" data-element_type="container" data-e-type="container">
					<div class="e-con-inner">
				<div class="elementor-element elementor-element-5fdfcfd elementor-widget elementor-widget-text-editor" data-id="5fdfcfd" data-element_type="widget" data-e-type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
									<p>Elementor is one of the most popular page builders used in the wordpress, but its free version doesn’t allow you to use saved templates via shortcodes. Luckily, with a bit of custom code, you can achieve this functionality and make your templates reusable throughout your site.</p>								</div>
				</div>
				<div class="elementor-element elementor-element-db87d93 elementor-widget elementor-widget-heading" data-id="db87d93" data-element_type="widget" data-e-type="widget" data-widget_type="heading.default">
				<div class="elementor-widget-container">
					<h3 class="elementor-heading-title elementor-size-default">What Are Shortcodes in WordPress?
</h3>				</div>
				</div>
				<div class="elementor-element elementor-element-bdf138b elementor-widget elementor-widget-text-editor" data-id="bdf138b" data-element_type="widget" data-e-type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
									<p>Shortcodes are small pieces of code that allow you to insert dynamic content into WordPress pages or posts. The shortcode will be dynamically renders a saved Elementor template with the template ID.</p>								</div>
				</div>
				<div class="elementor-element elementor-element-75196ad elementor-widget elementor-widget-heading" data-id="75196ad" data-element_type="widget" data-e-type="widget" data-widget_type="heading.default">
				<div class="elementor-widget-container">
					<h3 class="elementor-heading-title elementor-size-default">Step-by-Step Guide to Render Elementor Saved Templates</h3>				</div>
				</div>
				<div class="elementor-element elementor-element-58a2e47 elementor-widget elementor-widget-text-editor" data-id="58a2e47" data-element_type="widget" data-e-type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
									Step 1: Create a custom function in your active theme file <strong>functions.php</strong> file.

Copy the below code and add in your <strong>functions.php</strong> file.								</div>
				</div>
				<div class="elementor-element elementor-element-045499b elementor-widget elementor-widget-html" data-id="045499b" data-element_type="widget" data-e-type="widget" data-widget_type="html.default">
				<div class="elementor-widget-container">
					<pre>
function codekosh_render_elementor_template($atts) {
    $atts = shortcode_atts(
        array(
            'id' => '',
        ),
        $atts,
        'elementor_template'
    );

    $template_id = intval($atts['id']);

    // Prevent recursion or invalid ID
    if (!$template_id || get_the_ID() == $template_id) {
        return '<!-- Invalid or Recursive Template Call -->';
    }

    // Make sure Elementor is loaded
    if (!did_action('elementor/loaded')) {
        return '<!-- Elementor not loaded -->';
    }

    // Enqueue necessary frontend assets (important for guests)
    Elementor\Plugin::$instance->frontend->enqueue_styles();
    Elementor\Plugin::$instance->frontend->enqueue_scripts();

    // Buffer output to return as shortcode
    ob_start();
    echo Elementor\Plugin::$instance->frontend->get_builder_content_for_display($template_id);
    return ob_get_clean();
}
add_shortcode('elementor_template', 'codekosh_render_elementor_template');

</pre>				</div>
				</div>
				<div class="elementor-element elementor-element-0798f16 elementor-widget elementor-widget-text-editor" data-id="0798f16" data-element_type="widget" data-e-type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
									<p>Step 2: Create and Save an Elementor Template.</p><ul><li>Go to Templates &gt; Saved Templates in the WordPress admin area.</li><li>Click Add New, design your section, and save it.</li></ul>								</div>
				</div>
				<div class="elementor-element elementor-element-8c7d9ab elementor-widget elementor-widget-image" data-id="8c7d9ab" data-element_type="widget" data-e-type="widget" data-widget_type="image.default">
				<div class="elementor-widget-container">
												<figure class="wp-caption">
											<a href="https://codekosh.com/wp-content/uploads/2024/12/image_2024_12_23T12_29_14_677Z.jpg" data-elementor-open-lightbox="yes" data-elementor-lightbox-title="image_2024_12_23T12_29_14_677Z" data-e-action-hash="#elementor-action%3Aaction%3Dlightbox%26settings%3DeyJpZCI6MTA4MSwidXJsIjoiaHR0cHM6XC9cL2NvZGVrb3NoLmNvbVwvd3AtY29udGVudFwvdXBsb2Fkc1wvMjAyNFwvMTJcL2ltYWdlXzIwMjRfMTJfMjNUMTJfMjlfMTRfNjc3Wi5qcGcifQ%3D%3D">
							<img decoding="async" width="1024" height="405" src="https://codekosh.com/wp-content/uploads/2024/12/image_2024_12_23T12_29_14_677Z-1024x405.jpg" class="attachment-large size-large wp-image-1081" alt="" srcset="https://codekosh.com/wp-content/uploads/2024/12/image_2024_12_23T12_29_14_677Z-1024x405.jpg 1024w, https://codekosh.com/wp-content/uploads/2024/12/image_2024_12_23T12_29_14_677Z-300x119.jpg 300w, https://codekosh.com/wp-content/uploads/2024/12/image_2024_12_23T12_29_14_677Z-768x304.jpg 768w, https://codekosh.com/wp-content/uploads/2024/12/image_2024_12_23T12_29_14_677Z-1536x607.jpg 1536w, https://codekosh.com/wp-content/uploads/2024/12/image_2024_12_23T12_29_14_677Z.jpg 1920w" sizes="(max-width: 1024px) 100vw, 1024px" />								</a>
											<figcaption class="widget-image-caption wp-caption-text"></figcaption>
										</figure>
									</div>
				</div>
				<div class="elementor-element elementor-element-016a840 elementor-widget elementor-widget-text-editor" data-id="016a840" data-element_type="widget" data-e-type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
									<ul><li>Note down the Template ID from the template list.</li></ul>								</div>
				</div>
				<div class="elementor-element elementor-element-a7f4012 elementor-widget elementor-widget-image" data-id="a7f4012" data-element_type="widget" data-e-type="widget" data-widget_type="image.default">
				<div class="elementor-widget-container">
												<figure class="wp-caption">
											<a href="https://codekosh.com/wp-content/uploads/2024/12/image_2024_12_23T12_37_03_600Z.png" data-elementor-open-lightbox="yes" data-elementor-lightbox-title="image_2024_12_23T12_37_03_600Z" data-e-action-hash="#elementor-action%3Aaction%3Dlightbox%26settings%3DeyJpZCI6MTA4MCwidXJsIjoiaHR0cHM6XC9cL2NvZGVrb3NoLmNvbVwvd3AtY29udGVudFwvdXBsb2Fkc1wvMjAyNFwvMTJcL2ltYWdlXzIwMjRfMTJfMjNUMTJfMzdfMDNfNjAwWi5wbmcifQ%3D%3D">
							<img loading="lazy" decoding="async" width="1024" height="562" src="https://codekosh.com/wp-content/uploads/2024/12/image_2024_12_23T12_37_03_600Z-1024x562.png" class="attachment-large size-large wp-image-1080" alt="" srcset="https://codekosh.com/wp-content/uploads/2024/12/image_2024_12_23T12_37_03_600Z-1024x562.png 1024w, https://codekosh.com/wp-content/uploads/2024/12/image_2024_12_23T12_37_03_600Z-300x165.png 300w, https://codekosh.com/wp-content/uploads/2024/12/image_2024_12_23T12_37_03_600Z-768x421.png 768w, https://codekosh.com/wp-content/uploads/2024/12/image_2024_12_23T12_37_03_600Z-1536x842.png 1536w, https://codekosh.com/wp-content/uploads/2024/12/image_2024_12_23T12_37_03_600Z-2048x1123.png 2048w" sizes="(max-width: 1024px) 100vw, 1024px" />								</a>
											<figcaption class="widget-image-caption wp-caption-text"></figcaption>
										</figure>
									</div>
				</div>
				<div class="elementor-element elementor-element-7cccfd3 elementor-widget elementor-widget-text-editor" data-id="7cccfd3" data-element_type="widget" data-e-type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
									<p>Step 3: Use the Shortcode</p><ul><li>Add the following shortcode wherever you want the saved template to appear as I have used under the elementor tabbing widget:</li></ul>								</div>
				</div>
				<div class="elementor-element elementor-element-e61b13a elementor-widget elementor-widget-image" data-id="e61b13a" data-element_type="widget" data-e-type="widget" data-widget_type="image.default">
				<div class="elementor-widget-container">
												<figure class="wp-caption">
											<a href="https://codekosh.com/wp-content/uploads/2024/12/image_2024_12_23T12_52_03_700Z.jpg" data-elementor-open-lightbox="yes" data-elementor-lightbox-title="image_2024_12_23T12_52_03_700Z" data-e-action-hash="#elementor-action%3Aaction%3Dlightbox%26settings%3DeyJpZCI6MTA4NCwidXJsIjoiaHR0cHM6XC9cL2NvZGVrb3NoLmNvbVwvd3AtY29udGVudFwvdXBsb2Fkc1wvMjAyNFwvMTJcL2ltYWdlXzIwMjRfMTJfMjNUMTJfNTJfMDNfNzAwWi5qcGcifQ%3D%3D">
							<img loading="lazy" decoding="async" width="1024" height="394" src="https://codekosh.com/wp-content/uploads/2024/12/image_2024_12_23T12_52_03_700Z-1024x394.jpg" class="attachment-large size-large wp-image-1084" alt="" srcset="https://codekosh.com/wp-content/uploads/2024/12/image_2024_12_23T12_52_03_700Z-1024x394.jpg 1024w, https://codekosh.com/wp-content/uploads/2024/12/image_2024_12_23T12_52_03_700Z-300x115.jpg 300w, https://codekosh.com/wp-content/uploads/2024/12/image_2024_12_23T12_52_03_700Z-768x296.jpg 768w, https://codekosh.com/wp-content/uploads/2024/12/image_2024_12_23T12_52_03_700Z-1536x591.jpg 1536w, https://codekosh.com/wp-content/uploads/2024/12/image_2024_12_23T12_52_03_700Z.jpg 1920w" sizes="(max-width: 1024px) 100vw, 1024px" />								</a>
											<figcaption class="widget-image-caption wp-caption-text"></figcaption>
										</figure>
									</div>
				</div>
				<div class="elementor-element elementor-element-8622f0e elementor-widget elementor-widget-text-editor" data-id="8622f0e" data-element_type="widget" data-e-type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
									<ul><li>Replace the ID of your saved template in the ShortCode.</li></ul>								</div>
				</div>
					</div>
				</div>
				</div>
		<p>The post <a href="https://codekosh.com/how-to-use-custom-shortcodes-to-render-elementor-saved-templates/">How to Use custom Shortcodes to Render Elementor Saved Templates</a> appeared first on <a href="https://codekosh.com"></a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://codekosh.com/how-to-use-custom-shortcodes-to-render-elementor-saved-templates/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>How to create the first react app</title>
		<link>https://codekosh.com/how-to-create-the-first-react-app/</link>
					<comments>https://codekosh.com/how-to-create-the-first-react-app/#respond</comments>
		
		<dc:creator><![CDATA[Shubham Rana]]></dc:creator>
		<pubDate>Sun, 16 Jun 2024 08:30:40 +0000</pubDate>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[Javascript]]></category>
		<category><![CDATA[React Js]]></category>
		<guid isPermaLink="false">https://codekosh.com/?p=726</guid>

					<description><![CDATA[<p>Introduction: Codekosh Solutions has the best tutorials for React app creation. Today we will explain to you how to create [&#8230;]</p>
<p>The post <a href="https://codekosh.com/how-to-create-the-first-react-app/">How to create the first react app</a> appeared first on <a href="https://codekosh.com"></a>.</p>
]]></description>
										<content:encoded><![CDATA[<p><strong>Introduction:</strong></p>
<p>Codekosh Solutions has the best tutorials for React app creation.<br />
Today we will explain to you how to create the React app.</p>
<p>React is a popular JavaScript framework used to build front-end applications. Developed by Facebook, React has made its strong presence in the dev community to build fast applications using an intuitive programming paradigm that ties JavaScript with an HTML-like syntax – JSX.</p>
<p>In short, ReactJs is a popular and widely used front-end library application system for developing single-page applications. Since it’s a library, we can install this library to Create React App for developing single-page applications.</p>
<p>Create React App is a tool or generator for new developers, allowing them to develop and execute React projects. You don’t have to configure it manually. In other words, you don’t have to worry about configuring a build system like Webpack. You don’t have to worry about most of the complicated systems of modern front-end development. You can start the React code with basic knowledge of Javascript.</p>
<p><strong>Requirements:</strong></p>
<p>You need the following things to start the React application.<br />
&#8212; Need to install the Node.js and NPM on your desktop. For Windows users, you can download the Node at <a href="https://nodejs.org/" target="_blank" rel="noopener">Node.org</a>.<br />
&#8212; For the MAC/Linux you can use the commands to install the node.js in your machine.</p>
<p>For the MAC users, I recommended installing the &#8220;Homebrew&#8221; (if you haven&#8217;t already) to install the Node.js.<br />
&#8212; Open your terminal and run the following command to install Homebrew:</p>
<pre>/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"</pre>
<p>&#8212; Install Node.js using the Homebrew library:</p>
<pre> brew install node</pre>
<p>&#8212; Verify the Node.js installation:</p>
<pre>node -v 
npm -v</pre>
<p>For Linux users open your terminal and you can install the Node.js by following commands:<br />
&#8212; Update your package list command:</p>
<pre> sudo apt update</pre>
<p>&#8212; To Install Node.js and npm from the default Ubuntu repository:</p>
<pre> sudo apt install nodejs npm</pre>
<p>Verify the installation:<br />
Check the installed versions of Node.js and npm:</p>
<pre>node -v 
 npm -v</pre>
<p>This will show you your machine&#8217;s installed version of Node and NPM.</p>
<p><strong>Steps to Create Your New React App</strong><br />
&#8212; Open your terminal to install the base project, run the following command:</p>
<p><img loading="lazy" decoding="async" class="alignnone wp-image-731" src="https://codekosh.com/wp-content/uploads/2024/06/image_2024_06_16T08_55_37_377Z-300x37.png" alt="" width="534" height="66" /></p>
<pre> npx create-react-app codekosh-react-tutorials</pre>
<p><img loading="lazy" decoding="async" class="alignnone wp-image-732" src="https://codekosh.com/wp-content/uploads/2024/06/image_2024_06_16T09_01_09_958Z-300x217.jpg" alt="" width="537" height="388" /></p>
<p>&#8212; Now your base project is set up in the new directory as we are using the &#8220;codekosh-react-tutorials&#8221; You can give any name to your base project directory.</p>
<p>&#8212; Now go to the directory where you set up the base react app using the below command.<br />
<img loading="lazy" decoding="async" class="alignnone wp-image-736" src="https://codekosh.com/wp-content/uploads/2024/06/image_2024_06_16T09_17_44_321Z-300x48.png" alt="" width="544" height="87" srcset="https://codekosh.com/wp-content/uploads/2024/06/image_2024_06_16T09_17_44_321Z-300x48.png 300w, https://codekosh.com/wp-content/uploads/2024/06/image_2024_06_16T09_17_44_321Z-1024x164.png 1024w, https://codekosh.com/wp-content/uploads/2024/06/image_2024_06_16T09_17_44_321Z-768x123.png 768w, https://codekosh.com/wp-content/uploads/2024/06/image_2024_06_16T09_17_44_321Z-1536x246.png 1536w, https://codekosh.com/wp-content/uploads/2024/06/image_2024_06_16T09_17_44_321Z.png 1826w" sizes="(max-width: 544px) 100vw, 544px" /></p>
<pre>cd codekosh-react-tutorials</pre>
<p><strong>Starting the React App Development Server:</strong><br />
&#8212; To run your React project you need to execute the below command:<br />
<img loading="lazy" decoding="async" class="alignnone wp-image-735" src="https://codekosh.com/wp-content/uploads/2024/06/image_2024_06_16T09_20_00_589Z-300x48.png" alt="" width="544" height="87" /></p>
<pre> npm start</pre>
<p>When we run codekosh-react-tutorials, we just have to run npm start in the app directory to start serving the development server. We will see a new browser opening with localhost:3000.</p>
<p><img loading="lazy" decoding="async" class="alignnone wp-image-733" src="https://codekosh.com/wp-content/uploads/2024/06/image_2024_06_16T09_25_47_919Z-300x143.png" alt="" width="548" height="261" /></p>
<p>Browser view:</p>
<p><img loading="lazy" decoding="async" class="alignnone wp-image-741" src="https://codekosh.com/wp-content/uploads/2024/06/image_2024_06_16T10_01_23_549Z-300x216.png" alt="" width="544" height="392" /></p>
<p><strong>See React in Action</strong></p>
<p>Did you notice something interesting in this react js app creation tutorial guide?</p>
<p>You have just created your first React Project using React developer tools without getting much into the technical details.<br />
Isn’t it the beauty of Create React App?</p>
<p>It’s not necessary to know everything to create a React app. It gives us the freedom to avoid the complex steps involved in writing React code.</p>
<p>Now you know how to start, test, and build a Create project. Consider these commands and understand their usage, as you will need them for your project development.<br />
We hope this article turned out to be beneficial!</p>
<p>Happy coding!</p>
<p>The post <a href="https://codekosh.com/how-to-create-the-first-react-app/">How to create the first react app</a> appeared first on <a href="https://codekosh.com"></a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://codekosh.com/how-to-create-the-first-react-app/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>How to Create a Subdomain in DigitalOcean</title>
		<link>https://codekosh.com/how-to-create-a-subdomain-in-digitalocean/</link>
					<comments>https://codekosh.com/how-to-create-a-subdomain-in-digitalocean/#respond</comments>
		
		<dc:creator><![CDATA[Shubham Rana]]></dc:creator>
		<pubDate>Mon, 13 May 2024 05:54:14 +0000</pubDate>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[Technology]]></category>
		<category><![CDATA[Apache]]></category>
		<category><![CDATA[Ubuntu]]></category>
		<guid isPermaLink="false">https://codekosh.com/?p=512</guid>

					<description><![CDATA[<p>While using a cloud server, It always very difficult to set up a domain or sub-domain in the digital ocean, [&#8230;]</p>
<p>The post <a href="https://codekosh.com/how-to-create-a-subdomain-in-digitalocean/">How to Create a Subdomain in DigitalOcean</a> appeared first on <a href="https://codekosh.com"></a>.</p>
]]></description>
										<content:encoded><![CDATA[<p class="top-content">While using a cloud server, It always very difficult to set up a domain or sub-domain in the digital ocean, Google Cloud and AWS. In given few steps I will explain to you how easily you can set up a sub-domain with your active domain in digital Ocean server.</p>
<h2>Setup Sub – Domain in Digital Ocean:</h2>
<ol>
<li style="list-style-type: none;">
<ol>
<li>Login to your digital ocean account.</li>
<li>Click on the domain – e.g I want to make portfolio.codekosh.com – so I m click on codekosh.com from added domain list. As I have marked in reg.<br />
<img loading="lazy" decoding="async" class="alignnone wp-image-523" src="https://codekosh.com/wp-content/uploads/2024/05/select-a-domain-from-domain-list-300x118.jpg" alt="" width="516" height="203" /></li>
<li>Now you need to add the &#8220;A&#8221; record and CNAME record.<br />
A record e.g: <strong>portfolio and </strong>CNMAE <strong>www.portfolio</strong><strong> </strong>and point to your droplet.<img loading="lazy" decoding="async" class=" wp-image-527" src="https://codekosh.com/wp-content/uploads/2024/05/create-your-a-record-300x154.jpg" alt="Create your A record" width="516" height="265" /><br />
Create your <strong>CNAME </strong>record.<br />
<img loading="lazy" decoding="async" class="alignnone wp-image-531" src="https://codekosh.com/wp-content/uploads/2024/05/create-your-cname-record-300x154.jpg" alt="" width="518" height="266" /></li>
</ol>
</li>
</ol>
<h2 class="HeadingStyles__StyledH1-sc-73f0758c-0 gOvywW TutorialTemplate___StyledHeading2-sc-64c15beb-1 kQEzBT">How To Set Up Apache Virtual Hosts on Ubuntu</h2>
<p>Setting up Apache virtual hosts on Ubuntu allows you to host multiple websites on a single server, each with its own domain or subdomain. This setup is particularly useful for web developers, businesses, or individuals who want to run multiple websites through domain and subdomain on the same server without conflicts. Here&#8217;s a comprehensive guide to walk you through the process by <a href="https://codekosh.com/development/how-to-create-a-subdomain-in-digitalocean/">codekosh.com.</a></p>
<h3>Step 1: Install Apache</h3>
<p>If Apache isn&#8217;t already installed on your Ubuntu server, you can install it using the following below commands.</p>
<pre><code>sudo apt update
sudo apt install apache2</code></pre>
<h3>Step 2 — Creating the Directory Structure</h3>
<p class="common">Step to create a directory structure that will hold the site data that you will be serving to visitors.</p>
<p class="common">Your document root, the top-level directory that Apache looks at to find content to serve, will be set to individual directories under the <strong>/var/www</strong> directory. You will create a directory here for each of the virtual hosts.</p>
<p class="common">Create a directory structure to store the website files for each virtual host. Within each of these directories, you will create a <strong>public_html</strong> directory. The <strong>public_html</strong> directory contains the content that will be served to your visitors.</p>
<p class="common">Use this command, with your own domain name, to create your directories.</p>
<pre>sudo mkdir -p /var/www/example.com/public_html</pre>
<p class="common">Replace example.com with your domain name.</p>
<h3>Step 3: Assign Permissions</h3>
<p class="common">You’ve created the directory structure for your files, but they are owned by the root user. If you want your regular user to be able to modify files in these web directories, you can change the ownership with this command.</p>
<pre>sudo chown -R $USER:$USER /var/www/example.com/public_html</pre>
<p class="common">The <strong>$USER</strong>&gt; variable will take the value of the user you are currently logged in as when you press ENTER in terminal. By doing this, the regular user now owns the <strong>public_html</strong> subdirectories where you will be storing your content.</p>
<p class="common">You should also modify your permissions to ensure that read access is permitted to the general web directory and all of the files and folders it contains so that the pages can be served correctly.</p>
<pre>sudo chmod -R 755 /var/www</pre>
<p class="common">Your web server now has the permissions it needs to serve content, and your user should be able to create content within the necessary folders. The next step is to create content for your virtual host sites.</p>
<h3>Step 4: Create Sample HTML File for host (Optional)</h3>
<p class="common">With your directory structure in place, you can start focusing on individual virtual host site and the content within that site. Start by creating an <strong>index.html</strong> page for your subdomain <strong>e.g <a href="https://codekosh.com/">portfolio.codekosh.com</a></strong>.</p>
<p class="common">Run this command to open and create the <strong>index.html</strong>. This example uses nano:</p>
<pre>nano /var/www/subdomain.example.com/public_html/index.html</pre>
<p class="common">You can add some html stuff in your <strong>index.html</strong> file to load the file in broswer by your subdomain.</p>
<p class="common">To save and close the <strong>index.html</strong> file in nano, start by pressing <strong>CTRL+X</strong>. Press <strong>Y</strong> when prompted to save the file, then press <strong>ENTER</strong> when you are finished to exit.</p>
<h3>Step 5: Creating New Virtual Host File</h3>
<p class="common">Apache on Ubuntu uses separate configuration files for each virtual host. You can create a new configuration file for each site in the <strong>/etc/apache2/sites-available/</strong> directory.</p>
<pre>sudo nano /etc/apache2/sites-available/subdomain.example.com.conf</pre>
<p class="common">Enter the following configuration in the config file:</p>
<pre>	
	    ServerAdmin admin@example.com
	    ServerName example.com
	    ServerAlias www.yoursubdomain.example.com
	    DocumentRoot /var/www/yoursubdomain.example.com/public_html
	    ErrorLog ${APACHE_LOG_DIR}/error.log
	    CustomLog ${APACHE_LOG_DIR}/access.log combined
	
</pre>
<p class="common">Save and close the file.</p>
<h3>Step 6: Enable the Virtual Host file</h3>
<p class="common">In previous step that we have created the virtual host file, you must enable them. Apache includes some tools that allow you to do this.</p>
<p class="common">You’ll be using the <strong>a2ensite</strong> tool to enable each of your sites.</p>
<pre>sudo a2ensite subdomain.example.com.conf</pre>
<p class="common">Before reloading your server, you have to disable the default site defined in <strong>000-default.conf</strong> by using the <strong>a2dissite</strong> command.</p>
<pre>sudo a2dissite 000-default.conf</pre>
<p class="common">Next, command to test the configuration errors:</p>
<pre>sudo apache2ctl configtest</pre>
<p class="common">When you are finished the above process, restart Apache to make these changes take effect.</p>
<pre>sudo systemctl restart apache2</pre>
<p class="common">Optionally, you can check the status of the server after all these changes with this below command.</p>
<pre>sudo systemctl status apache2</pre>
<p class="common">That&#8217;s it! You should now be able to access your website using the subdomain name you configured. Repeat steps 2-6 for each additional virtual host you want to set up.</p>
<p>The post <a href="https://codekosh.com/how-to-create-a-subdomain-in-digitalocean/">How to Create a Subdomain in DigitalOcean</a> appeared first on <a href="https://codekosh.com"></a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://codekosh.com/how-to-create-a-subdomain-in-digitalocean/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
	</channel>
</rss>
