<?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>wordpress maintenance automation Archives - WP-CLI Mastery</title>
	<atom:link href="https://wpclimastery.com/blog/tag/wordpress-maintenance-automation/feed/" rel="self" type="application/rss+xml" />
	<link>https://wpclimastery.com/blog/tag/wordpress-maintenance-automation/</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>wordpress maintenance automation Archives - WP-CLI Mastery</title>
	<link>https://wpclimastery.com/blog/tag/wordpress-maintenance-automation/</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>Bulk Update WordPress Plugins and Themes Across Multiple Sites with WP-CLI</title>
		<link>https://wpclimastery.com/blog/bulk-update-wordpress-plugins-and-themes-across-multiple-sites-with-wp-cli/</link>
		
		<dc:creator><![CDATA[Krasen]]></dc:creator>
		<pubDate>Wed, 10 Dec 2025 09:00:00 +0000</pubDate>
				<category><![CDATA[WordPress Automation]]></category>
		<category><![CDATA[bulk wordpress updates]]></category>
		<category><![CDATA[update multiple wordpress sites]]></category>
		<category><![CDATA[wordpress maintenance automation]]></category>
		<category><![CDATA[wp-cli bulk update]]></category>
		<category><![CDATA[wpcli plugin updates]]></category>
		<guid isPermaLink="false">https://wpclimastery.com/?p=137</guid>

					<description><![CDATA[<p>Managing updates for 10, 50, or 100 WordPress sites means logging into each dashboard, clicking through update screens, and praying nothing breaks. It wastes hours every week and delays critical...</p>
<p>The post <a href="https://wpclimastery.com/blog/bulk-update-wordpress-plugins-and-themes-across-multiple-sites-with-wp-cli/">Bulk Update WordPress Plugins and Themes Across Multiple Sites with WP-CLI</a> appeared first on <a href="https://wpclimastery.com">WP-CLI Mastery</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p>Managing updates for 10, 50, or 100 WordPress sites means logging into each dashboard, clicking through update screens, and praying nothing breaks. It wastes hours every week and delays critical security updates.</p>
<p>WP-CLI lets you update all plugins and themes across unlimited WordPress sites from your terminal—in minutes instead of hours. Add safety checks, automatic backups, and rollback capabilities, and you have enterprise-grade update automation.</p>
<p>In this guide, you’ll learn professional techniques for bulk updating WordPress installations safely, including pre-update backups, staged rollouts, and automated testing used by WordPress agencies managing hundreds of sites.</p>
<h3 id="why-bulk-update">Why Bulk Update with WP-CLI?</h3>
<p><a href="https://wordpress.org/support/article/updating-wordpress/">WordPress updates</a> are critical for security, but manual updates don’t scale.</p>
<h4 id="problems-with-manual-updates">Problems with Manual Updates</h4>
<p><strong>Time-consuming</strong>: Updating 50 sites manually takes 5-8 hours of repetitive clicking.</p>
<p><strong>Security delays</strong>: Critical security patches sit uninstalled for days or weeks.</p>
<p><strong>Inconsistent</strong>: Some sites get updated, others forgotten, creating security gaps.</p>
<p><strong>No rollback</strong>: If an update breaks a site, you’re manually restoring backups.</p>
<p><strong>Update fatigue</strong>: Developers avoid updates because the process is painful.</p>
<h4 id="wp-cli-bulk-update-advantages">WP-CLI Bulk Update Advantages</h4>
<p><strong>Fast</strong>: Update 100 sites in under 30 minutes with automation scripts.</p>
<p><strong>Consistent</strong>: Same update process across all sites prevents human error.</p>
<p><strong>Safe</strong>: Automated backups before every update enable instant rollback.</p>
<p><strong>Scheduled</strong>: Cron automation handles updates during maintenance windows.</p>
<p><strong>Testable</strong>: Stage updates on test sites before production rollout.</p>
<p>According to <a href="https://wpengine.com/resources/wordpress-security-report/">WordPress security research</a>, 60% of hacked WordPress sites were compromised due to outdated plugins. Efficient update workflows prevent breaches.</p>
<h3 id="single-site-updates">Single Site Update Operations</h3>
<p>Master updating individual WordPress installations first.</p>
<h4 id="update-all-plugins">Update All Plugins</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"># Update all plugins</span></span>
<span id="cb1-2"><a href="#cb1-2" aria-hidden="true"></a><span class="ex">wp</span> plugin update --all</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="co"># Preview updates without installing</span></span>
<span id="cb1-5"><a href="#cb1-5" aria-hidden="true"></a><span class="ex">wp</span> plugin update --all --dry-run</span>
<span id="cb1-6"><a href="#cb1-6" aria-hidden="true"></a></span>
<span id="cb1-7"><a href="#cb1-7" aria-hidden="true"></a><span class="co"># Update excluding specific plugins</span></span>
<span id="cb1-8"><a href="#cb1-8" aria-hidden="true"></a><span class="ex">wp</span> plugin update --all --exclude=woocommerce,elementor</span>
<span id="cb1-9"><a href="#cb1-9" aria-hidden="true"></a></span>
<span id="cb1-10"><a href="#cb1-10" aria-hidden="true"></a><span class="co"># Update specific plugins only</span></span>
<span id="cb1-11"><a href="#cb1-11" aria-hidden="true"></a><span class="ex">wp</span> plugin update wordfence yoast-seo contact-form-7</span></code></pre>
</div>
<h4 id="update-all-themes">Update All Themes</h4>
<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="co"># Update all themes</span></span>
<span id="cb2-2"><a href="#cb2-2" aria-hidden="true"></a><span class="ex">wp</span> theme update --all</span>
<span id="cb2-3"><a href="#cb2-3" aria-hidden="true"></a></span>
<span id="cb2-4"><a href="#cb2-4" aria-hidden="true"></a><span class="co"># Update specific theme</span></span>
<span id="cb2-5"><a href="#cb2-5" aria-hidden="true"></a><span class="ex">wp</span> theme update astra</span>
<span id="cb2-6"><a href="#cb2-6" aria-hidden="true"></a></span>
<span id="cb2-7"><a href="#cb2-7" aria-hidden="true"></a><span class="co"># Dry run to preview</span></span>
<span id="cb2-8"><a href="#cb2-8" aria-hidden="true"></a><span class="ex">wp</span> theme update --all --dry-run</span></code></pre>
</div>
<h4 id="update-wordpress-core">Update WordPress Core</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"># Update to latest version</span></span>
<span id="cb3-2"><a href="#cb3-2" aria-hidden="true"></a><span class="ex">wp</span> core update</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="co"># Update to specific version</span></span>
<span id="cb3-5"><a href="#cb3-5" aria-hidden="true"></a><span class="ex">wp</span> core update --version=6.4.2</span>
<span id="cb3-6"><a href="#cb3-6" aria-hidden="true"></a></span>
<span id="cb3-7"><a href="#cb3-7" aria-hidden="true"></a><span class="co"># Update minor versions only (security updates)</span></span>
<span id="cb3-8"><a href="#cb3-8" aria-hidden="true"></a><span class="ex">wp</span> core update --minor</span></code></pre>
</div>
<p><strong>Pro Tip</strong>: Always run <code>--dry-run</code> first to preview what will be updated before making changes.</p>
<p>Learn more in the <a href="https://developer.wordpress.org/cli/commands/plugin/update/">official WP-CLI plugin update documentation</a>.</p>
<h3 id="safe-updates">Safe Update Workflow with Backups</h3>
<p>Never update without backups and rollback capability.</p>
<h4 id="complete-backup-before-updates">Complete Backup Before Updates</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"># safe-update.sh - Update with automatic backup</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">SITE_PATH=</span><span class="st">&quot;/var/www/html&quot;</span></span>
<span id="cb4-5"><a href="#cb4-5" aria-hidden="true"></a><span class="va">BACKUP_DIR=</span><span class="st">&quot;/backups&quot;</span></span>
<span id="cb4-6"><a href="#cb4-6" 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="cb4-7"><a href="#cb4-7" aria-hidden="true"></a></span>
<span id="cb4-8"><a href="#cb4-8" aria-hidden="true"></a><span class="bu">cd</span> <span class="st">&quot;</span><span class="va">$SITE_PATH</span><span class="st">&quot;</span></span>
<span id="cb4-9"><a href="#cb4-9" aria-hidden="true"></a></span>
<span id="cb4-10"><a href="#cb4-10" aria-hidden="true"></a><span class="bu">echo</span> <span class="st">&quot;Creating pre-update backup...&quot;</span></span>
<span id="cb4-11"><a href="#cb4-11" aria-hidden="true"></a></span>
<span id="cb4-12"><a href="#cb4-12" aria-hidden="true"></a><span class="co"># Backup database</span></span>
<span id="cb4-13"><a href="#cb4-13" aria-hidden="true"></a><span class="ex">wp</span> db export <span class="st">&quot;</span><span class="va">$BACKUP_DIR</span><span class="st">/db-before-update-</span><span class="va">$DATE</span><span class="st">.sql.gz&quot;</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 files (plugins, themes, uploads)</span></span>
<span id="cb4-16"><a href="#cb4-16" aria-hidden="true"></a><span class="fu">tar</span> -czf <span class="st">&quot;</span><span class="va">$BACKUP_DIR</span><span class="st">/files-before-update-</span><span class="va">$DATE</span><span class="st">.tar.gz&quot;</span> <span class="kw">\</span></span>
<span id="cb4-17"><a href="#cb4-17" aria-hidden="true"></a>    <span class="ex">wp-content/plugins</span> <span class="kw">\</span></span>
<span id="cb4-18"><a href="#cb4-18" aria-hidden="true"></a>    <span class="ex">wp-content/themes</span> <span class="kw">\</span></span>
<span id="cb4-19"><a href="#cb4-19" aria-hidden="true"></a>    <span class="ex">wp-content/uploads</span></span>
<span id="cb4-20"><a href="#cb4-20" aria-hidden="true"></a></span>
<span id="cb4-21"><a href="#cb4-21" aria-hidden="true"></a><span class="bu">echo</span> <span class="st">&quot;✓ Backup complete&quot;</span></span>
<span id="cb4-22"><a href="#cb4-22" aria-hidden="true"></a></span>
<span id="cb4-23"><a href="#cb4-23" aria-hidden="true"></a><span class="co"># Update plugins</span></span>
<span id="cb4-24"><a href="#cb4-24" aria-hidden="true"></a><span class="bu">echo</span> <span class="st">&quot;Updating plugins...&quot;</span></span>
<span id="cb4-25"><a href="#cb4-25" aria-hidden="true"></a><span class="ex">wp</span> plugin update --all</span>
<span id="cb4-26"><a href="#cb4-26" aria-hidden="true"></a></span>
<span id="cb4-27"><a href="#cb4-27" aria-hidden="true"></a><span class="co"># Update themes</span></span>
<span id="cb4-28"><a href="#cb4-28" aria-hidden="true"></a><span class="bu">echo</span> <span class="st">&quot;Updating themes...&quot;</span></span>
<span id="cb4-29"><a href="#cb4-29" aria-hidden="true"></a><span class="ex">wp</span> theme update --all</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"># Verify WordPress still works</span></span>
<span id="cb4-32"><a href="#cb4-32" 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="cb4-33"><a href="#cb4-33" aria-hidden="true"></a>    <span class="bu">echo</span> <span class="st">&quot;✓ Updates successful, WordPress functional&quot;</span></span>
<span id="cb4-34"><a href="#cb4-34" aria-hidden="true"></a><span class="kw">else</span></span>
<span id="cb4-35"><a href="#cb4-35" aria-hidden="true"></a>    <span class="bu">echo</span> <span class="st">&quot;✗ WordPress check failed, restoring backup...&quot;</span></span>
<span id="cb4-36"><a href="#cb4-36" aria-hidden="true"></a>    <span class="ex">wp</span> db import <span class="st">&quot;</span><span class="va">$BACKUP_DIR</span><span class="st">/db-before-update-</span><span class="va">$DATE</span><span class="st">.sql.gz&quot;</span></span>
<span id="cb4-37"><a href="#cb4-37" aria-hidden="true"></a>    <span class="bu">exit</span> 1</span>
<span id="cb4-38"><a href="#cb4-38" aria-hidden="true"></a><span class="kw">fi</span></span></code></pre>
</div>
<h4 id="rollback-failed-updates">Rollback Failed Updates</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"># rollback-update.sh - Restore last backup</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">BACKUP_DIR=</span><span class="st">&quot;/backups&quot;</span></span>
<span id="cb5-5"><a href="#cb5-5" aria-hidden="true"></a></span>
<span id="cb5-6"><a href="#cb5-6" aria-hidden="true"></a><span class="co"># Find most recent backup</span></span>
<span id="cb5-7"><a href="#cb5-7" aria-hidden="true"></a><span class="va">LATEST_DB=$(</span><span class="fu">ls</span> -t <span class="st">&quot;</span><span class="va">$BACKUP_DIR</span><span class="st">&quot;</span>/db-before-update-*.sql.gz <span class="kw">|</span> <span class="fu">head</span> -1<span class="va">)</span></span>
<span id="cb5-8"><a href="#cb5-8" aria-hidden="true"></a><span class="va">LATEST_FILES=$(</span><span class="fu">ls</span> -t <span class="st">&quot;</span><span class="va">$BACKUP_DIR</span><span class="st">&quot;</span>/files-before-update-*.tar.gz <span class="kw">|</span> <span class="fu">head</span> -1<span class="va">)</span></span>
<span id="cb5-9"><a href="#cb5-9" aria-hidden="true"></a></span>
<span id="cb5-10"><a href="#cb5-10" aria-hidden="true"></a><span class="kw">if</span><span class="bu"> [</span> <span class="ot">-z</span> <span class="st">&quot;</span><span class="va">$LATEST_DB</span><span class="st">&quot;</span><span class="bu"> ]</span>; <span class="kw">then</span></span>
<span id="cb5-11"><a href="#cb5-11" aria-hidden="true"></a>    <span class="bu">echo</span> <span class="st">&quot;No backup found!&quot;</span></span>
<span id="cb5-12"><a href="#cb5-12" aria-hidden="true"></a>    <span class="bu">exit</span> 1</span>
<span id="cb5-13"><a href="#cb5-13" aria-hidden="true"></a><span class="kw">fi</span></span>
<span id="cb5-14"><a href="#cb5-14" aria-hidden="true"></a></span>
<span id="cb5-15"><a href="#cb5-15" aria-hidden="true"></a><span class="bu">echo</span> <span class="st">&quot;Rolling back to backup: </span><span class="va">$LATEST_DB</span><span class="st">&quot;</span></span>
<span id="cb5-16"><a href="#cb5-16" aria-hidden="true"></a></span>
<span id="cb5-17"><a href="#cb5-17" aria-hidden="true"></a><span class="co"># Restore database</span></span>
<span id="cb5-18"><a href="#cb5-18" aria-hidden="true"></a><span class="ex">wp</span> db import <span class="st">&quot;</span><span class="va">$LATEST_DB</span><span class="st">&quot;</span></span>
<span id="cb5-19"><a href="#cb5-19" aria-hidden="true"></a></span>
<span id="cb5-20"><a href="#cb5-20" aria-hidden="true"></a><span class="co"># Restore files</span></span>
<span id="cb5-21"><a href="#cb5-21" aria-hidden="true"></a><span class="fu">tar</span> -xzf <span class="st">&quot;</span><span class="va">$LATEST_FILES</span><span class="st">&quot;</span> -C /var/www/html/</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><span class="bu">echo</span> <span class="st">&quot;✓ Rollback complete&quot;</span></span></code></pre>
</div>
<h3 id="bulk-updates">Bulk Update Across Multiple Sites</h3>
<p>Update plugins and themes across all WordPress installations you manage.</p>
<h4 id="update-multiple-sites-script">Update Multiple Sites Script</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"># bulk-update-sites.sh - Update all managed sites</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">SITES=(</span></span>
<span id="cb6-5"><a href="#cb6-5" aria-hidden="true"></a>    <span class="st">&quot;/var/www/site1&quot;</span></span>
<span id="cb6-6"><a href="#cb6-6" aria-hidden="true"></a>    <span class="st">&quot;/var/www/site2&quot;</span></span>
<span id="cb6-7"><a href="#cb6-7" aria-hidden="true"></a>    <span class="st">&quot;/var/www/site3&quot;</span></span>
<span id="cb6-8"><a href="#cb6-8" aria-hidden="true"></a>    <span class="st">&quot;/var/www/client-site&quot;</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>
<span id="cb6-11"><a href="#cb6-11" aria-hidden="true"></a><span class="va">BACKUP_DIR=</span><span class="st">&quot;/backups&quot;</span></span>
<span id="cb6-12"><a href="#cb6-12" aria-hidden="true"></a><span class="va">LOG_FILE=</span><span class="st">&quot;/var/log/wp-bulk-updates.log&quot;</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="fu">log()</span> <span class="kw">{</span></span>
<span id="cb6-15"><a href="#cb6-15" aria-hidden="true"></a>    <span class="bu">echo</span> <span class="st">&quot;[</span><span class="va">$(</span><span class="fu">date</span> <span class="st">&#39;+%Y-%m-%d %H:%M:%S&#39;</span><span class="va">)</span><span class="st">] </span><span class="va">$@</span><span class="st">&quot;</span> <span class="kw">|</span> <span class="fu">tee</span> -a <span class="st">&quot;</span><span class="va">$LOG_FILE</span><span class="st">&quot;</span></span>
<span id="cb6-16"><a href="#cb6-16" aria-hidden="true"></a><span class="kw">}</span></span>
<span id="cb6-17"><a href="#cb6-17" aria-hidden="true"></a></span>
<span id="cb6-18"><a href="#cb6-18" aria-hidden="true"></a><span class="ex">log</span> <span class="st">&quot;=== Bulk WordPress Update Started ===&quot;</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="kw">for</span> <span class="ex">SITE</span> in <span class="st">&quot;</span><span class="va">${SITES[@]}</span><span class="st">&quot;</span><span class="kw">;</span> <span class="kw">do</span></span>
<span id="cb6-21"><a href="#cb6-21" aria-hidden="true"></a>    <span class="va">SITE_NAME=$(</span><span class="fu">basename</span> <span class="st">&quot;</span><span class="va">$SITE</span><span class="st">&quot;</span><span class="va">)</span></span>
<span id="cb6-22"><a href="#cb6-22" aria-hidden="true"></a>    <span class="ex">log</span> <span class="st">&quot;Processing: </span><span class="va">$SITE_NAME</span><span class="st">&quot;</span></span>
<span id="cb6-23"><a href="#cb6-23" aria-hidden="true"></a></span>
<span id="cb6-24"><a href="#cb6-24" aria-hidden="true"></a>    <span class="bu">cd</span> <span class="st">&quot;</span><span class="va">$SITE</span><span class="st">&quot;</span> <span class="kw">||</span> <span class="kw">{</span> <span class="ex">log</span> <span class="st">&quot;ERROR: Cannot access </span><span class="va">$SITE</span><span class="st">&quot;</span><span class="kw">;</span> <span class="bu">continue</span><span class="kw">;</span> <span class="kw">}</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"># Check WordPress is installed</span></span>
<span id="cb6-27"><a href="#cb6-27" 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="cb6-28"><a href="#cb6-28" aria-hidden="true"></a>        <span class="ex">log</span> <span class="st">&quot;WARNING: WordPress not found in </span><span class="va">$SITE</span><span class="st">, skipping&quot;</span></span>
<span id="cb6-29"><a href="#cb6-29" aria-hidden="true"></a>        <span class="bu">continue</span></span>
<span id="cb6-30"><a href="#cb6-30" aria-hidden="true"></a>    <span class="kw">fi</span></span>
<span id="cb6-31"><a href="#cb6-31" aria-hidden="true"></a></span>
<span id="cb6-32"><a href="#cb6-32" aria-hidden="true"></a>    <span class="co"># Backup database</span></span>
<span id="cb6-33"><a href="#cb6-33" aria-hidden="true"></a>    <span class="va">BACKUP_FILE=</span><span class="st">&quot;</span><span class="va">$BACKUP_DIR</span><span class="st">/</span><span class="va">${SITE_NAME}</span><span class="st">-</span><span class="va">$(</span><span class="fu">date</span> +%Y%m%d<span class="va">)</span><span class="st">.sql.gz&quot;</span></span>
<span id="cb6-34"><a href="#cb6-34" aria-hidden="true"></a>    <span class="kw">if</span> <span class="ex">wp</span> db export <span class="st">&quot;</span><span class="va">$BACKUP_FILE</span><span class="st">&quot;</span><span class="kw">;</span> <span class="kw">then</span></span>
<span id="cb6-35"><a href="#cb6-35" aria-hidden="true"></a>        <span class="ex">log</span> <span class="st">&quot;✓ Backed up: </span><span class="va">$SITE_NAME</span><span class="st">&quot;</span></span>
<span id="cb6-36"><a href="#cb6-36" aria-hidden="true"></a>    <span class="kw">else</span></span>
<span id="cb6-37"><a href="#cb6-37" aria-hidden="true"></a>        <span class="ex">log</span> <span class="st">&quot;✗ Backup failed for </span><span class="va">$SITE_NAME</span><span class="st">, skipping updates&quot;</span></span>
<span id="cb6-38"><a href="#cb6-38" aria-hidden="true"></a>        <span class="bu">continue</span></span>
<span id="cb6-39"><a href="#cb6-39" aria-hidden="true"></a>    <span class="kw">fi</span></span>
<span id="cb6-40"><a href="#cb6-40" aria-hidden="true"></a></span>
<span id="cb6-41"><a href="#cb6-41" aria-hidden="true"></a>    <span class="co"># Update plugins</span></span>
<span id="cb6-42"><a href="#cb6-42" aria-hidden="true"></a>    <span class="ex">log</span> <span class="st">&quot;Updating plugins for </span><span class="va">$SITE_NAME</span><span class="st">...&quot;</span></span>
<span id="cb6-43"><a href="#cb6-43" aria-hidden="true"></a>    <span class="kw">if</span> <span class="ex">wp</span> plugin update --all --quiet<span class="kw">;</span> <span class="kw">then</span></span>
<span id="cb6-44"><a href="#cb6-44" aria-hidden="true"></a>        <span class="ex">log</span> <span class="st">&quot;✓ Plugins updated: </span><span class="va">$SITE_NAME</span><span class="st">&quot;</span></span>
<span id="cb6-45"><a href="#cb6-45" aria-hidden="true"></a>    <span class="kw">else</span></span>
<span id="cb6-46"><a href="#cb6-46" aria-hidden="true"></a>        <span class="ex">log</span> <span class="st">&quot;✗ Plugin update failed: </span><span class="va">$SITE_NAME</span><span class="st">&quot;</span></span>
<span id="cb6-47"><a href="#cb6-47" aria-hidden="true"></a>    <span class="kw">fi</span></span>
<span id="cb6-48"><a href="#cb6-48" aria-hidden="true"></a></span>
<span id="cb6-49"><a href="#cb6-49" aria-hidden="true"></a>    <span class="co"># Update themes</span></span>
<span id="cb6-50"><a href="#cb6-50" aria-hidden="true"></a>    <span class="ex">log</span> <span class="st">&quot;Updating themes for </span><span class="va">$SITE_NAME</span><span class="st">...&quot;</span></span>
<span id="cb6-51"><a href="#cb6-51" aria-hidden="true"></a>    <span class="kw">if</span> <span class="ex">wp</span> theme update --all --quiet<span class="kw">;</span> <span class="kw">then</span></span>
<span id="cb6-52"><a href="#cb6-52" aria-hidden="true"></a>        <span class="ex">log</span> <span class="st">&quot;✓ Themes updated: </span><span class="va">$SITE_NAME</span><span class="st">&quot;</span></span>
<span id="cb6-53"><a href="#cb6-53" aria-hidden="true"></a>    <span class="kw">else</span></span>
<span id="cb6-54"><a href="#cb6-54" aria-hidden="true"></a>        <span class="ex">log</span> <span class="st">&quot;✗ Theme update failed: </span><span class="va">$SITE_NAME</span><span class="st">&quot;</span></span>
<span id="cb6-55"><a href="#cb6-55" aria-hidden="true"></a>    <span class="kw">fi</span></span>
<span id="cb6-56"><a href="#cb6-56" aria-hidden="true"></a></span>
<span id="cb6-57"><a href="#cb6-57" aria-hidden="true"></a>    <span class="ex">log</span> <span class="st">&quot;---&quot;</span></span>
<span id="cb6-58"><a href="#cb6-58" aria-hidden="true"></a><span class="kw">done</span></span>
<span id="cb6-59"><a href="#cb6-59" aria-hidden="true"></a></span>
<span id="cb6-60"><a href="#cb6-60" aria-hidden="true"></a><span class="ex">log</span> <span class="st">&quot;=== Bulk Update Complete ===&quot;</span></span></code></pre>
</div>
<p><strong>Use Case</strong>: Agencies managing dozens of client sites can update all installations in one maintenance window.</p>
<h4 id="update-with-email-notifications">Update with Email Notifications</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"># bulk-update-notify.sh - Updates with email reporting</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">ADMIN_EMAIL=</span><span class="st">&quot;admin@example.com&quot;</span></span>
<span id="cb7-5"><a href="#cb7-5" aria-hidden="true"></a><span class="va">REPORT=</span><span class="st">&quot;/tmp/update-report-</span><span class="va">$$</span><span class="st">.txt&quot;</span></span>
<span id="cb7-6"><a href="#cb7-6" aria-hidden="true"></a></span>
<span id="cb7-7"><a href="#cb7-7" aria-hidden="true"></a><span class="kw">{</span></span>
<span id="cb7-8"><a href="#cb7-8" aria-hidden="true"></a>    <span class="bu">echo</span> <span class="st">&quot;WordPress Bulk Update Report&quot;</span></span>
<span id="cb7-9"><a href="#cb7-9" aria-hidden="true"></a>    <span class="bu">echo</span> <span class="st">&quot;Generated: </span><span class="va">$(</span><span class="fu">date</span><span class="va">)</span><span class="st">&quot;</span></span>
<span id="cb7-10"><a href="#cb7-10" aria-hidden="true"></a>    <span class="bu">echo</span> <span class="st">&quot;================================&quot;</span></span>
<span id="cb7-11"><a href="#cb7-11" aria-hidden="true"></a>    <span class="bu">echo</span> <span class="st">&quot;&quot;</span></span>
<span id="cb7-12"><a href="#cb7-12" aria-hidden="true"></a></span>
<span id="cb7-13"><a href="#cb7-13" aria-hidden="true"></a>    <span class="co"># Update logic here (from previous script)</span></span>
<span id="cb7-14"><a href="#cb7-14" aria-hidden="true"></a>    <span class="co"># ...</span></span>
<span id="cb7-15"><a href="#cb7-15" aria-hidden="true"></a></span>
<span id="cb7-16"><a href="#cb7-16" aria-hidden="true"></a><span class="kw">}</span> <span class="op">&gt;</span> <span class="st">&quot;</span><span class="va">$REPORT</span><span class="st">&quot;</span></span>
<span id="cb7-17"><a href="#cb7-17" aria-hidden="true"></a></span>
<span id="cb7-18"><a href="#cb7-18" aria-hidden="true"></a><span class="co"># Email report</span></span>
<span id="cb7-19"><a href="#cb7-19" aria-hidden="true"></a><span class="ex">mail</span> -s <span class="st">&quot;WordPress Bulk Update Report&quot;</span> <span class="st">&quot;</span><span class="va">$ADMIN_EMAIL</span><span class="st">&quot;</span> <span class="op">&lt;</span> <span class="st">&quot;</span><span class="va">$REPORT</span><span class="st">&quot;</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 class="fu">rm</span> <span class="st">&quot;</span><span class="va">$REPORT</span><span class="st">&quot;</span></span></code></pre>
</div>
<h3 id="selective-updates">Selective and Staged Update Strategies</h3>
<p>Control exactly what gets updated and when.</p>
<h4 id="update-specific-plugins-only">Update Specific Plugins Only</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"># update-security-plugins.sh - Update security plugins only</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">SECURITY_PLUGINS=(</span></span>
<span id="cb8-5"><a href="#cb8-5" aria-hidden="true"></a>    <span class="st">&quot;wordfence&quot;</span></span>
<span id="cb8-6"><a href="#cb8-6" aria-hidden="true"></a>    <span class="st">&quot;sucuri-scanner&quot;</span></span>
<span id="cb8-7"><a href="#cb8-7" aria-hidden="true"></a>    <span class="st">&quot;ithemes-security&quot;</span></span>
<span id="cb8-8"><a href="#cb8-8" aria-hidden="true"></a>    <span class="st">&quot;all-in-one-wp-security-and-firewall&quot;</span></span>
<span id="cb8-9"><a href="#cb8-9" aria-hidden="true"></a>)</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="kw">for</span> <span class="ex">PLUGIN</span> in <span class="st">&quot;</span><span class="va">${SECURITY_PLUGINS[@]}</span><span class="st">&quot;</span><span class="kw">;</span> <span class="kw">do</span></span>
<span id="cb8-12"><a href="#cb8-12" aria-hidden="true"></a>    <span class="bu">echo</span> <span class="st">&quot;Updating security plugin: </span><span class="va">$PLUGIN</span><span class="st">&quot;</span></span>
<span id="cb8-13"><a href="#cb8-13" aria-hidden="true"></a>    <span class="ex">wp</span> plugin update <span class="st">&quot;</span><span class="va">$PLUGIN</span><span class="st">&quot;</span> <span class="op">2&gt;</span>/dev/null</span>
<span id="cb8-14"><a href="#cb8-14" aria-hidden="true"></a><span class="kw">done</span></span>
<span id="cb8-15"><a href="#cb8-15" aria-hidden="true"></a></span>
<span id="cb8-16"><a href="#cb8-16" aria-hidden="true"></a><span class="bu">echo</span> <span class="st">&quot;✓ Security plugins updated&quot;</span></span></code></pre>
</div>
<h4 id="staged-rollout-strategy">Staged Rollout Strategy</h4>
<div class="sourceCode" id="cb9">
<pre class="sourceCode bash"><code class="sourceCode bash"><span id="cb9-1"><a href="#cb9-1" aria-hidden="true"></a><span class="co">#!/bin/bash</span></span>
<span id="cb9-2"><a href="#cb9-2" aria-hidden="true"></a><span class="co"># staged-update.sh - Update test sites first, then production</span></span>
<span id="cb9-3"><a href="#cb9-3" aria-hidden="true"></a></span>
<span id="cb9-4"><a href="#cb9-4" aria-hidden="true"></a><span class="va">TEST_SITES=(</span><span class="st">&quot;/var/www/test1&quot;</span> <span class="st">&quot;/var/www/staging&quot;</span><span class="va">)</span></span>
<span id="cb9-5"><a href="#cb9-5" aria-hidden="true"></a><span class="va">PROD_SITES=(</span><span class="st">&quot;/var/www/prod1&quot;</span> <span class="st">&quot;/var/www/prod2&quot;</span><span class="va">)</span></span>
<span id="cb9-6"><a href="#cb9-6" aria-hidden="true"></a></span>
<span id="cb9-7"><a href="#cb9-7" aria-hidden="true"></a><span class="bu">echo</span> <span class="st">&quot;Stage 1: Updating test sites...&quot;</span></span>
<span id="cb9-8"><a href="#cb9-8" aria-hidden="true"></a><span class="kw">for</span> <span class="ex">SITE</span> in <span class="st">&quot;</span><span class="va">${TEST_SITES[@]}</span><span class="st">&quot;</span><span class="kw">;</span> <span class="kw">do</span></span>
<span id="cb9-9"><a href="#cb9-9" aria-hidden="true"></a>    <span class="bu">cd</span> <span class="st">&quot;</span><span class="va">$SITE</span><span class="st">&quot;</span></span>
<span id="cb9-10"><a href="#cb9-10" aria-hidden="true"></a>    <span class="ex">wp</span> plugin update --all</span>
<span id="cb9-11"><a href="#cb9-11" aria-hidden="true"></a>    <span class="ex">wp</span> theme update --all</span>
<span id="cb9-12"><a href="#cb9-12" aria-hidden="true"></a><span class="kw">done</span></span>
<span id="cb9-13"><a href="#cb9-13" aria-hidden="true"></a></span>
<span id="cb9-14"><a href="#cb9-14" aria-hidden="true"></a><span class="bu">echo</span> <span class="st">&quot;Test sites updated. Monitor for 24 hours before production.&quot;</span></span>
<span id="cb9-15"><a href="#cb9-15" aria-hidden="true"></a><span class="bu">read</span> -p <span class="st">&quot;Proceed with production updates? (y/n) &quot;</span> -n 1 -r</span>
<span id="cb9-16"><a href="#cb9-16" aria-hidden="true"></a><span class="bu">echo</span></span>
<span id="cb9-17"><a href="#cb9-17" aria-hidden="true"></a></span>
<span id="cb9-18"><a href="#cb9-18" 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="cb9-19"><a href="#cb9-19" aria-hidden="true"></a>    <span class="bu">echo</span> <span class="st">&quot;Production updates cancelled&quot;</span></span>
<span id="cb9-20"><a href="#cb9-20" aria-hidden="true"></a>    <span class="bu">exit</span> 0</span>
<span id="cb9-21"><a href="#cb9-21" aria-hidden="true"></a><span class="kw">fi</span></span>
<span id="cb9-22"><a href="#cb9-22" aria-hidden="true"></a></span>
<span id="cb9-23"><a href="#cb9-23" aria-hidden="true"></a><span class="bu">echo</span> <span class="st">&quot;Stage 2: Updating production sites...&quot;</span></span>
<span id="cb9-24"><a href="#cb9-24" aria-hidden="true"></a><span class="kw">for</span> <span class="ex">SITE</span> in <span class="st">&quot;</span><span class="va">${PROD_SITES[@]}</span><span class="st">&quot;</span><span class="kw">;</span> <span class="kw">do</span></span>
<span id="cb9-25"><a href="#cb9-25" aria-hidden="true"></a>    <span class="bu">cd</span> <span class="st">&quot;</span><span class="va">$SITE</span><span class="st">&quot;</span></span>
<span id="cb9-26"><a href="#cb9-26" aria-hidden="true"></a>    <span class="co"># Backup first</span></span>
<span id="cb9-27"><a href="#cb9-27" aria-hidden="true"></a>    <span class="ex">wp</span> db export <span class="st">&quot;/backups/</span><span class="va">$(</span><span class="fu">basename</span> <span class="va">$SITE)</span><span class="st">-prod-</span><span class="va">$(</span><span class="fu">date</span> +%Y%m%d<span class="va">)</span><span class="st">.sql.gz&quot;</span></span>
<span id="cb9-28"><a href="#cb9-28" aria-hidden="true"></a>    <span class="ex">wp</span> plugin update --all</span>
<span id="cb9-29"><a href="#cb9-29" aria-hidden="true"></a>    <span class="ex">wp</span> theme update --all</span>
<span id="cb9-30"><a href="#cb9-30" aria-hidden="true"></a><span class="kw">done</span></span>
<span id="cb9-31"><a href="#cb9-31" aria-hidden="true"></a></span>
<span id="cb9-32"><a href="#cb9-32" aria-hidden="true"></a><span class="bu">echo</span> <span class="st">&quot;✓ Staged rollout complete&quot;</span></span></code></pre>
</div>
<p>Learn about <a href="https://wordpress.org/support/article/wordpress-features/#staging-sites">WordPress staging environments</a> best practices.</p>
<h4 id="exclude-problematic-plugins">Exclude Problematic Plugins</h4>
<div class="sourceCode" id="cb10">
<pre class="sourceCode bash"><code class="sourceCode bash"><span id="cb10-1"><a href="#cb10-1" aria-hidden="true"></a><span class="co">#!/bin/bash</span></span>
<span id="cb10-2"><a href="#cb10-2" aria-hidden="true"></a><span class="co"># update-exclude-known-issues.sh</span></span>
<span id="cb10-3"><a href="#cb10-3" aria-hidden="true"></a></span>
<span id="cb10-4"><a href="#cb10-4" aria-hidden="true"></a><span class="co"># Plugins known to have issues in latest version</span></span>
<span id="cb10-5"><a href="#cb10-5" aria-hidden="true"></a><span class="va">EXCLUDE_PLUGINS=(</span></span>
<span id="cb10-6"><a href="#cb10-6" aria-hidden="true"></a>    <span class="st">&quot;broken-plugin&quot;</span></span>
<span id="cb10-7"><a href="#cb10-7" aria-hidden="true"></a>    <span class="st">&quot;problematic-theme-plugin&quot;</span></span>
<span id="cb10-8"><a href="#cb10-8" aria-hidden="true"></a>)</span>
<span id="cb10-9"><a href="#cb10-9" aria-hidden="true"></a></span>
<span id="cb10-10"><a href="#cb10-10" aria-hidden="true"></a><span class="co"># Build exclude parameter</span></span>
<span id="cb10-11"><a href="#cb10-11" aria-hidden="true"></a><span class="va">EXCLUDE_PARAM=</span><span class="st">&quot;&quot;</span></span>
<span id="cb10-12"><a href="#cb10-12" aria-hidden="true"></a><span class="kw">for</span> <span class="ex">PLUGIN</span> in <span class="st">&quot;</span><span class="va">${EXCLUDE_PLUGINS[@]}</span><span class="st">&quot;</span><span class="kw">;</span> <span class="kw">do</span></span>
<span id="cb10-13"><a href="#cb10-13" aria-hidden="true"></a>    <span class="va">EXCLUDE_PARAM=</span><span class="st">&quot;</span><span class="va">${EXCLUDE_PARAM}${PLUGIN}</span><span class="st">,&quot;</span></span>
<span id="cb10-14"><a href="#cb10-14" aria-hidden="true"></a><span class="kw">done</span></span>
<span id="cb10-15"><a href="#cb10-15" aria-hidden="true"></a></span>
<span id="cb10-16"><a href="#cb10-16" aria-hidden="true"></a><span class="co"># Remove trailing comma</span></span>
<span id="cb10-17"><a href="#cb10-17" aria-hidden="true"></a><span class="va">EXCLUDE_PARAM=${EXCLUDE_PARAM%</span>,<span class="va">}</span></span>
<span id="cb10-18"><a href="#cb10-18" aria-hidden="true"></a></span>
<span id="cb10-19"><a href="#cb10-19" aria-hidden="true"></a><span class="co"># Update all except excluded</span></span>
<span id="cb10-20"><a href="#cb10-20" aria-hidden="true"></a><span class="ex">wp</span> plugin update --all --exclude=<span class="st">&quot;</span><span class="va">$EXCLUDE_PARAM</span><span class="st">&quot;</span></span>
<span id="cb10-21"><a href="#cb10-21" aria-hidden="true"></a></span>
<span id="cb10-22"><a href="#cb10-22" aria-hidden="true"></a><span class="bu">echo</span> <span class="st">&quot;Updated all plugins except: </span><span class="va">$EXCLUDE_PARAM</span><span class="st">&quot;</span></span></code></pre>
</div>
<h3 id="automated-updates">Automated Update Scheduling</h3>
<p>Schedule bulk updates to run automatically during maintenance windows.</p>
<h4 id="weekly-automated-updates">Weekly Automated Updates</h4>
<div class="sourceCode" id="cb11">
<pre class="sourceCode bash"><code class="sourceCode bash"><span id="cb11-1"><a href="#cb11-1" aria-hidden="true"></a><span class="co">#!/bin/bash</span></span>
<span id="cb11-2"><a href="#cb11-2" aria-hidden="true"></a><span class="co"># weekly-auto-update.sh - Run via cron</span></span>
<span id="cb11-3"><a href="#cb11-3" aria-hidden="true"></a></span>
<span id="cb11-4"><a href="#cb11-4" aria-hidden="true"></a><span class="va">LOG_FILE=</span><span class="st">&quot;/var/log/auto-updates.log&quot;</span></span>
<span id="cb11-5"><a href="#cb11-5" aria-hidden="true"></a><span class="va">BACKUP_DIR=</span><span class="st">&quot;/backups/auto&quot;</span></span>
<span id="cb11-6"><a href="#cb11-6" aria-hidden="true"></a><span class="va">SITES_DIR=</span><span class="st">&quot;/var/www&quot;</span></span>
<span id="cb11-7"><a href="#cb11-7" aria-hidden="true"></a></span>
<span id="cb11-8"><a href="#cb11-8" aria-hidden="true"></a><span class="fu">log()</span> <span class="kw">{</span></span>
<span id="cb11-9"><a href="#cb11-9" aria-hidden="true"></a>    <span class="bu">echo</span> <span class="st">&quot;[</span><span class="va">$(</span><span class="fu">date</span> <span class="st">&#39;+%Y-%m-%d %H:%M:%S&#39;</span><span class="va">)</span><span class="st">] </span><span class="va">$@</span><span class="st">&quot;</span> <span class="kw">|</span> <span class="fu">tee</span> -a <span class="st">&quot;</span><span class="va">$LOG_FILE</span><span class="st">&quot;</span></span>
<span id="cb11-10"><a href="#cb11-10" aria-hidden="true"></a><span class="kw">}</span></span>
<span id="cb11-11"><a href="#cb11-11" aria-hidden="true"></a></span>
<span id="cb11-12"><a href="#cb11-12" aria-hidden="true"></a><span class="ex">log</span> <span class="st">&quot;=== Automated Weekly Update Started ===&quot;</span></span>
<span id="cb11-13"><a href="#cb11-13" aria-hidden="true"></a></span>
<span id="cb11-14"><a href="#cb11-14" aria-hidden="true"></a><span class="co"># Find all WordPress installations</span></span>
<span id="cb11-15"><a href="#cb11-15" aria-hidden="true"></a><span class="fu">find</span> <span class="st">&quot;</span><span class="va">$SITES_DIR</span><span class="st">&quot;</span> -maxdepth 2 -name <span class="st">&quot;wp-config.php&quot;</span> <span class="kw">|</span> <span class="kw">while</span> <span class="bu">read</span> <span class="va">WP_CONFIG</span>; <span class="kw">do</span></span>
<span id="cb11-16"><a href="#cb11-16" aria-hidden="true"></a>    <span class="va">SITE_PATH=$(</span><span class="fu">dirname</span> <span class="st">&quot;</span><span class="va">$WP_CONFIG</span><span class="st">&quot;</span><span class="va">)</span></span>
<span id="cb11-17"><a href="#cb11-17" aria-hidden="true"></a>    <span class="va">SITE_NAME=$(</span><span class="fu">basename</span> <span class="st">&quot;</span><span class="va">$SITE_PATH</span><span class="st">&quot;</span><span class="va">)</span></span>
<span id="cb11-18"><a href="#cb11-18" aria-hidden="true"></a></span>
<span id="cb11-19"><a href="#cb11-19" aria-hidden="true"></a>    <span class="bu">cd</span> <span class="st">&quot;</span><span class="va">$SITE_PATH</span><span class="st">&quot;</span></span>
<span id="cb11-20"><a href="#cb11-20" aria-hidden="true"></a>    <span class="ex">log</span> <span class="st">&quot;Updating: </span><span class="va">$SITE_NAME</span><span class="st">&quot;</span></span>
<span id="cb11-21"><a href="#cb11-21" aria-hidden="true"></a></span>
<span id="cb11-22"><a href="#cb11-22" aria-hidden="true"></a>    <span class="co"># Backup</span></span>
<span id="cb11-23"><a href="#cb11-23" aria-hidden="true"></a>    <span class="fu">mkdir</span> -p <span class="st">&quot;</span><span class="va">$BACKUP_DIR</span><span class="st">&quot;</span></span>
<span id="cb11-24"><a href="#cb11-24" aria-hidden="true"></a>    <span class="ex">wp</span> db export <span class="st">&quot;</span><span class="va">$BACKUP_DIR</span><span class="st">/</span><span class="va">$SITE_NAME</span><span class="st">-</span><span class="va">$(</span><span class="fu">date</span> +%Y%m%d<span class="va">)</span><span class="st">.sql.gz&quot;</span> --quiet</span>
<span id="cb11-25"><a href="#cb11-25" aria-hidden="true"></a></span>
<span id="cb11-26"><a href="#cb11-26" aria-hidden="true"></a>    <span class="co"># Update</span></span>
<span id="cb11-27"><a href="#cb11-27" aria-hidden="true"></a>    <span class="ex">wp</span> plugin update --all --quiet</span>
<span id="cb11-28"><a href="#cb11-28" aria-hidden="true"></a>    <span class="ex">wp</span> theme update --all --quiet</span>
<span id="cb11-29"><a href="#cb11-29" aria-hidden="true"></a>    <span class="ex">wp</span> core update --minor --quiet</span>
<span id="cb11-30"><a href="#cb11-30" aria-hidden="true"></a></span>
<span id="cb11-31"><a href="#cb11-31" aria-hidden="true"></a>    <span class="ex">log</span> <span class="st">&quot;✓ Updated: </span><span class="va">$SITE_NAME</span><span class="st">&quot;</span></span>
<span id="cb11-32"><a href="#cb11-32" aria-hidden="true"></a><span class="kw">done</span></span>
<span id="cb11-33"><a href="#cb11-33" aria-hidden="true"></a></span>
<span id="cb11-34"><a href="#cb11-34" aria-hidden="true"></a><span class="co"># Cleanup old backups (keep 30 days)</span></span>
<span id="cb11-35"><a href="#cb11-35" aria-hidden="true"></a><span class="fu">find</span> <span class="st">&quot;</span><span class="va">$BACKUP_DIR</span><span class="st">&quot;</span> -name <span class="st">&quot;*.sql.gz&quot;</span> -mtime +30 -delete</span>
<span id="cb11-36"><a href="#cb11-36" aria-hidden="true"></a></span>
<span id="cb11-37"><a href="#cb11-37" aria-hidden="true"></a><span class="ex">log</span> <span class="st">&quot;=== Automated Update Complete ===&quot;</span></span></code></pre>
</div>
<p>Schedule with cron:</p>
<div class="sourceCode" id="cb12">
<pre class="sourceCode bash"><code class="sourceCode bash"><span id="cb12-1"><a href="#cb12-1" aria-hidden="true"></a><span class="co"># Run every Sunday at 2 AM</span></span>
<span id="cb12-2"><a href="#cb12-2" aria-hidden="true"></a><span class="ex">0</span> 2 * * 0 /usr/local/bin/weekly-auto-update.sh</span></code></pre>
</div>
<h4 id="update-monitoring-and-alerts">Update Monitoring and Alerts</h4>
<div class="sourceCode" id="cb13">
<pre class="sourceCode bash"><code class="sourceCode bash"><span id="cb13-1"><a href="#cb13-1" aria-hidden="true"></a><span class="co">#!/bin/bash</span></span>
<span id="cb13-2"><a href="#cb13-2" aria-hidden="true"></a><span class="co"># monitor-updates.sh - Check for available updates</span></span>
<span id="cb13-3"><a href="#cb13-3" aria-hidden="true"></a></span>
<span id="cb13-4"><a href="#cb13-4" aria-hidden="true"></a><span class="va">SITES=(</span><span class="st">&quot;/var/www/site1&quot;</span> <span class="st">&quot;/var/www/site2&quot;</span><span class="va">)</span></span>
<span id="cb13-5"><a href="#cb13-5" aria-hidden="true"></a><span class="va">ALERT_EMAIL=</span><span class="st">&quot;admin@example.com&quot;</span></span>
<span id="cb13-6"><a href="#cb13-6" aria-hidden="true"></a><span class="va">UPDATES_FOUND=</span>0</span>
<span id="cb13-7"><a href="#cb13-7" aria-hidden="true"></a></span>
<span id="cb13-8"><a href="#cb13-8" aria-hidden="true"></a><span class="va">REPORT=</span><span class="st">&quot;/tmp/update-status-</span><span class="va">$$</span><span class="st">.txt&quot;</span></span>
<span id="cb13-9"><a href="#cb13-9" aria-hidden="true"></a></span>
<span id="cb13-10"><a href="#cb13-10" aria-hidden="true"></a><span class="kw">{</span></span>
<span id="cb13-11"><a href="#cb13-11" aria-hidden="true"></a>    <span class="bu">echo</span> <span class="st">&quot;WordPress Update Status Report&quot;</span></span>
<span id="cb13-12"><a href="#cb13-12" aria-hidden="true"></a>    <span class="bu">echo</span> <span class="st">&quot;Generated: </span><span class="va">$(</span><span class="fu">date</span><span class="va">)</span><span class="st">&quot;</span></span>
<span id="cb13-13"><a href="#cb13-13" aria-hidden="true"></a>    <span class="bu">echo</span> <span class="st">&quot;==============================&quot;</span></span>
<span id="cb13-14"><a href="#cb13-14" aria-hidden="true"></a>    <span class="bu">echo</span> <span class="st">&quot;&quot;</span></span>
<span id="cb13-15"><a href="#cb13-15" aria-hidden="true"></a></span>
<span id="cb13-16"><a href="#cb13-16" aria-hidden="true"></a>    <span class="kw">for</span> <span class="ex">SITE</span> in <span class="st">&quot;</span><span class="va">${SITES[@]}</span><span class="st">&quot;</span><span class="kw">;</span> <span class="kw">do</span></span>
<span id="cb13-17"><a href="#cb13-17" aria-hidden="true"></a>        <span class="va">SITE_NAME=$(</span><span class="fu">basename</span> <span class="st">&quot;</span><span class="va">$SITE</span><span class="st">&quot;</span><span class="va">)</span></span>
<span id="cb13-18"><a href="#cb13-18" aria-hidden="true"></a>        <span class="bu">cd</span> <span class="st">&quot;</span><span class="va">$SITE</span><span class="st">&quot;</span></span>
<span id="cb13-19"><a href="#cb13-19" aria-hidden="true"></a></span>
<span id="cb13-20"><a href="#cb13-20" aria-hidden="true"></a>        <span class="va">PLUGIN_UPDATES=$(</span><span class="ex">wp</span> plugin list --update=available --format=count <span class="op">2&gt;</span>/dev/null<span class="va">)</span></span>
<span id="cb13-21"><a href="#cb13-21" aria-hidden="true"></a>        <span class="va">THEME_UPDATES=$(</span><span class="ex">wp</span> theme list --update=available --format=count <span class="op">2&gt;</span>/dev/null<span class="va">)</span></span>
<span id="cb13-22"><a href="#cb13-22" aria-hidden="true"></a></span>
<span id="cb13-23"><a href="#cb13-23" aria-hidden="true"></a>        <span class="kw">if</span><span class="bu"> [</span> <span class="st">&quot;</span><span class="va">$PLUGIN_UPDATES</span><span class="st">&quot;</span> <span class="ot">-gt</span> 0<span class="bu"> ]</span> <span class="kw">||</span><span class="bu"> [</span> <span class="st">&quot;</span><span class="va">$THEME_UPDATES</span><span class="st">&quot;</span> <span class="ot">-gt</span> 0<span class="bu"> ]</span>; <span class="kw">then</span></span>
<span id="cb13-24"><a href="#cb13-24" aria-hidden="true"></a>            <span class="bu">echo</span> <span class="st">&quot;Site: </span><span class="va">$SITE_NAME</span><span class="st">&quot;</span></span>
<span id="cb13-25"><a href="#cb13-25" aria-hidden="true"></a>            <span class="bu">echo</span> <span class="st">&quot;  Plugins needing update: </span><span class="va">$PLUGIN_UPDATES</span><span class="st">&quot;</span></span>
<span id="cb13-26"><a href="#cb13-26" aria-hidden="true"></a>            <span class="bu">echo</span> <span class="st">&quot;  Themes needing update: </span><span class="va">$THEME_UPDATES</span><span class="st">&quot;</span></span>
<span id="cb13-27"><a href="#cb13-27" aria-hidden="true"></a>            <span class="bu">echo</span> <span class="st">&quot;&quot;</span></span>
<span id="cb13-28"><a href="#cb13-28" aria-hidden="true"></a>            <span class="va">UPDATES_FOUND=$((</span>UPDATES_FOUND + 1<span class="va">))</span></span>
<span id="cb13-29"><a href="#cb13-29" aria-hidden="true"></a>        <span class="kw">fi</span></span>
<span id="cb13-30"><a href="#cb13-30" aria-hidden="true"></a>    <span class="kw">done</span></span>
<span id="cb13-31"><a href="#cb13-31" aria-hidden="true"></a></span>
<span id="cb13-32"><a href="#cb13-32" aria-hidden="true"></a>    <span class="kw">if</span><span class="bu"> [</span> <span class="st">&quot;</span><span class="va">$UPDATES_FOUND</span><span class="st">&quot;</span> <span class="ot">-eq</span> 0<span class="bu"> ]</span>; <span class="kw">then</span></span>
<span id="cb13-33"><a href="#cb13-33" aria-hidden="true"></a>        <span class="bu">echo</span> <span class="st">&quot;All sites are up to date!&quot;</span></span>
<span id="cb13-34"><a href="#cb13-34" aria-hidden="true"></a>    <span class="kw">fi</span></span>
<span id="cb13-35"><a href="#cb13-35" aria-hidden="true"></a></span>
<span id="cb13-36"><a href="#cb13-36" aria-hidden="true"></a><span class="kw">}</span> <span class="op">&gt;</span> <span class="st">&quot;</span><span class="va">$REPORT</span><span class="st">&quot;</span></span>
<span id="cb13-37"><a href="#cb13-37" aria-hidden="true"></a></span>
<span id="cb13-38"><a href="#cb13-38" aria-hidden="true"></a><span class="co"># Send email if updates available</span></span>
<span id="cb13-39"><a href="#cb13-39" aria-hidden="true"></a><span class="kw">if</span><span class="bu"> [</span> <span class="st">&quot;</span><span class="va">$UPDATES_FOUND</span><span class="st">&quot;</span> <span class="ot">-gt</span> 0<span class="bu"> ]</span>; <span class="kw">then</span></span>
<span id="cb13-40"><a href="#cb13-40" aria-hidden="true"></a>    <span class="ex">mail</span> -s <span class="st">&quot;WordPress Updates Available (</span><span class="va">$UPDATES_FOUND</span><span class="st"> sites)&quot;</span> <span class="st">&quot;</span><span class="va">$ALERT_EMAIL</span><span class="st">&quot;</span> <span class="op">&lt;</span> <span class="st">&quot;</span><span class="va">$REPORT</span><span class="st">&quot;</span></span>
<span id="cb13-41"><a href="#cb13-41" aria-hidden="true"></a><span class="kw">fi</span></span>
<span id="cb13-42"><a href="#cb13-42" aria-hidden="true"></a></span>
<span id="cb13-43"><a href="#cb13-43" aria-hidden="true"></a><span class="fu">rm</span> <span class="st">&quot;</span><span class="va">$REPORT</span><span class="st">&quot;</span></span></code></pre>
</div>
<h3 id="testing-verification">Testing and Verification</h3>
<p>Verify updates didn’t break functionality.</p>
<h4 id="post-update-health-check">Post-Update Health Check</h4>
<div class="sourceCode" id="cb14">
<pre class="sourceCode bash"><code class="sourceCode bash"><span id="cb14-1"><a href="#cb14-1" aria-hidden="true"></a><span class="co">#!/bin/bash</span></span>
<span id="cb14-2"><a href="#cb14-2" aria-hidden="true"></a><span class="co"># verify-updates.sh - Check sites after updates</span></span>
<span id="cb14-3"><a href="#cb14-3" aria-hidden="true"></a></span>
<span id="cb14-4"><a href="#cb14-4" aria-hidden="true"></a><span class="va">SITES=(</span><span class="st">&quot;/var/www/site1&quot;</span> <span class="st">&quot;/var/www/site2&quot;</span><span class="va">)</span></span>
<span id="cb14-5"><a href="#cb14-5" aria-hidden="true"></a></span>
<span id="cb14-6"><a href="#cb14-6" aria-hidden="true"></a><span class="kw">for</span> <span class="ex">SITE</span> in <span class="st">&quot;</span><span class="va">${SITES[@]}</span><span class="st">&quot;</span><span class="kw">;</span> <span class="kw">do</span></span>
<span id="cb14-7"><a href="#cb14-7" aria-hidden="true"></a>    <span class="va">SITE_NAME=$(</span><span class="fu">basename</span> <span class="st">&quot;</span><span class="va">$SITE</span><span class="st">&quot;</span><span class="va">)</span></span>
<span id="cb14-8"><a href="#cb14-8" aria-hidden="true"></a>    <span class="bu">cd</span> <span class="st">&quot;</span><span class="va">$SITE</span><span class="st">&quot;</span></span>
<span id="cb14-9"><a href="#cb14-9" aria-hidden="true"></a></span>
<span id="cb14-10"><a href="#cb14-10" aria-hidden="true"></a>    <span class="bu">echo</span> <span class="st">&quot;Checking: </span><span class="va">$SITE_NAME</span><span class="st">&quot;</span></span>
<span id="cb14-11"><a href="#cb14-11" aria-hidden="true"></a></span>
<span id="cb14-12"><a href="#cb14-12" aria-hidden="true"></a>    <span class="co"># Check WordPress is functional</span></span>
<span id="cb14-13"><a href="#cb14-13" 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="cb14-14"><a href="#cb14-14" aria-hidden="true"></a>        <span class="bu">echo</span> <span class="st">&quot;✗ WordPress check failed: </span><span class="va">$SITE_NAME</span><span class="st">&quot;</span></span>
<span id="cb14-15"><a href="#cb14-15" aria-hidden="true"></a>        <span class="bu">continue</span></span>
<span id="cb14-16"><a href="#cb14-16" aria-hidden="true"></a>    <span class="kw">fi</span></span>
<span id="cb14-17"><a href="#cb14-17" aria-hidden="true"></a></span>
<span id="cb14-18"><a href="#cb14-18" aria-hidden="true"></a>    <span class="co"># Check database connection</span></span>
<span id="cb14-19"><a href="#cb14-19" 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="cb14-20"><a href="#cb14-20" aria-hidden="true"></a>        <span class="bu">echo</span> <span class="st">&quot;✗ Database check failed: </span><span class="va">$SITE_NAME</span><span class="st">&quot;</span></span>
<span id="cb14-21"><a href="#cb14-21" aria-hidden="true"></a>        <span class="bu">continue</span></span>
<span id="cb14-22"><a href="#cb14-22" aria-hidden="true"></a>    <span class="kw">fi</span></span>
<span id="cb14-23"><a href="#cb14-23" aria-hidden="true"></a></span>
<span id="cb14-24"><a href="#cb14-24" aria-hidden="true"></a>    <span class="co"># Check site responds</span></span>
<span id="cb14-25"><a href="#cb14-25" aria-hidden="true"></a>    <span class="va">SITE_URL=$(</span><span class="ex">wp</span> option get siteurl <span class="op">2&gt;</span>/dev/null<span class="va">)</span></span>
<span id="cb14-26"><a href="#cb14-26" aria-hidden="true"></a>    <span class="kw">if</span> <span class="ex">curl</span> -f -s <span class="st">&quot;</span><span class="va">$SITE_URL</span><span class="st">&quot;</span> <span class="op">&gt;</span> /dev/null<span class="kw">;</span> <span class="kw">then</span></span>
<span id="cb14-27"><a href="#cb14-27" aria-hidden="true"></a>        <span class="bu">echo</span> <span class="st">&quot;✓ </span><span class="va">$SITE_NAME</span><span class="st"> is healthy&quot;</span></span>
<span id="cb14-28"><a href="#cb14-28" aria-hidden="true"></a>    <span class="kw">else</span></span>
<span id="cb14-29"><a href="#cb14-29" aria-hidden="true"></a>        <span class="bu">echo</span> <span class="st">&quot;✗ </span><span class="va">$SITE_NAME</span><span class="st"> not responding&quot;</span></span>
<span id="cb14-30"><a href="#cb14-30" aria-hidden="true"></a>    <span class="kw">fi</span></span>
<span id="cb14-31"><a href="#cb14-31" aria-hidden="true"></a><span class="kw">done</span></span></code></pre>
</div>
<h4 id="automated-testing-script">Automated Testing Script</h4>
<div class="sourceCode" id="cb15">
<pre class="sourceCode bash"><code class="sourceCode bash"><span id="cb15-1"><a href="#cb15-1" aria-hidden="true"></a><span class="co">#!/bin/bash</span></span>
<span id="cb15-2"><a href="#cb15-2" aria-hidden="true"></a><span class="co"># test-after-update.sh</span></span>
<span id="cb15-3"><a href="#cb15-3" aria-hidden="true"></a></span>
<span id="cb15-4"><a href="#cb15-4" aria-hidden="true"></a><span class="co"># Critical pages to test</span></span>
<span id="cb15-5"><a href="#cb15-5" aria-hidden="true"></a><span class="va">TEST_URLS=(</span></span>
<span id="cb15-6"><a href="#cb15-6" aria-hidden="true"></a>    <span class="st">&quot;/&quot;</span></span>
<span id="cb15-7"><a href="#cb15-7" aria-hidden="true"></a>    <span class="st">&quot;/shop&quot;</span></span>
<span id="cb15-8"><a href="#cb15-8" aria-hidden="true"></a>    <span class="st">&quot;/checkout&quot;</span></span>
<span id="cb15-9"><a href="#cb15-9" aria-hidden="true"></a>    <span class="st">&quot;/my-account&quot;</span></span>
<span id="cb15-10"><a href="#cb15-10" aria-hidden="true"></a>)</span>
<span id="cb15-11"><a href="#cb15-11" aria-hidden="true"></a></span>
<span id="cb15-12"><a href="#cb15-12" 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="cb15-13"><a href="#cb15-13" aria-hidden="true"></a></span>
<span id="cb15-14"><a href="#cb15-14" aria-hidden="true"></a><span class="bu">echo</span> <span class="st">&quot;Testing critical pages...&quot;</span></span>
<span id="cb15-15"><a href="#cb15-15" aria-hidden="true"></a></span>
<span id="cb15-16"><a href="#cb15-16" aria-hidden="true"></a><span class="kw">for</span> <span class="ex">PATH</span> in <span class="st">&quot;</span><span class="va">${TEST_URLS[@]}</span><span class="st">&quot;</span><span class="kw">;</span> <span class="kw">do</span></span>
<span id="cb15-17"><a href="#cb15-17" aria-hidden="true"></a>    <span class="va">URL=</span><span class="st">&quot;</span><span class="va">${SITE_URL}${PATH}</span><span class="st">&quot;</span></span>
<span id="cb15-18"><a href="#cb15-18" aria-hidden="true"></a></span>
<span id="cb15-19"><a href="#cb15-19" aria-hidden="true"></a>    <span class="va">HTTP_CODE=$(</span><span class="ex">curl</span> -s -o /dev/null -w <span class="st">&quot;%{http_code}&quot;</span> <span class="st">&quot;</span><span class="va">$URL</span><span class="st">&quot;</span><span class="va">)</span></span>
<span id="cb15-20"><a href="#cb15-20" aria-hidden="true"></a></span>
<span id="cb15-21"><a href="#cb15-21" aria-hidden="true"></a>    <span class="kw">if</span><span class="bu"> [</span> <span class="st">&quot;</span><span class="va">$HTTP_CODE</span><span class="st">&quot;</span> <span class="ot">-eq</span> 200<span class="bu"> ]</span>; <span class="kw">then</span></span>
<span id="cb15-22"><a href="#cb15-22" aria-hidden="true"></a>        <span class="bu">echo</span> <span class="st">&quot;✓ </span><span class="va">$PATH</span><span class="st"> - OK (200)&quot;</span></span>
<span id="cb15-23"><a href="#cb15-23" aria-hidden="true"></a>    <span class="kw">else</span></span>
<span id="cb15-24"><a href="#cb15-24" aria-hidden="true"></a>        <span class="bu">echo</span> <span class="st">&quot;✗ </span><span class="va">$PATH</span><span class="st"> - FAILED (</span><span class="va">$HTTP_CODE</span><span class="st">)&quot;</span></span>
<span id="cb15-25"><a href="#cb15-25" aria-hidden="true"></a>    <span class="kw">fi</span></span>
<span id="cb15-26"><a href="#cb15-26" aria-hidden="true"></a><span class="kw">done</span></span></code></pre>
</div>
<h3 id="next-steps">Next Steps</h3>
<p>You now have professional bulk update capabilities for WordPress sites at scale.</p>
<h4 id="recommended-learning-path">Recommended Learning Path</h4>
<p><strong>Week 1</strong>: Single site updates</p>
<ul>
<li>Practice safe update workflows</li>
<li>Implement backup strategies</li>
<li>Test rollback procedures</li>
</ul>
<p><strong>Week 2</strong>: Multi-site automation</p>
<ul>
<li>Build bulk update scripts</li>
<li>Add safety checks</li>
<li>Implement logging</li>
</ul>
<p><strong>Week 3</strong>: Staged rollouts</p>
<ul>
<li>Create test/production workflows</li>
<li>Set up monitoring</li>
<li>Automate notifications</li>
</ul>
<p><strong>Week 4</strong>: Full automation</p>
<ul>
<li>Schedule automated updates</li>
<li>Build health check systems</li>
<li>Document recovery procedures</li>
</ul>
<h4 id="advanced-topics">Advanced Topics</h4>
<ol type="1">
<li><strong><a href="#">Zero-Downtime Updates</a></strong> &#8211; Update without taking sites offline</li>
<li><strong><a href="#">Update Testing Automation</a></strong> &#8211; Automated functional testing</li>
<li><strong><a href="#">Large-Scale WordPress Management</a></strong> &#8211; Managing 500+ sites</li>
</ol>
<h4 id="get-more-resources">Get More Resources</h4>
<p><strong><a href="#">Download update automation scripts</a></strong> including:</p>
<ul>
<li>Complete bulk update system</li>
<li>Rollback automation</li>
<li>Health check templates</li>
</ul>
<p><strong><a href="/#get-started">Join our email course</a></strong> for:</p>
<ul>
<li>Weekly WP-CLI tutorials</li>
<li>WordPress automation strategies</li>
<li>Enterprise management techniques</li>
</ul>
<h3 id="conclusion">Conclusion</h3>
<p>Bulk updating WordPress sites with WP-CLI transforms a time-consuming, risky process into a fast, safe, automated workflow that scales to any number of installations.</p>
<p>What we covered:</p>
<p>✅ Single site update operations with safety checks ✅ Automated backup and rollback strategies ✅ Bulk update scripts for multiple sites ✅ Selective and staged update approaches ✅ Automated scheduling and monitoring ✅ Post-update testing and verification</p>
<p>Master these techniques, and you’ll manage WordPress updates across unlimited sites efficiently while maintaining security and minimizing downtime.</p>
<p><strong>Ready for more?</strong> Learn <a href="#">WordPress deployment automation</a> or <a href="#">continuous integration for WordPress</a>.</p>
<p><strong>Questions about bulk WordPress updates with WP-CLI?</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/bulk-update-wordpress-plugins-and-themes-across-multiple-sites-with-wp-cli/">Bulk Update WordPress Plugins and Themes Across Multiple Sites with WP-CLI</a> appeared first on <a href="https://wpclimastery.com">WP-CLI Mastery</a>.</p>
]]></content:encoded>
					
		
		
			</item>
	</channel>
</rss>
