<?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>automated wordpress migration Archives - WP-CLI Mastery</title>
	<atom:link href="https://wpclimastery.com/blog/tag/automated-wordpress-migration/feed/" rel="self" type="application/rss+xml" />
	<link>https://wpclimastery.com/blog/tag/automated-wordpress-migration/</link>
	<description>Automate WordPress Like a DevOps Pro.</description>
	<lastBuildDate>Mon, 24 Nov 2025 11:16:47 +0000</lastBuildDate>
	<language>en-US</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	

<image>
	<url>https://wpclimastery.com/wp-content/uploads/2025/11/cropped-favicon-32x32.webp</url>
	<title>automated wordpress migration Archives - WP-CLI Mastery</title>
	<link>https://wpclimastery.com/blog/tag/automated-wordpress-migration/</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>WordPress Site Cloning and Migration Automation with WP-CLI</title>
		<link>https://wpclimastery.com/blog/wordpress-site-cloning-and-migration-automation-with-wp-cli/</link>
		
		<dc:creator><![CDATA[Krasen]]></dc:creator>
		<pubDate>Thu, 15 Jan 2026 09:00:00 +0000</pubDate>
				<category><![CDATA[Real-World WP-CLI Projects]]></category>
		<category><![CDATA[automated wordpress migration]]></category>
		<category><![CDATA[clone wordpress site]]></category>
		<category><![CDATA[wordpress migration automation]]></category>
		<category><![CDATA[wordpress site cloning]]></category>
		<category><![CDATA[wp-cli migration]]></category>
		<guid isPermaLink="false">https://wpclimastery.com/?p=143</guid>

					<description><![CDATA[<p>Cloning WordPress sites manually means exporting databases through phpMyAdmin, FTPing thousands of files, running search-replace SQL queries that break serialized data, and spending hours fixing broken configurations. One mistake destroys...</p>
<p>The post <a href="https://wpclimastery.com/blog/wordpress-site-cloning-and-migration-automation-with-wp-cli/">WordPress Site Cloning and Migration Automation with WP-CLI</a> appeared first on <a href="https://wpclimastery.com">WP-CLI Mastery</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p>Cloning WordPress sites manually means exporting databases through phpMyAdmin, FTPing thousands of files, running search-replace SQL queries that break serialized data, and spending hours fixing broken configurations. One mistake destroys the entire clone.</p>



<p>WP-CLI transforms WordPress cloning and migration into a fast, automated process—clone production to staging in minutes, migrate sites between hosts reliably, and replicate environments for testing without manual intervention or data corruption.</p>



<p>In this guide, you’ll build a complete WordPress site cloning and migration system using WP-CLI, with automated scripts, safety checks, and verification procedures used by professional WordPress agencies.</p>



<h3 class="wp-block-heading" id="why-automate">Why Automate WordPress Cloning and Migration?</h3>



<p><a href="https://wordpress.org/support/article/moving-wordpress/">WordPress site migration</a> manually is error-prone and doesn’t scale.</p>



<h4 class="wp-block-heading" id="problems-with-manual-cloningmigration">Problems with Manual Cloning/Migration</h4>



<p><strong>Time-consuming</strong>: Manual cloning takes 2-4 hours for medium sites.</p>



<p><strong>Error-prone</strong>: Database exports fail, files get missed, URLs break.</p>



<p><strong>Serialized data corruption</strong>: Manual search-replace destroys widget settings and options.</p>



<p><strong>No validation</strong>: Can’t verify clone completeness or data integrity.</p>



<p><strong>Not repeatable</strong>: Each clone requires same tedious manual steps.</p>



<h4 class="wp-block-heading" id="wp-cli-cloningmigration-advantages">WP-CLI Cloning/Migration Advantages</h4>



<p><strong>Fast</strong>: Clone complete sites in 5-10 minutes instead of hours.</p>



<p><strong>Safe</strong>: WordPress-aware operations preserve serialized data.</p>



<p><strong>Scriptable</strong>: One-command cloning for any site at any time.</p>



<p><strong>Verifiable</strong>: Automated checks ensure complete, accurate clones.</p>



<p><strong>Consistent</strong>: Same process every time guarantees reliability.</p>



<p>According to <a href="https://wpengine.com/">WordPress development surveys</a>, agencies save 20+ hours monthly by automating site cloning for staging and development.</p>



<h3 class="wp-block-heading" id="basic-cloning">Basic Site Cloning</h3>



<p>Clone a WordPress site locally with essential components.</p>



<h4 class="wp-block-heading" id="complete-local-clone-script">Complete Local Clone Script</h4>



<div class="sourceCode" id="cb1">
<pre class="sourceCode bash"><code class="sourceCode bash"><span id="cb1-1"><a href="#cb1-1" aria-hidden="true"></a><span class="co">#!/bin/bash</span></span>
<span id="cb1-2"><a href="#cb1-2" aria-hidden="true"></a><span class="co"># clone-wordpress-site.sh - Clone WordPress site locally</span></span>
<span id="cb1-3"><a href="#cb1-3" aria-hidden="true"></a></span>
<span id="cb1-4"><a href="#cb1-4" aria-hidden="true"></a><span class="kw">set</span> <span class="ex">-euo</span> pipefail</span>
<span id="cb1-5"><a href="#cb1-5" aria-hidden="true"></a></span>
<span id="cb1-6"><a href="#cb1-6" aria-hidden="true"></a><span class="va">SOURCE_PATH=</span><span class="st">"</span><span class="va">$1</span><span class="st">"</span></span>
<span id="cb1-7"><a href="#cb1-7" aria-hidden="true"></a><span class="va">DEST_PATH=</span><span class="st">"</span><span class="va">$2</span><span class="st">"</span></span>
<span id="cb1-8"><a href="#cb1-8" aria-hidden="true"></a></span>
<span id="cb1-9"><a href="#cb1-9" aria-hidden="true"></a><span class="kw">if</span><span class="bu"> [</span> <span class="ot">-z</span> <span class="st">"</span><span class="va">$SOURCE_PATH</span><span class="st">"</span><span class="bu"> ]</span> <span class="kw">||</span><span class="bu"> [</span> <span class="ot">-z</span> <span class="st">"</span><span class="va">$DEST_PATH</span><span class="st">"</span><span class="bu"> ]</span>; <span class="kw">then</span></span>
<span id="cb1-10"><a href="#cb1-10" aria-hidden="true"></a>    <span class="bu">echo</span> <span class="st">"Usage: </span><span class="va">$0</span><span class="st"> &lt;source_path&gt; &lt;dest_path&gt;"</span></span>
<span id="cb1-11"><a href="#cb1-11" aria-hidden="true"></a>    <span class="bu">exit</span> 1</span>
<span id="cb1-12"><a href="#cb1-12" aria-hidden="true"></a><span class="kw">fi</span></span>
<span id="cb1-13"><a href="#cb1-13" aria-hidden="true"></a></span>
<span id="cb1-14"><a href="#cb1-14" aria-hidden="true"></a><span class="bu">echo</span> <span class="st">"Cloning WordPress site..."</span></span>
<span id="cb1-15"><a href="#cb1-15" aria-hidden="true"></a><span class="bu">echo</span> <span class="st">"Source: </span><span class="va">$SOURCE_PATH</span><span class="st">"</span></span>
<span id="cb1-16"><a href="#cb1-16" aria-hidden="true"></a><span class="bu">echo</span> <span class="st">"Destination: </span><span class="va">$DEST_PATH</span><span class="st">"</span></span>
<span id="cb1-17"><a href="#cb1-17" aria-hidden="true"></a></span>
<span id="cb1-18"><a href="#cb1-18" aria-hidden="true"></a><span class="co"># Create destination directory</span></span>
<span id="cb1-19"><a href="#cb1-19" aria-hidden="true"></a><span class="fu">mkdir</span> -p <span class="st">"</span><span class="va">$DEST_PATH</span><span class="st">"</span></span>
<span id="cb1-20"><a href="#cb1-20" aria-hidden="true"></a></span>
<span id="cb1-21"><a href="#cb1-21" aria-hidden="true"></a><span class="co"># Copy WordPress files</span></span>
<span id="cb1-22"><a href="#cb1-22" aria-hidden="true"></a><span class="bu">echo</span> <span class="st">"Copying files..."</span></span>
<span id="cb1-23"><a href="#cb1-23" aria-hidden="true"></a><span class="fu">rsync</span> -av --exclude=<span class="st">'wp-content/cache'</span> <span class="kw">\</span></span>
<span id="cb1-24"><a href="#cb1-24" aria-hidden="true"></a>    <span class="ex">--exclude</span>=<span class="st">'wp-content/backup*'</span> <span class="kw">\</span></span>
<span id="cb1-25"><a href="#cb1-25" aria-hidden="true"></a>    <span class="st">"</span><span class="va">$SOURCE_PATH</span><span class="st">/"</span> <span class="st">"</span><span class="va">$DEST_PATH</span><span class="st">/"</span></span>
<span id="cb1-26"><a href="#cb1-26" aria-hidden="true"></a></span>
<span id="cb1-27"><a href="#cb1-27" aria-hidden="true"></a><span class="co"># Export database from source</span></span>
<span id="cb1-28"><a href="#cb1-28" aria-hidden="true"></a><span class="bu">echo</span> <span class="st">"Exporting database..."</span></span>
<span id="cb1-29"><a href="#cb1-29" aria-hidden="true"></a><span class="bu">cd</span> <span class="st">"</span><span class="va">$SOURCE_PATH</span><span class="st">"</span></span>
<span id="cb1-30"><a href="#cb1-30" aria-hidden="true"></a><span class="ex">wp</span> db export /tmp/clone-db.sql</span>
<span id="cb1-31"><a href="#cb1-31" aria-hidden="true"></a></span>
<span id="cb1-32"><a href="#cb1-32" aria-hidden="true"></a><span class="co"># Create new database config for destination</span></span>
<span id="cb1-33"><a href="#cb1-33" aria-hidden="true"></a><span class="bu">cd</span> <span class="st">"</span><span class="va">$DEST_PATH</span><span class="st">"</span></span>
<span id="cb1-34"><a href="#cb1-34" aria-hidden="true"></a></span>
<span id="cb1-35"><a href="#cb1-35" aria-hidden="true"></a><span class="co"># Get source database details</span></span>
<span id="cb1-36"><a href="#cb1-36" aria-hidden="true"></a><span class="va">SOURCE_DB=$(</span><span class="ex">wp</span> config get DB_NAME<span class="va">)</span></span>
<span id="cb1-37"><a href="#cb1-37" aria-hidden="true"></a><span class="va">SOURCE_USER=$(</span><span class="ex">wp</span> config get DB_USER<span class="va">)</span></span>
<span id="cb1-38"><a href="#cb1-38" aria-hidden="true"></a><span class="va">SOURCE_PASS=$(</span><span class="ex">wp</span> config get DB_PASSWORD<span class="va">)</span></span>
<span id="cb1-39"><a href="#cb1-39" aria-hidden="true"></a></span>
<span id="cb1-40"><a href="#cb1-40" aria-hidden="true"></a><span class="co"># Create new database</span></span>
<span id="cb1-41"><a href="#cb1-41" aria-hidden="true"></a><span class="va">NEW_DB=</span><span class="st">"cloned_</span><span class="va">${SOURCE_DB}</span><span class="st">"</span></span>
<span id="cb1-42"><a href="#cb1-42" aria-hidden="true"></a><span class="ex">mysql</span> -u<span class="st">"</span><span class="va">$SOURCE_USER</span><span class="st">"</span> -p<span class="st">"</span><span class="va">$SOURCE_PASS</span><span class="st">"</span> -e <span class="st">"CREATE DATABASE IF NOT EXISTS </span><span class="va">${NEW_DB}</span><span class="st">;"</span></span>
<span id="cb1-43"><a href="#cb1-43" aria-hidden="true"></a></span>
<span id="cb1-44"><a href="#cb1-44" aria-hidden="true"></a><span class="co"># Update wp-config.php</span></span>
<span id="cb1-45"><a href="#cb1-45" aria-hidden="true"></a><span class="ex">wp</span> config set DB_NAME <span class="st">"</span><span class="va">$NEW_DB</span><span class="st">"</span></span>
<span id="cb1-46"><a href="#cb1-46" aria-hidden="true"></a></span>
<span id="cb1-47"><a href="#cb1-47" aria-hidden="true"></a><span class="co"># Import database</span></span>
<span id="cb1-48"><a href="#cb1-48" aria-hidden="true"></a><span class="bu">echo</span> <span class="st">"Importing database..."</span></span>
<span id="cb1-49"><a href="#cb1-49" aria-hidden="true"></a><span class="ex">wp</span> db import /tmp/clone-db.sql</span>
<span id="cb1-50"><a href="#cb1-50" aria-hidden="true"></a></span>
<span id="cb1-51"><a href="#cb1-51" aria-hidden="true"></a><span class="co"># Cleanup</span></span>
<span id="cb1-52"><a href="#cb1-52" aria-hidden="true"></a><span class="fu">rm</span> /tmp/clone-db.sql</span>
<span id="cb1-53"><a href="#cb1-53" aria-hidden="true"></a></span>
<span id="cb1-54"><a href="#cb1-54" aria-hidden="true"></a><span class="co"># Update URLs if needed</span></span>
<span id="cb1-55"><a href="#cb1-55" aria-hidden="true"></a><span class="va">SOURCE_URL=$(</span><span class="ex">wp</span> option get siteurl<span class="va">)</span></span>
<span id="cb1-56"><a href="#cb1-56" aria-hidden="true"></a><span class="bu">echo</span> <span class="st">"Current site URL: </span><span class="va">$SOURCE_URL</span><span class="st">"</span></span>
<span id="cb1-57"><a href="#cb1-57" aria-hidden="true"></a><span class="bu">read</span> -p <span class="st">"Enter new site URL (or press Enter to keep same): "</span> <span class="va">NEW_URL</span></span>
<span id="cb1-58"><a href="#cb1-58" aria-hidden="true"></a></span>
<span id="cb1-59"><a href="#cb1-59" aria-hidden="true"></a><span class="kw">if</span><span class="bu"> [</span> <span class="ot">-n</span> <span class="st">"</span><span class="va">$NEW_URL</span><span class="st">"</span><span class="bu"> ]</span>; <span class="kw">then</span></span>
<span id="cb1-60"><a href="#cb1-60" aria-hidden="true"></a>    <span class="bu">echo</span> <span class="st">"Updating URLs..."</span></span>
<span id="cb1-61"><a href="#cb1-61" aria-hidden="true"></a>    <span class="ex">wp</span> search-replace <span class="st">"</span><span class="va">$SOURCE_URL</span><span class="st">"</span> <span class="st">"</span><span class="va">$NEW_URL</span><span class="st">"</span></span>
<span id="cb1-62"><a href="#cb1-62" aria-hidden="true"></a>    <span class="ex">wp</span> option update home <span class="st">"</span><span class="va">$NEW_URL</span><span class="st">"</span></span>
<span id="cb1-63"><a href="#cb1-63" aria-hidden="true"></a>    <span class="ex">wp</span> option update siteurl <span class="st">"</span><span class="va">$NEW_URL</span><span class="st">"</span></span>
<span id="cb1-64"><a href="#cb1-64" aria-hidden="true"></a><span class="kw">fi</span></span>
<span id="cb1-65"><a href="#cb1-65" aria-hidden="true"></a></span>
<span id="cb1-66"><a href="#cb1-66" aria-hidden="true"></a><span class="co"># Clear caches</span></span>
<span id="cb1-67"><a href="#cb1-67" aria-hidden="true"></a><span class="ex">wp</span> cache flush</span>
<span id="cb1-68"><a href="#cb1-68" aria-hidden="true"></a><span class="ex">wp</span> rewrite flush</span>
<span id="cb1-69"><a href="#cb1-69" aria-hidden="true"></a></span>
<span id="cb1-70"><a href="#cb1-70" aria-hidden="true"></a><span class="bu">echo</span> <span class="st">"✓ Clone complete: </span><span class="va">$DEST_PATH</span><span class="st">"</span></span></code></pre>
</div>



<p>Run it:</p>



<div class="sourceCode" id="cb2">
<pre class="sourceCode bash"><code class="sourceCode bash"><span id="cb2-1"><a href="#cb2-1" aria-hidden="true"></a><span class="fu">chmod</span> +x clone-wordpress-site.sh</span>
<span id="cb2-2"><a href="#cb2-2" aria-hidden="true"></a><span class="ex">./clone-wordpress-site.sh</span> /var/www/production /var/www/staging</span></code></pre>
</div>



<p>Learn about <a href="https://wordpress.org/support/article/wordpress-files/">WordPress directory structure</a>.</p>



<h3 class="wp-block-heading" id="remote-migration">Remote Site Migration</h3>



<p>Migrate WordPress sites between servers or hosting providers.</p>



<h4 class="wp-block-heading" id="complete-remote-migration-script">Complete Remote Migration Script</h4>



<div class="sourceCode" id="cb3">
<pre class="sourceCode bash"><code class="sourceCode bash"><span id="cb3-1"><a href="#cb3-1" aria-hidden="true"></a><span class="co">#!/bin/bash</span></span>
<span id="cb3-2"><a href="#cb3-2" aria-hidden="true"></a><span class="co"># migrate-wordpress-remote.sh - Migrate between servers</span></span>
<span id="cb3-3"><a href="#cb3-3" aria-hidden="true"></a></span>
<span id="cb3-4"><a href="#cb3-4" aria-hidden="true"></a><span class="kw">set</span> <span class="ex">-euo</span> pipefail</span>
<span id="cb3-5"><a href="#cb3-5" aria-hidden="true"></a></span>
<span id="cb3-6"><a href="#cb3-6" aria-hidden="true"></a><span class="va">SOURCE_HOST=</span><span class="st">"</span><span class="va">$1</span><span class="st">"</span></span>
<span id="cb3-7"><a href="#cb3-7" aria-hidden="true"></a><span class="va">SOURCE_PATH=</span><span class="st">"</span><span class="va">$2</span><span class="st">"</span></span>
<span id="cb3-8"><a href="#cb3-8" aria-hidden="true"></a><span class="va">DEST_PATH=</span><span class="st">"</span><span class="va">$3</span><span class="st">"</span></span>
<span id="cb3-9"><a href="#cb3-9" aria-hidden="true"></a><span class="va">OLD_URL=</span><span class="st">"</span><span class="va">$4</span><span class="st">"</span></span>
<span id="cb3-10"><a href="#cb3-10" aria-hidden="true"></a><span class="va">NEW_URL=</span><span class="st">"</span><span class="va">$5</span><span class="st">"</span></span>
<span id="cb3-11"><a href="#cb3-11" aria-hidden="true"></a></span>
<span id="cb3-12"><a href="#cb3-12" aria-hidden="true"></a><span class="kw">if</span><span class="bu"> [</span> <span class="ot">-z</span> <span class="st">"</span><span class="va">$NEW_URL</span><span class="st">"</span><span class="bu"> ]</span>; <span class="kw">then</span></span>
<span id="cb3-13"><a href="#cb3-13" aria-hidden="true"></a>    <span class="bu">echo</span> <span class="st">"Usage: </span><span class="va">$0</span><span class="st"> &lt;source_host&gt; &lt;source_path&gt; &lt;dest_path&gt; &lt;old_url&gt; &lt;new_url&gt;"</span></span>
<span id="cb3-14"><a href="#cb3-14" aria-hidden="true"></a>    <span class="bu">echo</span> <span class="st">"Example: </span><span class="va">$0</span><span class="st"> user@old-server.com /var/www/html /var/www/html https://oldsite.com https://newsite.com"</span></span>
<span id="cb3-15"><a href="#cb3-15" aria-hidden="true"></a>    <span class="bu">exit</span> 1</span>
<span id="cb3-16"><a href="#cb3-16" aria-hidden="true"></a><span class="kw">fi</span></span>
<span id="cb3-17"><a href="#cb3-17" aria-hidden="true"></a></span>
<span id="cb3-18"><a href="#cb3-18" aria-hidden="true"></a><span class="va">TEMP_DIR=</span><span class="st">"/tmp/wp-migration-</span><span class="va">$</span><span class="st">"</span></span>
<span id="cb3-19"><a href="#cb3-19" aria-hidden="true"></a><span class="va">DATE=$(</span><span class="fu">date</span> +%Y%m%d_%H%M%S<span class="va">)</span></span>
<span id="cb3-20"><a href="#cb3-20" aria-hidden="true"></a></span>
<span id="cb3-21"><a href="#cb3-21" aria-hidden="true"></a><span class="fu">mkdir</span> -p <span class="st">"</span><span class="va">$TEMP_DIR</span><span class="st">"</span></span>
<span id="cb3-22"><a href="#cb3-22" aria-hidden="true"></a></span>
<span id="cb3-23"><a href="#cb3-23" aria-hidden="true"></a><span class="bu">echo</span> <span class="st">"=== WordPress Remote Migration Started ==="</span></span>
<span id="cb3-24"><a href="#cb3-24" aria-hidden="true"></a><span class="bu">echo</span> <span class="st">"From: </span><span class="va">$SOURCE_HOST</span><span class="st">:</span><span class="va">$SOURCE_PATH</span><span class="st">"</span></span>
<span id="cb3-25"><a href="#cb3-25" aria-hidden="true"></a><span class="bu">echo</span> <span class="st">"To: </span><span class="va">$DEST_PATH</span><span class="st">"</span></span>
<span id="cb3-26"><a href="#cb3-26" aria-hidden="true"></a><span class="bu">echo</span> <span class="st">"URL: </span><span class="va">$OLD_URL</span><span class="st"> → </span><span class="va">$NEW_URL</span><span class="st">"</span></span>
<span id="cb3-27"><a href="#cb3-27" aria-hidden="true"></a></span>
<span id="cb3-28"><a href="#cb3-28" aria-hidden="true"></a><span class="co"># Step 1: Export database from source</span></span>
<span id="cb3-29"><a href="#cb3-29" aria-hidden="true"></a><span class="bu">echo</span> <span class="st">"Step 1/6: Exporting database from source..."</span></span>
<span id="cb3-30"><a href="#cb3-30" aria-hidden="true"></a><span class="fu">ssh</span> <span class="st">"</span><span class="va">$SOURCE_HOST</span><span class="st">"</span> <span class="st">"cd </span><span class="va">$SOURCE_PATH</span><span class="st"> &amp;&amp; wp db export - | gzip"</span> <span class="op">&gt;</span> <span class="st">"</span><span class="va">$TEMP_DIR</span><span class="st">/database.sql.gz"</span></span>
<span id="cb3-31"><a href="#cb3-31" aria-hidden="true"></a></span>
<span id="cb3-32"><a href="#cb3-32" aria-hidden="true"></a><span class="co"># Verify database export</span></span>
<span id="cb3-33"><a href="#cb3-33" aria-hidden="true"></a><span class="va">DB_SIZE=$(</span><span class="fu">stat</span> -c%s <span class="st">"</span><span class="va">$TEMP_DIR</span><span class="st">/database.sql.gz"</span><span class="va">)</span></span>
<span id="cb3-34"><a href="#cb3-34" aria-hidden="true"></a><span class="kw">if</span><span class="bu"> [</span> <span class="st">"</span><span class="va">$DB_SIZE</span><span class="st">"</span> <span class="ot">-lt</span> 1000<span class="bu"> ]</span>; <span class="kw">then</span></span>
<span id="cb3-35"><a href="#cb3-35" aria-hidden="true"></a>    <span class="bu">echo</span> <span class="st">"✗ Database export too small, aborting"</span></span>
<span id="cb3-36"><a href="#cb3-36" aria-hidden="true"></a>    <span class="bu">exit</span> 1</span>
<span id="cb3-37"><a href="#cb3-37" aria-hidden="true"></a><span class="kw">fi</span></span>
<span id="cb3-38"><a href="#cb3-38" aria-hidden="true"></a></span>
<span id="cb3-39"><a href="#cb3-39" aria-hidden="true"></a><span class="co"># Step 2: Transfer files from source</span></span>
<span id="cb3-40"><a href="#cb3-40" aria-hidden="true"></a><span class="bu">echo</span> <span class="st">"Step 2/6: Transferring files from source..."</span></span>
<span id="cb3-41"><a href="#cb3-41" aria-hidden="true"></a><span class="fu">rsync</span> -avz --progress <span class="kw">\</span></span>
<span id="cb3-42"><a href="#cb3-42" aria-hidden="true"></a>    <span class="ex">--exclude</span>=<span class="st">'wp-content/cache/*'</span> <span class="kw">\</span></span>
<span id="cb3-43"><a href="#cb3-43" aria-hidden="true"></a>    <span class="ex">--exclude</span>=<span class="st">'wp-content/backup*'</span> <span class="kw">\</span></span>
<span id="cb3-44"><a href="#cb3-44" aria-hidden="true"></a>    <span class="st">"</span><span class="va">$SOURCE_HOST</span><span class="st">:</span><span class="va">$SOURCE_PATH</span><span class="st">/"</span> <span class="st">"</span><span class="va">$DEST_PATH</span><span class="st">/"</span></span>
<span id="cb3-45"><a href="#cb3-45" aria-hidden="true"></a></span>
<span id="cb3-46"><a href="#cb3-46" aria-hidden="true"></a><span class="co"># Step 3: Backup destination (if exists)</span></span>
<span id="cb3-47"><a href="#cb3-47" aria-hidden="true"></a><span class="kw">if</span><span class="bu"> [</span> <span class="ot">-d</span> <span class="st">"</span><span class="va">$DEST_PATH</span><span class="st">"</span><span class="bu"> ]</span>; <span class="kw">then</span></span>
<span id="cb3-48"><a href="#cb3-48" aria-hidden="true"></a>    <span class="bu">echo</span> <span class="st">"Step 3/6: Backing up destination..."</span></span>
<span id="cb3-49"><a href="#cb3-49" aria-hidden="true"></a>    <span class="bu">cd</span> <span class="st">"</span><span class="va">$DEST_PATH</span><span class="st">"</span></span>
<span id="cb3-50"><a href="#cb3-50" aria-hidden="true"></a>    <span class="kw">if</span> <span class="ex">wp</span> core is-installed <span class="op">2&gt;</span>/dev/null<span class="kw">;</span> <span class="kw">then</span></span>
<span id="cb3-51"><a href="#cb3-51" aria-hidden="true"></a>        <span class="ex">wp</span> db export <span class="st">"/backups/dest-before-migration-</span><span class="va">$DATE</span><span class="st">.sql.gz"</span> <span class="kw">||</span> <span class="fu">true</span></span>
<span id="cb3-52"><a href="#cb3-52" aria-hidden="true"></a>    <span class="kw">fi</span></span>
<span id="cb3-53"><a href="#cb3-53" aria-hidden="true"></a><span class="kw">fi</span></span>
<span id="cb3-54"><a href="#cb3-54" aria-hidden="true"></a></span>
<span id="cb3-55"><a href="#cb3-55" aria-hidden="true"></a><span class="co"># Step 4: Import database</span></span>
<span id="cb3-56"><a href="#cb3-56" aria-hidden="true"></a><span class="bu">echo</span> <span class="st">"Step 4/6: Importing database..."</span></span>
<span id="cb3-57"><a href="#cb3-57" aria-hidden="true"></a><span class="bu">cd</span> <span class="st">"</span><span class="va">$DEST_PATH</span><span class="st">"</span></span>
<span id="cb3-58"><a href="#cb3-58" aria-hidden="true"></a><span class="ex">wp</span> db import <span class="st">"</span><span class="va">$TEMP_DIR</span><span class="st">/database.sql.gz"</span></span>
<span id="cb3-59"><a href="#cb3-59" aria-hidden="true"></a></span>
<span id="cb3-60"><a href="#cb3-60" aria-hidden="true"></a><span class="co"># Step 5: Update URLs</span></span>
<span id="cb3-61"><a href="#cb3-61" aria-hidden="true"></a><span class="bu">echo</span> <span class="st">"Step 5/6: Updating URLs..."</span></span>
<span id="cb3-62"><a href="#cb3-62" aria-hidden="true"></a><span class="ex">wp</span> search-replace <span class="st">"</span><span class="va">$OLD_URL</span><span class="st">"</span> <span class="st">"</span><span class="va">$NEW_URL</span><span class="st">"</span> --dry-run --report</span>
<span id="cb3-63"><a href="#cb3-63" aria-hidden="true"></a><span class="ex">wp</span> search-replace <span class="st">"</span><span class="va">$OLD_URL</span><span class="st">"</span> <span class="st">"</span><span class="va">$NEW_URL</span><span class="st">"</span></span>
<span id="cb3-64"><a href="#cb3-64" aria-hidden="true"></a><span class="ex">wp</span> search-replace <span class="st">"//</span><span class="va">$(</span><span class="bu">echo</span> <span class="va">$OLD_URL</span> <span class="kw">|</span> <span class="fu">sed</span> <span class="st">'s~http[s]*://~~'</span><span class="va">)</span><span class="st">"</span> <span class="st">"//</span><span class="va">$(</span><span class="bu">echo</span> <span class="va">$NEW_URL</span> <span class="kw">|</span> <span class="fu">sed</span> <span class="st">'s~http[s]*://~~'</span><span class="va">)</span><span class="st">"</span></span>
<span id="cb3-65"><a href="#cb3-65" aria-hidden="true"></a></span>
<span id="cb3-66"><a href="#cb3-66" aria-hidden="true"></a><span class="co"># Update WordPress options</span></span>
<span id="cb3-67"><a href="#cb3-67" aria-hidden="true"></a><span class="ex">wp</span> option update home <span class="st">"</span><span class="va">$NEW_URL</span><span class="st">"</span></span>
<span id="cb3-68"><a href="#cb3-68" aria-hidden="true"></a><span class="ex">wp</span> option update siteurl <span class="st">"</span><span class="va">$NEW_URL</span><span class="st">"</span></span>
<span id="cb3-69"><a href="#cb3-69" aria-hidden="true"></a></span>
<span id="cb3-70"><a href="#cb3-70" aria-hidden="true"></a><span class="co"># Step 6: Verify and cleanup</span></span>
<span id="cb3-71"><a href="#cb3-71" aria-hidden="true"></a><span class="bu">echo</span> <span class="st">"Step 6/6: Verifying migration..."</span></span>
<span id="cb3-72"><a href="#cb3-72" aria-hidden="true"></a><span class="kw">if</span> <span class="ex">wp</span> core is-installed<span class="kw">;</span> <span class="kw">then</span></span>
<span id="cb3-73"><a href="#cb3-73" aria-hidden="true"></a>    <span class="bu">echo</span> <span class="st">"✓ WordPress installation verified"</span></span>
<span id="cb3-74"><a href="#cb3-74" aria-hidden="true"></a><span class="kw">else</span></span>
<span id="cb3-75"><a href="#cb3-75" aria-hidden="true"></a>    <span class="bu">echo</span> <span class="st">"✗ WordPress verification failed"</span></span>
<span id="cb3-76"><a href="#cb3-76" aria-hidden="true"></a>    <span class="bu">exit</span> 1</span>
<span id="cb3-77"><a href="#cb3-77" aria-hidden="true"></a><span class="kw">fi</span></span>
<span id="cb3-78"><a href="#cb3-78" aria-hidden="true"></a></span>
<span id="cb3-79"><a href="#cb3-79" aria-hidden="true"></a><span class="kw">if</span> <span class="ex">wp</span> db check<span class="kw">;</span> <span class="kw">then</span></span>
<span id="cb3-80"><a href="#cb3-80" aria-hidden="true"></a>    <span class="bu">echo</span> <span class="st">"✓ Database healthy"</span></span>
<span id="cb3-81"><a href="#cb3-81" aria-hidden="true"></a><span class="kw">else</span></span>
<span id="cb3-82"><a href="#cb3-82" aria-hidden="true"></a>    <span class="bu">echo</span> <span class="st">"✗ Database issues detected"</span></span>
<span id="cb3-83"><a href="#cb3-83" aria-hidden="true"></a>    <span class="bu">exit</span> 1</span>
<span id="cb3-84"><a href="#cb3-84" aria-hidden="true"></a><span class="kw">fi</span></span>
<span id="cb3-85"><a href="#cb3-85" aria-hidden="true"></a></span>
<span id="cb3-86"><a href="#cb3-86" aria-hidden="true"></a><span class="co"># Clear caches</span></span>
<span id="cb3-87"><a href="#cb3-87" aria-hidden="true"></a><span class="ex">wp</span> cache flush</span>
<span id="cb3-88"><a href="#cb3-88" aria-hidden="true"></a><span class="ex">wp</span> rewrite flush</span>
<span id="cb3-89"><a href="#cb3-89" aria-hidden="true"></a></span>
<span id="cb3-90"><a href="#cb3-90" aria-hidden="true"></a><span class="co"># Cleanup</span></span>
<span id="cb3-91"><a href="#cb3-91" aria-hidden="true"></a><span class="fu">rm</span> -rf <span class="st">"</span><span class="va">$TEMP_DIR</span><span class="st">"</span></span>
<span id="cb3-92"><a href="#cb3-92" aria-hidden="true"></a></span>
<span id="cb3-93"><a href="#cb3-93" aria-hidden="true"></a><span class="bu">echo</span> <span class="st">"=== Migration Complete ==="</span></span>
<span id="cb3-94"><a href="#cb3-94" aria-hidden="true"></a><span class="bu">echo</span> <span class="st">"Site URL: </span><span class="va">$NEW_URL</span><span class="st">"</span></span>
<span id="cb3-95"><a href="#cb3-95" aria-hidden="true"></a><span class="bu">echo</span> <span class="st">"Backup: /backups/dest-before-migration-</span><span class="va">$DATE</span><span class="st">.sql.gz"</span></span></code></pre>
</div>



<h4 class="wp-block-heading" id="push-to-production">Push to Production</h4>



<div class="sourceCode" id="cb4">
<pre class="sourceCode bash"><code class="sourceCode bash"><span id="cb4-1"><a href="#cb4-1" aria-hidden="true"></a><span class="co">#!/bin/bash</span></span>
<span id="cb4-2"><a href="#cb4-2" aria-hidden="true"></a><span class="co"># push-to-production.sh - Push staging to production</span></span>
<span id="cb4-3"><a href="#cb4-3" aria-hidden="true"></a></span>
<span id="cb4-4"><a href="#cb4-4" aria-hidden="true"></a><span class="va">STAGING_PATH=</span><span class="st">"/var/www/staging"</span></span>
<span id="cb4-5"><a href="#cb4-5" aria-hidden="true"></a><span class="va">PROD_PATH=</span><span class="st">"/var/www/production"</span></span>
<span id="cb4-6"><a href="#cb4-6" aria-hidden="true"></a><span class="va">STAGING_URL=</span><span class="st">"https://staging.example.com"</span></span>
<span id="cb4-7"><a href="#cb4-7" aria-hidden="true"></a><span class="va">PROD_URL=</span><span class="st">"https://example.com"</span></span>
<span id="cb4-8"><a href="#cb4-8" aria-hidden="true"></a></span>
<span id="cb4-9"><a href="#cb4-9" aria-hidden="true"></a><span class="bu">read</span> -p <span class="st">"This will overwrite production. Continue? (y/n) "</span> -n 1 -r</span>
<span id="cb4-10"><a href="#cb4-10" aria-hidden="true"></a><span class="bu">echo</span></span>
<span id="cb4-11"><a href="#cb4-11" aria-hidden="true"></a><span class="kw">if [[</span> <span class="ot">!</span> <span class="va">$REPLY</span> =~ ^[Yy]$<span class="kw"> ]]</span>; <span class="kw">then</span></span>
<span id="cb4-12"><a href="#cb4-12" aria-hidden="true"></a>    <span class="bu">exit</span> 0</span>
<span id="cb4-13"><a href="#cb4-13" aria-hidden="true"></a><span class="kw">fi</span></span>
<span id="cb4-14"><a href="#cb4-14" aria-hidden="true"></a></span>
<span id="cb4-15"><a href="#cb4-15" aria-hidden="true"></a><span class="co"># Backup production first</span></span>
<span id="cb4-16"><a href="#cb4-16" aria-hidden="true"></a><span class="bu">cd</span> <span class="st">"</span><span class="va">$PROD_PATH</span><span class="st">"</span></span>
<span id="cb4-17"><a href="#cb4-17" aria-hidden="true"></a><span class="bu">echo</span> <span class="st">"Backing up production..."</span></span>
<span id="cb4-18"><a href="#cb4-18" aria-hidden="true"></a><span class="ex">wp</span> db export <span class="st">"/backups/prod-</span><span class="va">$(</span><span class="fu">date</span> +%Y%m%d_%H%M%S<span class="va">)</span><span class="st">.sql.gz"</span></span>
<span id="cb4-19"><a href="#cb4-19" aria-hidden="true"></a></span>
<span id="cb4-20"><a href="#cb4-20" aria-hidden="true"></a><span class="co"># Export from staging</span></span>
<span id="cb4-21"><a href="#cb4-21" aria-hidden="true"></a><span class="bu">cd</span> <span class="st">"</span><span class="va">$STAGING_PATH</span><span class="st">"</span></span>
<span id="cb4-22"><a href="#cb4-22" aria-hidden="true"></a><span class="bu">echo</span> <span class="st">"Exporting staging..."</span></span>
<span id="cb4-23"><a href="#cb4-23" aria-hidden="true"></a><span class="ex">wp</span> db export /tmp/staging-push.sql.gz</span>
<span id="cb4-24"><a href="#cb4-24" aria-hidden="true"></a></span>
<span id="cb4-25"><a href="#cb4-25" aria-hidden="true"></a><span class="co"># Copy files</span></span>
<span id="cb4-26"><a href="#cb4-26" aria-hidden="true"></a><span class="bu">echo</span> <span class="st">"Copying files..."</span></span>
<span id="cb4-27"><a href="#cb4-27" aria-hidden="true"></a><span class="fu">rsync</span> -av --delete <span class="kw">\</span></span>
<span id="cb4-28"><a href="#cb4-28" aria-hidden="true"></a>    <span class="ex">--exclude</span>=<span class="st">'wp-config.php'</span> <span class="kw">\</span></span>
<span id="cb4-29"><a href="#cb4-29" aria-hidden="true"></a>    <span class="st">"</span><span class="va">$STAGING_PATH</span><span class="st">/"</span> <span class="st">"</span><span class="va">$PROD_PATH</span><span class="st">/"</span></span>
<span id="cb4-30"><a href="#cb4-30" aria-hidden="true"></a></span>
<span id="cb4-31"><a href="#cb4-31" aria-hidden="true"></a><span class="co"># Import to production</span></span>
<span id="cb4-32"><a href="#cb4-32" aria-hidden="true"></a><span class="bu">cd</span> <span class="st">"</span><span class="va">$PROD_PATH</span><span class="st">"</span></span>
<span id="cb4-33"><a href="#cb4-33" aria-hidden="true"></a><span class="bu">echo</span> <span class="st">"Importing database..."</span></span>
<span id="cb4-34"><a href="#cb4-34" aria-hidden="true"></a><span class="ex">wp</span> db import /tmp/staging-push.sql.gz</span>
<span id="cb4-35"><a href="#cb4-35" aria-hidden="true"></a></span>
<span id="cb4-36"><a href="#cb4-36" aria-hidden="true"></a><span class="co"># Update URLs</span></span>
<span id="cb4-37"><a href="#cb4-37" aria-hidden="true"></a><span class="bu">echo</span> <span class="st">"Updating URLs for production..."</span></span>
<span id="cb4-38"><a href="#cb4-38" aria-hidden="true"></a><span class="ex">wp</span> search-replace <span class="st">"</span><span class="va">$STAGING_URL</span><span class="st">"</span> <span class="st">"</span><span class="va">$PROD_URL</span><span class="st">"</span></span>
<span id="cb4-39"><a href="#cb4-39" aria-hidden="true"></a><span class="ex">wp</span> option update home <span class="st">"</span><span class="va">$PROD_URL</span><span class="st">"</span></span>
<span id="cb4-40"><a href="#cb4-40" aria-hidden="true"></a><span class="ex">wp</span> option update siteurl <span class="st">"</span><span class="va">$PROD_URL</span><span class="st">"</span></span>
<span id="cb4-41"><a href="#cb4-41" aria-hidden="true"></a></span>
<span id="cb4-42"><a href="#cb4-42" aria-hidden="true"></a><span class="co"># Clear caches</span></span>
<span id="cb4-43"><a href="#cb4-43" aria-hidden="true"></a><span class="ex">wp</span> cache flush</span>
<span id="cb4-44"><a href="#cb4-44" aria-hidden="true"></a><span class="ex">wp</span> rewrite flush</span>
<span id="cb4-45"><a href="#cb4-45" aria-hidden="true"></a></span>
<span id="cb4-46"><a href="#cb4-46" aria-hidden="true"></a><span class="co"># Cleanup</span></span>
<span id="cb4-47"><a href="#cb4-47" aria-hidden="true"></a><span class="fu">rm</span> /tmp/staging-push.sql.gz</span>
<span id="cb4-48"><a href="#cb4-48" aria-hidden="true"></a></span>
<span id="cb4-49"><a href="#cb4-49" aria-hidden="true"></a><span class="bu">echo</span> <span class="st">"✓ Staging pushed to production"</span></span></code></pre>
</div>



<h3 class="wp-block-heading" id="advanced-cloning">Advanced Cloning Features</h3>



<p>Add professional features to cloning automation.</p>



<h4 class="wp-block-heading" id="selective-cloning">Selective Cloning</h4>



<div class="sourceCode" id="cb5">
<pre class="sourceCode bash"><code class="sourceCode bash"><span id="cb5-1"><a href="#cb5-1" aria-hidden="true"></a><span class="co">#!/bin/bash</span></span>
<span id="cb5-2"><a href="#cb5-2" aria-hidden="true"></a><span class="co"># selective-clone.sh - Clone only specific components</span></span>
<span id="cb5-3"><a href="#cb5-3" aria-hidden="true"></a></span>
<span id="cb5-4"><a href="#cb5-4" aria-hidden="true"></a><span class="va">SOURCE_PATH=</span><span class="st">"</span><span class="va">$1</span><span class="st">"</span></span>
<span id="cb5-5"><a href="#cb5-5" aria-hidden="true"></a><span class="va">DEST_PATH=</span><span class="st">"</span><span class="va">$2</span><span class="st">"</span></span>
<span id="cb5-6"><a href="#cb5-6" aria-hidden="true"></a><span class="va">CLONE_TYPE=</span><span class="st">"</span><span class="va">$3</span><span class="st">"</span>  # <span class="ex">database</span>, files, plugins, themes, uploads</span>
<span id="cb5-7"><a href="#cb5-7" aria-hidden="true"></a></span>
<span id="cb5-8"><a href="#cb5-8" aria-hidden="true"></a><span class="kw">case</span> <span class="st">"</span><span class="va">$CLONE_TYPE</span><span class="st">"</span><span class="kw"> in</span></span>
<span id="cb5-9"><a href="#cb5-9" aria-hidden="true"></a>    database<span class="kw">)</span></span>
<span id="cb5-10"><a href="#cb5-10" aria-hidden="true"></a>        <span class="bu">echo</span> <span class="st">"Cloning database only..."</span></span>
<span id="cb5-11"><a href="#cb5-11" aria-hidden="true"></a>        <span class="bu">cd</span> <span class="st">"</span><span class="va">$SOURCE_PATH</span><span class="st">"</span></span>
<span id="cb5-12"><a href="#cb5-12" aria-hidden="true"></a>        <span class="ex">wp</span> db export /tmp/db-clone.sql.gz</span>
<span id="cb5-13"><a href="#cb5-13" aria-hidden="true"></a>        <span class="bu">cd</span> <span class="st">"</span><span class="va">$DEST_PATH</span><span class="st">"</span></span>
<span id="cb5-14"><a href="#cb5-14" aria-hidden="true"></a>        <span class="ex">wp</span> db import /tmp/db-clone.sql.gz</span>
<span id="cb5-15"><a href="#cb5-15" aria-hidden="true"></a>        <span class="fu">rm</span> /tmp/db-clone.sql.gz</span>
<span id="cb5-16"><a href="#cb5-16" aria-hidden="true"></a>        <span class="kw">;;</span></span>
<span id="cb5-17"><a href="#cb5-17" aria-hidden="true"></a></span>
<span id="cb5-18"><a href="#cb5-18" aria-hidden="true"></a>    files<span class="kw">)</span></span>
<span id="cb5-19"><a href="#cb5-19" aria-hidden="true"></a>        <span class="bu">echo</span> <span class="st">"Cloning files only..."</span></span>
<span id="cb5-20"><a href="#cb5-20" aria-hidden="true"></a>        <span class="fu">rsync</span> -av <span class="st">"</span><span class="va">$SOURCE_PATH</span><span class="st">/"</span> <span class="st">"</span><span class="va">$DEST_PATH</span><span class="st">/"</span></span>
<span id="cb5-21"><a href="#cb5-21" aria-hidden="true"></a>        <span class="kw">;;</span></span>
<span id="cb5-22"><a href="#cb5-22" aria-hidden="true"></a></span>
<span id="cb5-23"><a href="#cb5-23" aria-hidden="true"></a>    plugins<span class="kw">)</span></span>
<span id="cb5-24"><a href="#cb5-24" aria-hidden="true"></a>        <span class="bu">echo</span> <span class="st">"Cloning plugins..."</span></span>
<span id="cb5-25"><a href="#cb5-25" aria-hidden="true"></a>        <span class="fu">rsync</span> -av <span class="st">"</span><span class="va">$SOURCE_PATH</span><span class="st">/wp-content/plugins/"</span> <span class="st">"</span><span class="va">$DEST_PATH</span><span class="st">/wp-content/plugins/"</span></span>
<span id="cb5-26"><a href="#cb5-26" aria-hidden="true"></a>        <span class="kw">;;</span></span>
<span id="cb5-27"><a href="#cb5-27" aria-hidden="true"></a></span>
<span id="cb5-28"><a href="#cb5-28" aria-hidden="true"></a>    themes<span class="kw">)</span></span>
<span id="cb5-29"><a href="#cb5-29" aria-hidden="true"></a>        <span class="bu">echo</span> <span class="st">"Cloning themes..."</span></span>
<span id="cb5-30"><a href="#cb5-30" aria-hidden="true"></a>        <span class="fu">rsync</span> -av <span class="st">"</span><span class="va">$SOURCE_PATH</span><span class="st">/wp-content/themes/"</span> <span class="st">"</span><span class="va">$DEST_PATH</span><span class="st">/wp-content/themes/"</span></span>
<span id="cb5-31"><a href="#cb5-31" aria-hidden="true"></a>        <span class="kw">;;</span></span>
<span id="cb5-32"><a href="#cb5-32" aria-hidden="true"></a></span>
<span id="cb5-33"><a href="#cb5-33" aria-hidden="true"></a>    uploads<span class="kw">)</span></span>
<span id="cb5-34"><a href="#cb5-34" aria-hidden="true"></a>        <span class="bu">echo</span> <span class="st">"Cloning uploads..."</span></span>
<span id="cb5-35"><a href="#cb5-35" aria-hidden="true"></a>        <span class="fu">rsync</span> -av <span class="st">"</span><span class="va">$SOURCE_PATH</span><span class="st">/wp-content/uploads/"</span> <span class="st">"</span><span class="va">$DEST_PATH</span><span class="st">/wp-content/uploads/"</span></span>
<span id="cb5-36"><a href="#cb5-36" aria-hidden="true"></a>        <span class="kw">;;</span></span>
<span id="cb5-37"><a href="#cb5-37" aria-hidden="true"></a></span>
<span id="cb5-38"><a href="#cb5-38" aria-hidden="true"></a>    *<span class="kw">)</span></span>
<span id="cb5-39"><a href="#cb5-39" aria-hidden="true"></a>        <span class="bu">echo</span> <span class="st">"Usage: </span><span class="va">$0</span><span class="st"> &lt;source&gt; &lt;dest&gt; &lt;database|files|plugins|themes|uploads&gt;"</span></span>
<span id="cb5-40"><a href="#cb5-40" aria-hidden="true"></a>        <span class="bu">exit</span> 1</span>
<span id="cb5-41"><a href="#cb5-41" aria-hidden="true"></a>        <span class="kw">;;</span></span>
<span id="cb5-42"><a href="#cb5-42" aria-hidden="true"></a><span class="kw">esac</span></span>
<span id="cb5-43"><a href="#cb5-43" aria-hidden="true"></a></span>
<span id="cb5-44"><a href="#cb5-44" aria-hidden="true"></a><span class="bu">echo</span> <span class="st">"✓ Selective clone complete"</span></span></code></pre>
</div>



<h4 class="wp-block-heading" id="clone-with-sanitization">Clone with Sanitization</h4>



<div class="sourceCode" id="cb6">
<pre class="sourceCode bash"><code class="sourceCode bash"><span id="cb6-1"><a href="#cb6-1" aria-hidden="true"></a><span class="co">#!/bin/bash</span></span>
<span id="cb6-2"><a href="#cb6-2" aria-hidden="true"></a><span class="co"># clone-sanitized.sh - Clone for development, remove sensitive data</span></span>
<span id="cb6-3"><a href="#cb6-3" aria-hidden="true"></a></span>
<span id="cb6-4"><a href="#cb6-4" aria-hidden="true"></a><span class="va">SOURCE_PATH=</span><span class="st">"</span><span class="va">$1</span><span class="st">"</span></span>
<span id="cb6-5"><a href="#cb6-5" aria-hidden="true"></a><span class="va">DEST_PATH=</span><span class="st">"</span><span class="va">$2</span><span class="st">"</span></span>
<span id="cb6-6"><a href="#cb6-6" aria-hidden="true"></a></span>
<span id="cb6-7"><a href="#cb6-7" aria-hidden="true"></a><span class="co"># Clone site</span></span>
<span id="cb6-8"><a href="#cb6-8" aria-hidden="true"></a><span class="fu">bash</span> /usr/local/bin/clone-wordpress-site.sh <span class="st">"</span><span class="va">$SOURCE_PATH</span><span class="st">"</span> <span class="st">"</span><span class="va">$DEST_PATH</span><span class="st">"</span></span>
<span id="cb6-9"><a href="#cb6-9" aria-hidden="true"></a></span>
<span id="cb6-10"><a href="#cb6-10" aria-hidden="true"></a><span class="bu">cd</span> <span class="st">"</span><span class="va">$DEST_PATH</span><span class="st">"</span></span>
<span id="cb6-11"><a href="#cb6-11" aria-hidden="true"></a></span>
<span id="cb6-12"><a href="#cb6-12" aria-hidden="true"></a><span class="bu">echo</span> <span class="st">"Sanitizing clone for development..."</span></span>
<span id="cb6-13"><a href="#cb6-13" aria-hidden="true"></a></span>
<span id="cb6-14"><a href="#cb6-14" aria-hidden="true"></a><span class="co"># Deactivate security plugins</span></span>
<span id="cb6-15"><a href="#cb6-15" aria-hidden="true"></a><span class="ex">wp</span> plugin deactivate wordfence sucuri-scanner --quiet</span>
<span id="cb6-16"><a href="#cb6-16" aria-hidden="true"></a></span>
<span id="cb6-17"><a href="#cb6-17" aria-hidden="true"></a><span class="co"># Remove sensitive data</span></span>
<span id="cb6-18"><a href="#cb6-18" aria-hidden="true"></a><span class="bu">echo</span> <span class="st">"Removing sensitive user data..."</span></span>
<span id="cb6-19"><a href="#cb6-19" aria-hidden="true"></a></span>
<span id="cb6-20"><a href="#cb6-20" aria-hidden="true"></a><span class="co"># Anonymize user emails</span></span>
<span id="cb6-21"><a href="#cb6-21" aria-hidden="true"></a><span class="kw">for</span> <span class="ex">user_id</span> in <span class="va">$(</span><span class="ex">wp</span> user list --field=ID<span class="va">)</span><span class="kw">;</span> <span class="kw">do</span></span>
<span id="cb6-22"><a href="#cb6-22" aria-hidden="true"></a>    <span class="va">USERNAME=$(</span><span class="ex">wp</span> user get <span class="va">$user_id</span> --field=user_login<span class="va">)</span></span>
<span id="cb6-23"><a href="#cb6-23" aria-hidden="true"></a>    <span class="ex">wp</span> user update <span class="va">$user_id</span> --user_email=<span class="st">"</span><span class="va">${USERNAME}</span><span class="st">@example.test"</span></span>
<span id="cb6-24"><a href="#cb6-24" aria-hidden="true"></a><span class="kw">done</span></span>
<span id="cb6-25"><a href="#cb6-25" aria-hidden="true"></a></span>
<span id="cb6-26"><a href="#cb6-26" aria-hidden="true"></a><span class="co"># Remove real passwords (force password reset)</span></span>
<span id="cb6-27"><a href="#cb6-27" aria-hidden="true"></a><span class="kw">for</span> <span class="ex">user_id</span> in <span class="va">$(</span><span class="ex">wp</span> user list --field=ID<span class="va">)</span><span class="kw">;</span> <span class="kw">do</span></span>
<span id="cb6-28"><a href="#cb6-28" aria-hidden="true"></a>    <span class="ex">wp</span> user update <span class="va">$user_id</span> --user_pass=<span class="st">"development"</span></span>
<span id="cb6-29"><a href="#cb6-29" aria-hidden="true"></a><span class="kw">done</span></span>
<span id="cb6-30"><a href="#cb6-30" aria-hidden="true"></a></span>
<span id="cb6-31"><a href="#cb6-31" aria-hidden="true"></a><span class="co"># Remove payment gateway credentials</span></span>
<span id="cb6-32"><a href="#cb6-32" aria-hidden="true"></a><span class="ex">wp</span> option update woocommerce_stripe_settings <span class="st">'{"enabled":"no"}'</span></span>
<span id="cb6-33"><a href="#cb6-33" aria-hidden="true"></a><span class="ex">wp</span> option update woocommerce_paypal_settings <span class="st">'{"enabled":"no"}'</span></span>
<span id="cb6-34"><a href="#cb6-34" aria-hidden="true"></a></span>
<span id="cb6-35"><a href="#cb6-35" aria-hidden="true"></a><span class="co"># Disable external services</span></span>
<span id="cb6-36"><a href="#cb6-36" aria-hidden="true"></a><span class="ex">wp</span> plugin deactivate google-analytics mailchimp --quiet</span>
<span id="cb6-37"><a href="#cb6-37" aria-hidden="true"></a></span>
<span id="cb6-38"><a href="#cb6-38" aria-hidden="true"></a><span class="co"># Enable debug mode</span></span>
<span id="cb6-39"><a href="#cb6-39" aria-hidden="true"></a><span class="ex">wp</span> config set WP_DEBUG true --raw</span>
<span id="cb6-40"><a href="#cb6-40" aria-hidden="true"></a><span class="ex">wp</span> config set WP_DEBUG_LOG true --raw</span>
<span id="cb6-41"><a href="#cb6-41" aria-hidden="true"></a></span>
<span id="cb6-42"><a href="#cb6-42" aria-hidden="true"></a><span class="bu">echo</span> <span class="st">"✓ Clone sanitized for development"</span></span></code></pre>
</div>



<h3 class="wp-block-heading" id="multi-environment">Multi-Environment Sync</h3>



<p>Synchronize WordPress across development, staging, and production.</p>



<h4 class="wp-block-heading" id="environment-sync-system">Environment Sync System</h4>



<div class="sourceCode" id="cb7">
<pre class="sourceCode bash"><code class="sourceCode bash"><span id="cb7-1"><a href="#cb7-1" aria-hidden="true"></a><span class="co">#!/bin/bash</span></span>
<span id="cb7-2"><a href="#cb7-2" aria-hidden="true"></a><span class="co"># sync-environments.sh - Sync between dev/staging/prod</span></span>
<span id="cb7-3"><a href="#cb7-3" aria-hidden="true"></a></span>
<span id="cb7-4"><a href="#cb7-4" aria-hidden="true"></a><span class="va">OPERATION=</span><span class="st">"</span><span class="va">$1</span><span class="st">"</span>  # <span class="ex">pull</span> or push</span>
<span id="cb7-5"><a href="#cb7-5" aria-hidden="true"></a><span class="va">ENV_FROM=</span><span class="st">"</span><span class="va">$2</span><span class="st">"</span>   # <span class="ex">dev</span>, staging, prod</span>
<span id="cb7-6"><a href="#cb7-6" aria-hidden="true"></a><span class="va">ENV_TO=</span><span class="st">"</span><span class="va">$3</span><span class="st">"</span>     # <span class="ex">dev</span>, staging, prod</span>
<span id="cb7-7"><a href="#cb7-7" aria-hidden="true"></a></span>
<span id="cb7-8"><a href="#cb7-8" aria-hidden="true"></a><span class="co"># Environment paths</span></span>
<span id="cb7-9"><a href="#cb7-9" aria-hidden="true"></a><span class="bu">declare</span> -A <span class="va">PATHS=(</span></span>
<span id="cb7-10"><a href="#cb7-10" aria-hidden="true"></a>    [<span class="st">"dev"</span>]=<span class="st">"/var/www/dev"</span></span>
<span id="cb7-11"><a href="#cb7-11" aria-hidden="true"></a>    [<span class="st">"staging"</span>]=<span class="st">"/var/www/staging"</span></span>
<span id="cb7-12"><a href="#cb7-12" aria-hidden="true"></a>    [<span class="st">"prod"</span>]=<span class="st">"/var/www/production"</span></span>
<span id="cb7-13"><a href="#cb7-13" aria-hidden="true"></a>)</span>
<span id="cb7-14"><a href="#cb7-14" aria-hidden="true"></a></span>
<span id="cb7-15"><a href="#cb7-15" aria-hidden="true"></a><span class="co"># Environment URLs</span></span>
<span id="cb7-16"><a href="#cb7-16" aria-hidden="true"></a><span class="bu">declare</span> -A <span class="va">URLS=(</span></span>
<span id="cb7-17"><a href="#cb7-17" aria-hidden="true"></a>    [<span class="st">"dev"</span>]=<span class="st">"http://dev.local"</span></span>
<span id="cb7-18"><a href="#cb7-18" aria-hidden="true"></a>    [<span class="st">"staging"</span>]=<span class="st">"https://staging.example.com"</span></span>
<span id="cb7-19"><a href="#cb7-19" aria-hidden="true"></a>    [<span class="st">"prod"</span>]=<span class="st">"https://example.com"</span></span>
<span id="cb7-20"><a href="#cb7-20" aria-hidden="true"></a>)</span>
<span id="cb7-21"><a href="#cb7-21" aria-hidden="true"></a></span>
<span id="cb7-22"><a href="#cb7-22" aria-hidden="true"></a><span class="kw">if</span><span class="bu"> [</span> <span class="ot">-z</span> <span class="st">"</span><span class="va">$ENV_TO</span><span class="st">"</span><span class="bu"> ]</span>; <span class="kw">then</span></span>
<span id="cb7-23"><a href="#cb7-23" aria-hidden="true"></a>    <span class="bu">echo</span> <span class="st">"Usage: </span><span class="va">$0</span><span class="st"> &lt;pull|push&gt; &lt;from_env&gt; &lt;to_env&gt;"</span></span>
<span id="cb7-24"><a href="#cb7-24" aria-hidden="true"></a>    <span class="bu">echo</span> <span class="st">"Environments: dev, staging, prod"</span></span>
<span id="cb7-25"><a href="#cb7-25" aria-hidden="true"></a>    <span class="bu">exit</span> 1</span>
<span id="cb7-26"><a href="#cb7-26" aria-hidden="true"></a><span class="kw">fi</span></span>
<span id="cb7-27"><a href="#cb7-27" aria-hidden="true"></a></span>
<span id="cb7-28"><a href="#cb7-28" aria-hidden="true"></a><span class="va">SOURCE_PATH=</span><span class="st">"</span><span class="va">${PATHS[$ENV_FROM]}</span><span class="st">"</span></span>
<span id="cb7-29"><a href="#cb7-29" aria-hidden="true"></a><span class="va">DEST_PATH=</span><span class="st">"</span><span class="va">${PATHS[$ENV_TO]}</span><span class="st">"</span></span>
<span id="cb7-30"><a href="#cb7-30" aria-hidden="true"></a><span class="va">SOURCE_URL=</span><span class="st">"</span><span class="va">${URLS[$ENV_FROM]}</span><span class="st">"</span></span>
<span id="cb7-31"><a href="#cb7-31" aria-hidden="true"></a><span class="va">DEST_URL=</span><span class="st">"</span><span class="va">${URLS[$ENV_TO]}</span><span class="st">"</span></span>
<span id="cb7-32"><a href="#cb7-32" aria-hidden="true"></a></span>
<span id="cb7-33"><a href="#cb7-33" aria-hidden="true"></a><span class="bu">echo</span> <span class="st">"Syncing </span><span class="va">$ENV_FROM</span><span class="st"> → </span><span class="va">$ENV_TO</span><span class="st">"</span></span>
<span id="cb7-34"><a href="#cb7-34" aria-hidden="true"></a></span>
<span id="cb7-35"><a href="#cb7-35" aria-hidden="true"></a><span class="co"># Confirmation for production</span></span>
<span id="cb7-36"><a href="#cb7-36" aria-hidden="true"></a><span class="kw">if</span><span class="bu"> [</span> <span class="st">"</span><span class="va">$ENV_TO</span><span class="st">"</span> <span class="ot">==</span> <span class="st">"prod"</span><span class="bu"> ]</span>; <span class="kw">then</span></span>
<span id="cb7-37"><a href="#cb7-37" aria-hidden="true"></a>    <span class="bu">read</span> -p <span class="st">"WARNING: Syncing to production. Continue? (y/n) "</span> -n 1 -r</span>
<span id="cb7-38"><a href="#cb7-38" aria-hidden="true"></a>    <span class="bu">echo</span></span>
<span id="cb7-39"><a href="#cb7-39" aria-hidden="true"></a>    <span class="kw">if [[</span> <span class="ot">!</span> <span class="va">$REPLY</span> =~ ^[Yy]$<span class="kw"> ]]</span>; <span class="kw">then</span></span>
<span id="cb7-40"><a href="#cb7-40" aria-hidden="true"></a>        <span class="bu">exit</span> 0</span>
<span id="cb7-41"><a href="#cb7-41" aria-hidden="true"></a>    <span class="kw">fi</span></span>
<span id="cb7-42"><a href="#cb7-42" aria-hidden="true"></a><span class="kw">fi</span></span>
<span id="cb7-43"><a href="#cb7-43" aria-hidden="true"></a></span>
<span id="cb7-44"><a href="#cb7-44" aria-hidden="true"></a><span class="co"># Backup destination</span></span>
<span id="cb7-45"><a href="#cb7-45" aria-hidden="true"></a><span class="bu">cd</span> <span class="st">"</span><span class="va">$DEST_PATH</span><span class="st">"</span></span>
<span id="cb7-46"><a href="#cb7-46" aria-hidden="true"></a><span class="bu">echo</span> <span class="st">"Backing up </span><span class="va">$ENV_TO</span><span class="st">..."</span></span>
<span id="cb7-47"><a href="#cb7-47" aria-hidden="true"></a><span class="ex">wp</span> db export <span class="st">"/backups/</span><span class="va">${ENV_TO}</span><span class="st">-before-sync-</span><span class="va">$(</span><span class="fu">date</span> +%Y%m%d<span class="va">)</span><span class="st">.sql.gz"</span></span>
<span id="cb7-48"><a href="#cb7-48" aria-hidden="true"></a></span>
<span id="cb7-49"><a href="#cb7-49" aria-hidden="true"></a><span class="co"># Clone</span></span>
<span id="cb7-50"><a href="#cb7-50" aria-hidden="true"></a><span class="bu">cd</span> <span class="st">"</span><span class="va">$SOURCE_PATH</span><span class="st">"</span></span>
<span id="cb7-51"><a href="#cb7-51" aria-hidden="true"></a><span class="ex">wp</span> db export /tmp/env-sync.sql.gz</span>
<span id="cb7-52"><a href="#cb7-52" aria-hidden="true"></a></span>
<span id="cb7-53"><a href="#cb7-53" aria-hidden="true"></a><span class="fu">rsync</span> -av <span class="kw">\</span></span>
<span id="cb7-54"><a href="#cb7-54" aria-hidden="true"></a>    <span class="ex">--exclude</span>=<span class="st">'wp-config.php'</span> <span class="kw">\</span></span>
<span id="cb7-55"><a href="#cb7-55" aria-hidden="true"></a>    <span class="ex">--exclude</span>=<span class="st">'wp-content/cache'</span> <span class="kw">\</span></span>
<span id="cb7-56"><a href="#cb7-56" aria-hidden="true"></a>    <span class="st">"</span><span class="va">$SOURCE_PATH</span><span class="st">/"</span> <span class="st">"</span><span class="va">$DEST_PATH</span><span class="st">/"</span></span>
<span id="cb7-57"><a href="#cb7-57" aria-hidden="true"></a></span>
<span id="cb7-58"><a href="#cb7-58" aria-hidden="true"></a><span class="bu">cd</span> <span class="st">"</span><span class="va">$DEST_PATH</span><span class="st">"</span></span>
<span id="cb7-59"><a href="#cb7-59" aria-hidden="true"></a><span class="ex">wp</span> db import /tmp/env-sync.sql.gz</span>
<span id="cb7-60"><a href="#cb7-60" aria-hidden="true"></a></span>
<span id="cb7-61"><a href="#cb7-61" aria-hidden="true"></a><span class="co"># Update URLs</span></span>
<span id="cb7-62"><a href="#cb7-62" aria-hidden="true"></a><span class="ex">wp</span> search-replace <span class="st">"</span><span class="va">$SOURCE_URL</span><span class="st">"</span> <span class="st">"</span><span class="va">$DEST_URL</span><span class="st">"</span></span>
<span id="cb7-63"><a href="#cb7-63" aria-hidden="true"></a><span class="ex">wp</span> option update home <span class="st">"</span><span class="va">$DEST_URL</span><span class="st">"</span></span>
<span id="cb7-64"><a href="#cb7-64" aria-hidden="true"></a><span class="ex">wp</span> option update siteurl <span class="st">"</span><span class="va">$DEST_URL</span><span class="st">"</span></span>
<span id="cb7-65"><a href="#cb7-65" aria-hidden="true"></a></span>
<span id="cb7-66"><a href="#cb7-66" aria-hidden="true"></a><span class="co"># Clear caches</span></span>
<span id="cb7-67"><a href="#cb7-67" aria-hidden="true"></a><span class="ex">wp</span> cache flush</span>
<span id="cb7-68"><a href="#cb7-68" aria-hidden="true"></a><span class="ex">wp</span> rewrite flush</span>
<span id="cb7-69"><a href="#cb7-69" aria-hidden="true"></a></span>
<span id="cb7-70"><a href="#cb7-70" aria-hidden="true"></a><span class="fu">rm</span> /tmp/env-sync.sql.gz</span>
<span id="cb7-71"><a href="#cb7-71" aria-hidden="true"></a></span>
<span id="cb7-72"><a href="#cb7-72" aria-hidden="true"></a><span class="bu">echo</span> <span class="st">"✓ Environment sync complete: </span><span class="va">$ENV_FROM</span><span class="st"> → </span><span class="va">$ENV_TO</span><span class="st">"</span></span></code></pre>
</div>



<h3 class="wp-block-heading" id="verification">Clone Verification</h3>



<p>Validate clones are complete and functional.</p>



<h4 class="wp-block-heading" id="complete-verification-script">Complete Verification Script</h4>



<div class="sourceCode" id="cb8">
<pre class="sourceCode bash"><code class="sourceCode bash"><span id="cb8-1"><a href="#cb8-1" aria-hidden="true"></a><span class="co">#!/bin/bash</span></span>
<span id="cb8-2"><a href="#cb8-2" aria-hidden="true"></a><span class="co"># verify-clone.sh - Verify WordPress clone</span></span>
<span id="cb8-3"><a href="#cb8-3" aria-hidden="true"></a></span>
<span id="cb8-4"><a href="#cb8-4" aria-hidden="true"></a><span class="va">CLONE_PATH=</span><span class="st">"</span><span class="va">$1</span><span class="st">"</span></span>
<span id="cb8-5"><a href="#cb8-5" aria-hidden="true"></a></span>
<span id="cb8-6"><a href="#cb8-6" aria-hidden="true"></a><span class="kw">if</span><span class="bu"> [</span> <span class="ot">-z</span> <span class="st">"</span><span class="va">$CLONE_PATH</span><span class="st">"</span><span class="bu"> ]</span>; <span class="kw">then</span></span>
<span id="cb8-7"><a href="#cb8-7" aria-hidden="true"></a>    <span class="bu">echo</span> <span class="st">"Usage: </span><span class="va">$0</span><span class="st"> &lt;clone_path&gt;"</span></span>
<span id="cb8-8"><a href="#cb8-8" aria-hidden="true"></a>    <span class="bu">exit</span> 1</span>
<span id="cb8-9"><a href="#cb8-9" aria-hidden="true"></a><span class="kw">fi</span></span>
<span id="cb8-10"><a href="#cb8-10" aria-hidden="true"></a></span>
<span id="cb8-11"><a href="#cb8-11" aria-hidden="true"></a><span class="bu">cd</span> <span class="st">"</span><span class="va">$CLONE_PATH</span><span class="st">"</span></span>
<span id="cb8-12"><a href="#cb8-12" aria-hidden="true"></a></span>
<span id="cb8-13"><a href="#cb8-13" aria-hidden="true"></a><span class="bu">echo</span> <span class="st">"Verifying WordPress clone..."</span></span>
<span id="cb8-14"><a href="#cb8-14" aria-hidden="true"></a></span>
<span id="cb8-15"><a href="#cb8-15" aria-hidden="true"></a><span class="co"># Check WordPress is installed</span></span>
<span id="cb8-16"><a href="#cb8-16" aria-hidden="true"></a><span class="kw">if</span> ! <span class="ex">wp</span> core is-installed <span class="op">2&gt;</span>/dev/null<span class="kw">;</span> <span class="kw">then</span></span>
<span id="cb8-17"><a href="#cb8-17" aria-hidden="true"></a>    <span class="bu">echo</span> <span class="st">"✗ WordPress not properly installed"</span></span>
<span id="cb8-18"><a href="#cb8-18" aria-hidden="true"></a>    <span class="bu">exit</span> 1</span>
<span id="cb8-19"><a href="#cb8-19" aria-hidden="true"></a><span class="kw">fi</span></span>
<span id="cb8-20"><a href="#cb8-20" aria-hidden="true"></a><span class="bu">echo</span> <span class="st">"✓ WordPress installed"</span></span>
<span id="cb8-21"><a href="#cb8-21" aria-hidden="true"></a></span>
<span id="cb8-22"><a href="#cb8-22" aria-hidden="true"></a><span class="co"># Check database connection</span></span>
<span id="cb8-23"><a href="#cb8-23" aria-hidden="true"></a><span class="kw">if</span> ! <span class="ex">wp</span> db check <span class="op">2&gt;</span>/dev/null<span class="kw">;</span> <span class="kw">then</span></span>
<span id="cb8-24"><a href="#cb8-24" aria-hidden="true"></a>    <span class="bu">echo</span> <span class="st">"✗ Database connection failed"</span></span>
<span id="cb8-25"><a href="#cb8-25" aria-hidden="true"></a>    <span class="bu">exit</span> 1</span>
<span id="cb8-26"><a href="#cb8-26" aria-hidden="true"></a><span class="kw">fi</span></span>
<span id="cb8-27"><a href="#cb8-27" aria-hidden="true"></a><span class="bu">echo</span> <span class="st">"✓ Database connected"</span></span>
<span id="cb8-28"><a href="#cb8-28" aria-hidden="true"></a></span>
<span id="cb8-29"><a href="#cb8-29" aria-hidden="true"></a><span class="co"># Verify post count matches</span></span>
<span id="cb8-30"><a href="#cb8-30" aria-hidden="true"></a><span class="co"># (Would need original count passed in for real comparison)</span></span>
<span id="cb8-31"><a href="#cb8-31" aria-hidden="true"></a><span class="va">POST_COUNT=$(</span><span class="ex">wp</span> post list --format=count<span class="va">)</span></span>
<span id="cb8-32"><a href="#cb8-32" aria-hidden="true"></a><span class="bu">echo</span> <span class="st">"✓ Posts: </span><span class="va">$POST_COUNT</span><span class="st">"</span></span>
<span id="cb8-33"><a href="#cb8-33" aria-hidden="true"></a></span>
<span id="cb8-34"><a href="#cb8-34" aria-hidden="true"></a><span class="co"># Verify user count</span></span>
<span id="cb8-35"><a href="#cb8-35" aria-hidden="true"></a><span class="va">USER_COUNT=$(</span><span class="ex">wp</span> user list --format=count<span class="va">)</span></span>
<span id="cb8-36"><a href="#cb8-36" aria-hidden="true"></a><span class="bu">echo</span> <span class="st">"✓ Users: </span><span class="va">$USER_COUNT</span><span class="st">"</span></span>
<span id="cb8-37"><a href="#cb8-37" aria-hidden="true"></a></span>
<span id="cb8-38"><a href="#cb8-38" aria-hidden="true"></a><span class="co"># Verify plugins</span></span>
<span id="cb8-39"><a href="#cb8-39" aria-hidden="true"></a><span class="va">PLUGIN_COUNT=$(</span><span class="ex">wp</span> plugin list --format=count<span class="va">)</span></span>
<span id="cb8-40"><a href="#cb8-40" aria-hidden="true"></a><span class="bu">echo</span> <span class="st">"✓ Plugins: </span><span class="va">$PLUGIN_COUNT</span><span class="st">"</span></span>
<span id="cb8-41"><a href="#cb8-41" aria-hidden="true"></a></span>
<span id="cb8-42"><a href="#cb8-42" aria-hidden="true"></a><span class="co"># Check for broken URLs</span></span>
<span id="cb8-43"><a href="#cb8-43" aria-hidden="true"></a><span class="va">SITE_URL=$(</span><span class="ex">wp</span> option get siteurl<span class="va">)</span></span>
<span id="cb8-44"><a href="#cb8-44" aria-hidden="true"></a><span class="bu">echo</span> <span class="st">"Site URL: </span><span class="va">$SITE_URL</span><span class="st">"</span></span>
<span id="cb8-45"><a href="#cb8-45" aria-hidden="true"></a></span>
<span id="cb8-46"><a href="#cb8-46" aria-hidden="true"></a><span class="co"># Test site accessibility</span></span>
<span id="cb8-47"><a href="#cb8-47" aria-hidden="true"></a><span class="kw">if</span> <span class="ex">curl</span> -f -s <span class="st">"</span><span class="va">$SITE_URL</span><span class="st">"</span> <span class="op">&gt;</span> /dev/null<span class="kw">;</span> <span class="kw">then</span></span>
<span id="cb8-48"><a href="#cb8-48" aria-hidden="true"></a>    <span class="bu">echo</span> <span class="st">"✓ Site accessible"</span></span>
<span id="cb8-49"><a href="#cb8-49" aria-hidden="true"></a><span class="kw">else</span></span>
<span id="cb8-50"><a href="#cb8-50" aria-hidden="true"></a>    <span class="bu">echo</span> <span class="st">"✗ Site not accessible"</span></span>
<span id="cb8-51"><a href="#cb8-51" aria-hidden="true"></a>    <span class="bu">exit</span> 1</span>
<span id="cb8-52"><a href="#cb8-52" aria-hidden="true"></a><span class="kw">fi</span></span>
<span id="cb8-53"><a href="#cb8-53" aria-hidden="true"></a></span>
<span id="cb8-54"><a href="#cb8-54" aria-hidden="true"></a><span class="co"># Verify file permissions</span></span>
<span id="cb8-55"><a href="#cb8-55" aria-hidden="true"></a><span class="kw">if</span><span class="bu"> [</span> <span class="ot">-w</span> wp-content<span class="bu"> ]</span>; <span class="kw">then</span></span>
<span id="cb8-56"><a href="#cb8-56" aria-hidden="true"></a>    <span class="bu">echo</span> <span class="st">"✓ wp-content writable"</span></span>
<span id="cb8-57"><a href="#cb8-57" aria-hidden="true"></a><span class="kw">else</span></span>
<span id="cb8-58"><a href="#cb8-58" aria-hidden="true"></a>    <span class="bu">echo</span> <span class="st">"✗ wp-content not writable"</span></span>
<span id="cb8-59"><a href="#cb8-59" aria-hidden="true"></a><span class="kw">fi</span></span>
<span id="cb8-60"><a href="#cb8-60" aria-hidden="true"></a></span>
<span id="cb8-61"><a href="#cb8-61" aria-hidden="true"></a><span class="bu">echo</span> <span class="st">"✓ Clone verification complete"</span></span></code></pre>
</div>



<h3 class="wp-block-heading" id="next-steps">Next Steps</h3>



<p>You now have complete WordPress site cloning and migration automation capabilities.</p>



<h4 class="wp-block-heading" id="recommended-learning-path">Recommended Learning Path</h4>



<p><strong>Week 1</strong>: Basic cloning</p>



<ul class="wp-block-list">
<li>Practice local clones</li>



<li>Test database operations</li>



<li>Master URL replacement</li>
</ul>



<p><strong>Week 2</strong>: Remote migrations</p>



<ul class="wp-block-list">
<li>Set up SSH access</li>



<li>Transfer between servers</li>



<li>Handle production pushes</li>
</ul>



<p><strong>Week 3</strong>: Advanced features</p>



<ul class="wp-block-list">
<li>Selective cloning</li>



<li>Data sanitization</li>



<li>Multi-environment sync</li>
</ul>



<p><strong>Week 4</strong>: Production deployment</p>



<ul class="wp-block-list">
<li>Build verification systems</li>



<li>Automate complete workflows</li>



<li>Document procedures</li>
</ul>



<h4 class="wp-block-heading" id="advanced-topics">Advanced Topics</h4>



<ol class="wp-block-list">
<li><strong><a href="#">Blue-Green Deployments</a></strong> &#8211; Zero-downtime migrations</li>



<li><strong><a href="#">Database Sync Strategies</a></strong> &#8211; Incremental updates</li>



<li><strong><a href="#">Large Site Optimization</a></strong> &#8211; Handle massive WordPress sites</li>
</ol>



<h4 class="wp-block-heading" id="get-more-resources">Get More Resources</h4>



<p><strong><a href="#">Download cloning scripts</a></strong> including:</p>



<ul class="wp-block-list">
<li>Complete automation system</li>



<li>Verification tools</li>



<li>Multi-environment management</li>
</ul>



<p><strong><a href="/#get-started">Join our email course</a></strong> for:</p>



<ul class="wp-block-list">
<li>Weekly WP-CLI tutorials</li>



<li>Migration best practices</li>



<li>DevOps workflows</li>
</ul>



<h3 class="wp-block-heading" id="conclusion">Conclusion</h3>



<p>WordPress site cloning and migration automation with WP-CLI transforms hours of manual work into fast, reliable, one-command operations you can trust.</p>



<p>What we covered:</p>



<p>✅ Complete local site cloning automation <br>✅ Remote migration between servers <br>✅ Advanced selective and sanitized cloning <br>✅ Multi-environment synchronization <br>✅ Clone verification and validation <br>✅ Production-ready workflows</p>



<p>Master these techniques, and you’ll clone WordPress sites effortlessly—whether creating staging environments, migrating to new hosts, or replicating sites for development.</p>



<p><strong>Ready for more?</strong> Learn <a href="#">WordPress backup automation</a> or <a href="#">deployment pipelines</a>.</p>



<p><strong>Questions about WordPress cloning and migration?</strong> Drop a comment below!</p>



<p><strong>Found this helpful?</strong> Share with other WordPress developers and agencies.</p>
<p>The post <a href="https://wpclimastery.com/blog/wordpress-site-cloning-and-migration-automation-with-wp-cli/">WordPress Site Cloning and Migration Automation with WP-CLI</a> appeared first on <a href="https://wpclimastery.com">WP-CLI Mastery</a>.</p>
]]></content:encoded>
					
		
		
			</item>
	</channel>
</rss>
