How to manage WordPress multisite networks entirely via WP-CLI?

If you’re asking how to manage your WordPress multisite network using WP-CLI, the short answer is: almost entirely. While you’ll still pop into the admin occasionally for things like theme customization or plugin settings that don’t expose their configurations to the command line, pretty much every core administrative task, from creating sites to managing users and updating everything, can be handled much faster and more efficiently via WP-CLI. This is a game-changer for speed, automation, and consistent management across your network.

Getting Started with WP-CLI for Multisite

Before we dive into the specifics, make sure you have WP-CLI installed and configured for your WordPress installation. If you’re running a multisite, WP-CLI automatically recognizes it as such and provides network-specific commands. It’s a good idea to perform a quick wp --info to ensure everything is working as expected.

One crucial concept to grasp is context. When you run a command, WP-CLI needs to know where to run it. For a multisite, this means running commands either globally on the network (e.g., wp site list) or on a specific subsite (e.g., wp post list --url=example.com/subsite). Many commands that operate on a single site can accept the --url or --url= parameter to target them.

For those looking to enhance their understanding of managing WordPress multisite networks through the command line, a related article that provides valuable insights is available at The Sheryar. This resource delves into various WP-CLI commands and best practices, making it an excellent companion for anyone aiming to streamline their multisite management process.

Managing Sites and Network Settings

The bread and butter of multisite management is, well, managing the sites themselves. WP-CLI excels here, allowing you to create, modify, and delete sites with simple commands, alongside handling network-wide settings.

Creating and Deleting Sites

Need a new site? Forget the clicks and endless forms. A single command is all it takes.

  • Adding a new site:

“`bash

wp site create –slug=mynewsite –title=”My New Site” –email=admin@example.com –url=mynewsite.example.com

“`

This command is pretty straightforward. You define the slug, title, an admin email, and the full URL. For subdirectory installs, the --url might just be example.com/mynewsite.

  • Listing existing sites:

“`bash

wp site list

“`

This gives you an overview of all sites on your network, including their ID, URL, title, and last updated date. Super handy for quickly grabbing a site ID or just seeing what’s there.

  • Deleting a site:

“`bash

wp site delete

“`

Replace with the actual ID from wp site list. Be careful, this is permanent! There’s no trash bin for sites deleted via WP-CLI.

  • Archiving a site:

If you don’t want to permanently delete it, but just take it offline:

“`bash

wp site archive

“`

  • Unarchiving a site:

Bring it back from the archives:

“`bash

wp site unarchive

“`

Updating Site Information

Once a site exists, you might need to change its details – the title, status, or even its URL.

  • Updating a site’s details:

“`bash

wp site update –title=”Revised Site Title” –status=public

“`

You can update fields like title, public, archived, mature, spam, deleted, lang_id.

  • Changing a site’s URL:

This is a big one and needs to be done carefully, especially if domain mapping is involved.

“`bash

wp site update –url=https://new-domain.com

“`

Remember to adjust your server configuration (web server, DNS) to reflect the new domain if you’re truly moving it. WP-CLI only changes the database entry.

  • Getting a specific site’s details:

“`bash

wp site get

“`

This will output all the metadata associated with a specific site, which is useful for debugging or verifying changes.

Managing Network Options

Beyond individual sites, WP-CLI lets you tinker with global network settings.

  • Listing network options:

“`bash

wp option list –network

“`

This shows all options stored in the wp_sitemeta table, which are global to the network.

  • Getting a specific network option value:

“`bash

wp option get network_admin_email –network

“`

Replace network_admin_email with the option key you’re interested in.

  • Updating a network option:

“`bash

wp option update network_admin_email newadmin@example.com –network

“`

This is how you would change the primary administrator email for the entire network.

User and Role Management Across the Network

Users interact with your network at various levels: network admin, subsite admin, editor, etc. WP-CLI provides granular control over user management, allowing you to add, remove, and modify user roles across different sites.

Adding and Removing Users

  • Creating a user network-wide:

“`bash

wp user create username user@example.com –first_name=John –last_name=Doe –role=subscriber –send-email

“`

This creates a user in the global wp_users table. They don’t automatically have access to any specific subsite until added. Using --send-email will send the new user their login details.

  • Adding an existing user to a specific site:

“`bash

wp user add-super-admin username

“`

This adds a user as a super admin to the entire network, granting them full control over all sites. Use with caution.

  • Removing a user from a specific site:

“`bash

wp user remove-super-admin username

“`

This removes a user’s super admin privileges.

  • Adding a user to a specific subsite with a role:

“`bash

wp user add-user –url=

“`

No, wait, this is not directly how it works in WP-CLI. Instead, you’d use wp user set-role:

“`bash

wp user set-role editor –url=mynewsite.example.com

“`

This command assigns the editor role to the user with on the site specified by --url. If the user doesn’t exist on that site yet, this command will add them and set their role.

  • Removing a user from a specific subsite:

“`bash

wp user remove-user –url=mynewsite.example.com

“`

This removes the user’s association with that particular subsite. The user still exists globally in the network.

  • Listing all users on the network:

“`bash

wp user list

“`

This shows all users in the wp_users table, regardless of their role on specific sites.

  • Listing users for a specific site:

“`bash

wp user list –url=mynewsite.example.com

“`

This provides a list of users specifically associated with that subsite and their roles on it.

Managing User Roles

WordPress multisite has global roles (super admin) and per-site roles.

  • Adding a Super Administrator:

“`bash

wp super-admin add

“`

This grants full network-wide administration privileges to a user.

  • Removing a Super Administrator:

“`bash

wp super-admin remove

“`

  • Listing Super Administrators:

“`bash

wp super-admin list

“`

A quick way to see who has the keys to the kingdom.

Plugin and Theme Management Across the Network

One of the greatest benefits of multisite with WP-CLI is the ability to manage plugins and themes network-wide or on individual sites efficiently. No more clicking through each site’s admin panel!

Network-Activating and Deactivating Plugins

Plugins can be installed globally and then activated on individual sites, or network-activated so they are active on all new and existing sites.

  • Installing a plugin:

“`bash

wp plugin install akismet –activate-network

“`

This installs Akismet and immediately activates it network-wide. If you omit --activate-network, it’s just installed and available for activation.

  • Listing all plugins (network-wide):

“`bash

wp plugin list –network

“`

This gives you a full list of all plugins installed on your network and their network activation status.

  • Activating a plugin network-wide:

“`bash

wp plugin activate akismet –network

“`

This makes a plugin active for all sites on the network.

  • Deactivating a plugin network-wide:

“`bash

wp plugin deactivate akismet –network

“`

  • Updating all plugins on the network:

“`bash

wp plugin update –all –network

“`

This is extremely powerful. One command to update every single plugin across your entire network.

  • Updating individual plugins:

“`bash

wp plugin update akismet –network

“`

If you only want to update specific plugins.

  • Uninstalling a plugin (network-wide):

“`bash

wp plugin uninstall akismet –network

“`

This will deactivate and remove the plugin files for the entire network.

Managing Plugins on Specific Sites

Sometimes a plugin is only needed on one or a few sites, not globally.

  • Listing plugins on a specific site:

“`bash

wp plugin list –url=mynewsite.example.com

“`

This lists only the plugins active on that specific subsite, including those activated network-wide.

  • Activating a plugin on a specific site:

“`bash

wp plugin activate my-custom-plugin –url=mynewsite.example.com

“`

The plugin must already be installed on the network.

  • Deactivating a plugin on a specific site:

“`bash

wp plugin deactivate my-custom-plugin –url=mynewsite.example.com

“`

Network-Enabling and Disabling Themes

Themes are managed similarly to plugins, but themes are “network enabled” to be available for individual sites to choose from. You can’t network-activate a theme in the same way you activate a plugin everywhere; instead, you make it available for individual sites.

  • Installing a theme:

“`bash

wp theme install twentytwentyfour –activate-network

“`

The --activate-network argument with themes actually enables it for all sites to use, making it available in the themes browser on each subsite.

  • Listing all themes (network-wide):

“`bash

wp theme list –network

“`

This shows all installed themes and their network-enabled status.

  • Enabling a theme network-wide:

“`bash

wp theme enable twentyseventeen –network

“`

This makes twentyseventeen available for all subsites to activate.

  • Disabling a theme network-wide:

“`bash

wp theme disable twentyseventeen –network

“`

This removes the theme from the list of available themes for subsites (unless a subsite is currently using it, which means it will remain active on that subsite until changed).

  • Updating all themes on the network:

“`bash

wp theme update –all –network

“`

Updates every installed theme.

  • Uninstalling a theme (network-wide):

“`bash

wp theme uninstall twentytwentyfour –network

“`

Removes the theme files, assuming no site is actively using it.

Managing Themes on Specific Sites

While you can’t network-activate a theme in the same sense as a plugin, you can set a theme for a specific site.

  • Activating a theme on a specific site:

“`bash

wp theme activate twentytwentythree –url=mynewsite.example.com

“`

This activates twentytwentythree as the active theme for mynewsite.example.com. The theme must be network-enabled or installed directly on the subsite (though the latter is less common in multisite).

  • Listing themes for a specific site:

“`bash

wp theme list –url=mynewsite.example.com

“`

Shows themes available and active for that particular site.

Managing a WordPress multisite network can be a complex task, but utilizing WP-CLI can significantly streamline the process. For those looking to enhance their server management skills, you might find it beneficial to explore how to send emails using CyberPanel, which can complement your multisite setup by ensuring reliable email communication. You can read more about this topic in the article here. By integrating these tools, you can create a more efficient and effective WordPress environment.

Network Maintenance and Optimization

Beyond basic management, WP-CLI provides tools for keeping your multisite running smoothly, from database optimization to routine updates.

Updating WordPress Core

Keeping your WordPress core up to date is paramount for security and performance.

  • Checking for core updates:

“`bash

wp core check-update –network

“`

This tells you if a new version of WordPress is available for your network.

  • Updating WordPress core:

“`bash

wp core update –network

“`

This will update the entire WordPress core installation for your multisite network.

  • Updating core database:

After a core update, sometimes the database needs to be updated too:

“`bash

wp core update-db –network

“`

It’s good practice to run this after any core update.

Database Optimization

Multisite databases can become quite large and fragmented over time.

  • Optimizing database tables:

“`bash

wp db optimize –network

“`

This command optimizes all tables in your network’s database, which can help improve performance.

  • Repairing database tables:

“`bash

wp db repair –network

“`

If you suspect database corruption, this command can help repair tables.

Transients and Caching

Transients are temporary cached data that can sometimes pile up.

  • Deleting all transients across the network:

“`bash

wp transient delete –all –network

“`

This can clean out old, stale, or buggy transient data, potentially resolving issues or improving performance.

  • Flushing cache (if using object cache plugins):

Many caching plugins integrate with WP-CLI. For example, with WP Super Cache:

“`bash

wp cache flush –network

“`

This would clear the cache for the entire network. The exact command depends on your caching solution.

Running Global Commands on All Sites

One of the most powerful aspects of WP-CLI for multisite is the ability to execute the same command on every single subsite.

  • Running a command on all sites:

“`bash

wp site list –field=url | xargs -I % wp post delete –all –url=%

“`

This example gets a list of all site URLs and then, for each URL, deletes all posts. Be extremely careful with commands like this on a production network! This pattern can be used for any command.

  • Example: Updating permalinks on all sites:

Sometimes, after migration or changes, permalinks might need to be flushed on all sites. There isn’t a direct “update permalinks” command, but you can achieve it by updating a setting twice.

“`bash

wp site list –field=url | xargs -I % sh -c ‘wp option update permalink_structure “/%postname%/” –url=% && wp option update permalink_structure “” –url=% && wp option update permalink_structure “/%postname%/” –url=%’

“`

This is a rather clumsy example, simply updating an option, but it shows the potential. More realistically, you might use a wp rewrite command if available for specific permalink flushing logic. A more standard way to flush rewrites on a site is:

“`bash

wp rewrite flush –url=mynewsite.example.com

“`

And to do it on all sites would involve the xargs pattern.

Advanced Automation and Scripting with WP-CLI

The real magic of WP-CLI in a multisite context comes when you start combining commands and using them in scripts. This allows for powerful automation of routine tasks, disaster recovery, and large-scale changes.

Creating Bash Scripts for Common Tasks

Consider a scenario where you create new sites regularly, each needing a set of default plugins, themes, and perhaps some initial content.

  • Example: New Site Provisioning Script:

“`bash

#!/bin/bash

NEW_SITE_SLUG=$1

NEW_SITE_TITLE=$2

NEW_SITE_EMAIL=$3

NEW_SITE_URL=$4

if [ -z “$NEW_SITE_SLUG” ] || [ -z “$NEW_SITE_TITLE” ] || [ -z “$NEW_SITE_EMAIL” ] || [ -z “$NEW_SITE_URL” ]; then

echo “Usage: $0 <email> <url>“</p> <p>exit 1</p> <p>fi</p> <p>echo “Creating site: $NEW_SITE_TITLE ($NEW_SITE_URL)”</p> <p>wp site create –slug=”$NEW_SITE_SLUG” –title=”$NEW_SITE_TITLE” –email=”$NEW_SITE_EMAIL” –url=”$NEW_SITE_URL”</p> <h1>Get the ID of the newly created site</h1> <p>SITE_ID=$(wp site list –field=blog_id –url=”$NEW_SITE_URL”)</p> <p>echo “Site created with ID: $SITE_ID”</p> <p>if [ -n “$SITE_ID” ]; then</p> <p>echo “Activating default theme (twentytwentyfour)…”</p> <p>wp theme activate twentytwentyfour –url=”$NEW_SITE_URL”</p> <p>echo “Activating common plugins…”</p> <p>wp plugin activate classic-editor –url=”$NEW_SITE_URL”</p> <p>wp plugin activate yoast-seo –url=”$NEW_SITE_URL”</p> <p>echo “Adding an initial post…”</p> <p>wp post create –post_type=post –post_status=publish –post_title=”Welcome to ${NEW_SITE_TITLE}” –post_content=”This is your first post on ${NEW_SITE_TITLE}.” –url=”$NEW_SITE_URL”</p> <p>echo “New site ‘$NEW_SITE_TITLE’ provisioned successfully!”</p> <p>else</p> <p>echo “Error: Could not retrieve site ID for $NEW_SITE_URL. Site creation might have failed.”</p> <p>fi</p> <p>“`</p> <p>You would save this as, say, <code>provision-new-site.sh</code>, make it executable (<code>chmod +x provision-new-site.sh</code>), and then run it:</p> <p>“`bash</p> <p>./provision-new-site.sh mynewblog “My Awesome Blog” blogadmin@example.com mynewblog.example.com</p> <p>“`</p> <h4>Integrating with Cron Jobs</h4> <p>For routine maintenance, like database optimization or clearing transients, scheduling these WP-CLI commands via cron jobs is immensely useful.</p> <ul> <li><strong>Example Cron Entry:</strong></li> </ul> <p>“`cron</p> <p>0 3 <em> </em> * cd /var/www/html/wordpress && wp db optimize –network >> /var/log/wp-cli-cron.log 2>&1</p> <p>0 4 <em> </em> * cd /var/www/html/wordpress && wp transient delete –all –network >> /var/log/wp-cli-cron.log 2>&1</p> <p>“`</p> <p>This schedules database optimization at 3 AM and transient cleanup at 4 AM daily. Adjust the path (<code>/var/www/html/wordpress</code>) to your WordPress installation directory.</p> <p>WP-CLI transforms multisite management from a click-heavy, time-consuming chore into a streamlined, scriptable, and incredibly efficient process. Embrace it, and you’ll wonder how you ever managed your network without it.</p> </div> </div> </div> </div> <footer data-elementor-type="footer" data-elementor-id="37" class="elementor elementor-37 elementor-location-footer" data-elementor-post-type="elementor_library"> <footer class="elementor-element elementor-element-9da27f1 e-flex e-con-boxed e-con e-parent" data-id="9da27f1" data-element_type="container" data-e-type="container" data-settings="{"background_background":"classic"}"> <div class="e-con-inner"> <div class="elementor-element elementor-element-54b8d58 e-con-full e-flex e-con e-child" data-id="54b8d58" data-element_type="container" data-e-type="container"> <div class="elementor-element elementor-element-46df351 elementor-widget elementor-widget-image" data-id="46df351" data-element_type="widget" data-e-type="widget" data-widget_type="image.default"> <a href="https://thesheryar.com"> <img width="544" height="188" src="https://thesheryar.com/wp-content/uploads/source-02-1.png" class="attachment-full size-full wp-image-2398" alt="" srcset="https://thesheryar.com/wp-content/uploads/source-02-1.png 544w, https://thesheryar.com/wp-content/uploads/source-02-1-300x104.png 300w" sizes="(max-width: 544px) 100vw, 544px" /> </a> </div> <div class="elementor-element elementor-element-cf36300 e-grid-align-left elementor-shape-rounded elementor-grid-0 elementor-widget elementor-widget-global elementor-global-919 elementor-widget-social-icons" data-id="cf36300" data-element_type="widget" data-e-type="widget" data-widget_type="social-icons.default"> <div class="elementor-social-icons-wrapper elementor-grid" role="list"> <span class="elementor-grid-item" role="listitem"> <a class="elementor-icon elementor-social-icon elementor-social-icon-linkedin-in elementor-repeater-item-00771c7" href="https://www.linkedin.com/in/thesheryar/" target="_blank"> <span class="elementor-screen-only">Linkedin-in</span> <svg aria-hidden="true" class="e-font-icon-svg e-fab-linkedin-in" viewBox="0 0 448 512" xmlns="http://www.w3.org/2000/svg"><path d="M100.28 448H7.4V148.9h92.88zM53.79 108.1C24.09 108.1 0 83.5 0 53.8a53.79 53.79 0 0 1 107.58 0c0 29.7-24.1 54.3-53.79 54.3zM447.9 448h-92.68V302.4c0-34.7-.7-79.2-48.29-79.2-48.29 0-55.69 37.7-55.69 76.7V448h-92.78V148.9h89.08v40.8h1.3c12.4-23.5 42.69-48.3 87.88-48.3 94 0 111.28 61.9 111.28 142.3V448z"></path></svg> </a> </span> <span class="elementor-grid-item" role="listitem"> <a class="elementor-icon elementor-social-icon elementor-social-icon-x-twitter elementor-repeater-item-2504d32" href="https://x.com/thesheryarcom" target="_blank"> <span class="elementor-screen-only">X-twitter</span> <svg aria-hidden="true" class="e-font-icon-svg e-fab-x-twitter" viewBox="0 0 512 512" xmlns="http://www.w3.org/2000/svg"><path d="M389.2 48h70.6L305.6 224.2 487 464H345L233.7 318.6 106.5 464H35.8L200.7 275.5 26.8 48H172.4L272.9 180.9 389.2 48zM364.4 421.8h39.1L151.1 88h-42L364.4 421.8z"></path></svg> </a> </span> <span class="elementor-grid-item" role="listitem"> <a class="elementor-icon elementor-social-icon elementor-social-icon-wordpress elementor-repeater-item-0d7d4c4" href="https://profiles.wordpress.org/thesheryar/" target="_blank"> <span class="elementor-screen-only">Wordpress</span> <svg aria-hidden="true" class="e-font-icon-svg e-fab-wordpress" viewBox="0 0 512 512" xmlns="http://www.w3.org/2000/svg"><path d="M61.7 169.4l101.5 278C92.2 413 43.3 340.2 43.3 256c0-30.9 6.6-60.1 18.4-86.6zm337.9 75.9c0-26.3-9.4-44.5-17.5-58.7-10.8-17.5-20.9-32.4-20.9-49.9 0-19.6 14.8-37.8 35.7-37.8.9 0 1.8.1 2.8.2-37.9-34.7-88.3-55.9-143.7-55.9-74.3 0-139.7 38.1-177.8 95.9 5 .2 9.7.3 13.7.3 22.2 0 56.7-2.7 56.7-2.7 11.5-.7 12.8 16.2 1.4 17.5 0 0-11.5 1.3-24.3 2l77.5 230.4L249.8 247l-33.1-90.8c-11.5-.7-22.3-2-22.3-2-11.5-.7-10.1-18.2 1.3-17.5 0 0 35.1 2.7 56 2.7 22.2 0 56.7-2.7 56.7-2.7 11.5-.7 12.8 16.2 1.4 17.5 0 0-11.5 1.3-24.3 2l76.9 228.7 21.2-70.9c9-29.4 16-50.5 16-68.7zm-139.9 29.3l-63.8 185.5c19.1 5.6 39.2 8.7 60.1 8.7 24.8 0 48.5-4.3 70.6-12.1-.6-.9-1.1-1.9-1.5-2.9l-65.4-179.2zm183-120.7c.9 6.8 1.4 14 1.4 21.9 0 21.6-4 45.8-16.2 76.2l-65 187.9C426.2 403 468.7 334.5 468.7 256c0-37-9.4-71.8-26-102.1zM504 256c0 136.8-111.3 248-248 248C119.2 504 8 392.7 8 256 8 119.2 119.2 8 256 8c136.7 0 248 111.2 248 248zm-11.4 0c0-130.5-106.2-236.6-236.6-236.6C125.5 19.4 19.4 125.5 19.4 256S125.6 492.6 256 492.6c130.5 0 236.6-106.1 236.6-236.6z"></path></svg> </a> </span> <span class="elementor-grid-item" role="listitem"> <a class="elementor-icon elementor-social-icon elementor-social-icon-github elementor-repeater-item-472a732" href="https://github.com/thesheryar" target="_blank"> <span class="elementor-screen-only">Github</span> <svg aria-hidden="true" class="e-font-icon-svg e-fab-github" viewBox="0 0 496 512" xmlns="http://www.w3.org/2000/svg"><path d="M165.9 397.4c0 2-2.3 3.6-5.2 3.6-3.3.3-5.6-1.3-5.6-3.6 0-2 2.3-3.6 5.2-3.6 3-.3 5.6 1.3 5.6 3.6zm-31.1-4.5c-.7 2 1.3 4.3 4.3 4.9 2.6 1 5.6 0 6.2-2s-1.3-4.3-4.3-5.2c-2.6-.7-5.5.3-6.2 2.3zm44.2-1.7c-2.9.7-4.9 2.6-4.6 4.9.3 2 2.9 3.3 5.9 2.6 2.9-.7 4.9-2.6 4.6-4.6-.3-1.9-3-3.2-5.9-2.9zM244.8 8C106.1 8 0 113.3 0 252c0 110.9 69.8 205.8 169.5 239.2 12.8 2.3 17.3-5.6 17.3-12.1 0-6.2-.3-40.4-.3-61.4 0 0-70 15-84.7-29.8 0 0-11.4-29.1-27.8-36.6 0 0-22.9-15.7 1.6-15.4 0 0 24.9 2 38.6 25.8 21.9 38.6 58.6 27.5 72.9 20.9 2.3-16 8.8-27.1 16-33.7-55.9-6.2-112.3-14.3-112.3-110.5 0-27.5 7.6-41.3 23.6-58.9-2.6-6.5-11.1-33.3 2.6-67.9 20.9-6.5 69 27 69 27 20-5.6 41.5-8.5 62.8-8.5s42.8 2.9 62.8 8.5c0 0 48.1-33.6 69-27 13.7 34.7 5.2 61.4 2.6 67.9 16 17.7 25.8 31.5 25.8 58.9 0 96.5-58.9 104.2-114.8 110.5 9.2 7.9 17 22.9 17 46.4 0 33.7-.3 75.4-.3 83.6 0 6.5 4.6 14.4 17.3 12.1C428.2 457.8 496 362.9 496 252 496 113.3 383.5 8 244.8 8zM97.2 352.9c-1.3 1-1 3.3.7 5.2 1.6 1.6 3.9 2.3 5.2 1 1.3-1 1-3.3-.7-5.2-1.6-1.6-3.9-2.3-5.2-1zm-10.8-8.1c-.7 1.3.3 2.9 2.3 3.9 1.6 1 3.6.7 4.3-.7.7-1.3-.3-2.9-2.3-3.9-2-.6-3.6-.3-4.3.7zm32.4 35.6c-1.6 1.3-1 4.3 1.3 6.2 2.3 2.3 5.2 2.6 6.5 1 1.3-1.3.7-4.3-1.3-6.2-2.2-2.3-5.2-2.6-6.5-1zm-11.4-14.7c-1.6 1-1.6 3.6 0 5.9 1.6 2.3 4.3 3.3 5.6 2.3 1.6-1.3 1.6-3.9 0-6.2-1.4-2.3-4-3.3-5.6-2z"></path></svg> </a> </span> <span class="elementor-grid-item" role="listitem"> <a class="elementor-icon elementor-social-icon elementor-social-icon-wordpress elementor-repeater-item-4a501ec" target="_blank"> <span class="elementor-screen-only">Wordpress</span> <svg aria-hidden="true" class="e-font-icon-svg e-fab-wordpress" viewBox="0 0 512 512" xmlns="http://www.w3.org/2000/svg"><path d="M61.7 169.4l101.5 278C92.2 413 43.3 340.2 43.3 256c0-30.9 6.6-60.1 18.4-86.6zm337.9 75.9c0-26.3-9.4-44.5-17.5-58.7-10.8-17.5-20.9-32.4-20.9-49.9 0-19.6 14.8-37.8 35.7-37.8.9 0 1.8.1 2.8.2-37.9-34.7-88.3-55.9-143.7-55.9-74.3 0-139.7 38.1-177.8 95.9 5 .2 9.7.3 13.7.3 22.2 0 56.7-2.7 56.7-2.7 11.5-.7 12.8 16.2 1.4 17.5 0 0-11.5 1.3-24.3 2l77.5 230.4L249.8 247l-33.1-90.8c-11.5-.7-22.3-2-22.3-2-11.5-.7-10.1-18.2 1.3-17.5 0 0 35.1 2.7 56 2.7 22.2 0 56.7-2.7 56.7-2.7 11.5-.7 12.8 16.2 1.4 17.5 0 0-11.5 1.3-24.3 2l76.9 228.7 21.2-70.9c9-29.4 16-50.5 16-68.7zm-139.9 29.3l-63.8 185.5c19.1 5.6 39.2 8.7 60.1 8.7 24.8 0 48.5-4.3 70.6-12.1-.6-.9-1.1-1.9-1.5-2.9l-65.4-179.2zm183-120.7c.9 6.8 1.4 14 1.4 21.9 0 21.6-4 45.8-16.2 76.2l-65 187.9C426.2 403 468.7 334.5 468.7 256c0-37-9.4-71.8-26-102.1zM504 256c0 136.8-111.3 248-248 248C119.2 504 8 392.7 8 256 8 119.2 119.2 8 256 8c136.7 0 248 111.2 248 248zm-11.4 0c0-130.5-106.2-236.6-236.6-236.6C125.5 19.4 19.4 125.5 19.4 256S125.6 492.6 256 492.6c130.5 0 236.6-106.1 236.6-236.6z"></path></svg> </a> </span> </div> </div> </div> <div class="elementor-element elementor-element-1c773c1 e-con-full e-flex e-con e-child" data-id="1c773c1" data-element_type="container" data-e-type="container"> <div class="elementor-element elementor-element-099b003 elementor-widget elementor-widget-heading" data-id="099b003" data-element_type="widget" data-e-type="widget" data-widget_type="heading.default"> <h2 class="elementor-heading-title elementor-size-default">Email Contact</h2> </div> <div class="elementor-element elementor-element-55083cf elementor-icon-list--layout-traditional elementor-list-item-link-full_width elementor-widget elementor-widget-icon-list" data-id="55083cf" data-element_type="widget" data-e-type="widget" data-widget_type="icon-list.default"> <ul class="elementor-icon-list-items"> <li class="elementor-icon-list-item"> <span class="elementor-icon-list-text">info@thesheryar.com</span> </li> </ul> </div> </div> </div> </footer> <footer class="elementor-element elementor-element-d3ffab7 e-flex e-con-boxed e-con e-parent" data-id="d3ffab7" data-element_type="container" data-e-type="container" data-settings="{"background_background":"classic"}"> <div class="e-con-inner"> <div class="elementor-element elementor-element-1b89338 e-con-full e-flex e-con e-child" data-id="1b89338" data-element_type="container" data-e-type="container"> <div class="elementor-element elementor-element-0aa3417 elementor-widget elementor-widget-heading" data-id="0aa3417" data-element_type="widget" data-e-type="widget" data-widget_type="heading.default"> <span class="elementor-heading-title elementor-size-default">Copyright © 2018-2026 TheSheryar LLC. </span> </div> </div> </div> </footer> </footer> <script type="speculationrules"> {"prefetch":[{"source":"document","where":{"and":[{"href_matches":"/*"},{"not":{"href_matches":["/wp-*.php","/wp-admin/*","/wp-content/uploads/*","/wp-content/*","/wp-content/plugins/*","/wp-content/themes/hello-elementor/*","/*\\?(.+)"]}},{"not":{"selector_matches":"a[rel~=\"nofollow\"]"}},{"not":{"selector_matches":".no-prefetch, .no-prefetch a"}}]},"eagerness":"conservative"}]} </script> <script id="independent-analytics-script" > // Do not change this comment line otherwise Speed Optimizer won't be able to detect this script (function () { function sendRequest(url, body) { if(!window.fetch) { const xhr = new XMLHttpRequest(); xhr.open("POST", url, true); xhr.setRequestHeader("Content-Type", "application/json;charset=UTF-8"); xhr.send(JSON.stringify(body)) return } const request = fetch(url, { method: 'POST', body: JSON.stringify(body), keepalive: true, headers: { 'Content-Type': 'application/json;charset=UTF-8' } }); } const calculateParentDistance = (child, parent) => { let count = 0; let currentElement = child; // Traverse up the DOM tree until we reach parent or the top of the DOM while (currentElement && currentElement !== parent) { currentElement = currentElement.parentNode; count++; } // If parent was not found in the hierarchy, return -1 if (!currentElement) { return -1; // Indicates parent is not an ancestor of element } return count; // Number of layers between element and parent } const isMatchingClass = (linkRule, href, classes, ids) => { return classes.includes(linkRule.value) } const isMatchingId = (linkRule, href, classes, ids) => { return ids.includes(linkRule.value) } const isMatchingDomain = (linkRule, href, classes, ids) => { if(!URL.canParse(href)) { return false } const url = new URL(href) const host = url.host const hostsToMatch = [host] if(host.startsWith('www.')) { hostsToMatch.push(host.substring(4)) } else { hostsToMatch.push('www.' + host) } return hostsToMatch.includes(linkRule.value) } const isMatchingExtension = (linkRule, href, classes, ids) => { if(!URL.canParse(href)) { return false } const url = new URL(href) return url.pathname.endsWith('.' + linkRule.value) } const isMatchingSubdirectory = (linkRule, href, classes, ids) => { if(!URL.canParse(href)) { return false } const url = new URL(href) return url.pathname.startsWith('/' + linkRule.value + '/') } const isMatchingProtocol = (linkRule, href, classes, ids) => { if(!URL.canParse(href)) { return false } const url = new URL(href) return url.protocol === linkRule.value + ':' } const isMatchingExternal = (linkRule, href, classes, ids) => { if(!URL.canParse(href) || !URL.canParse(document.location.href)) { return false } const matchingProtocols = ['http:', 'https:'] const siteUrl = new URL(document.location.href) const linkUrl = new URL(href) // Links to subdomains will appear to be external matches according to JavaScript, // but the PHP rules will filter those events out. return matchingProtocols.includes(linkUrl.protocol) && siteUrl.host !== linkUrl.host } const isMatch = (linkRule, href, classes, ids) => { switch (linkRule.type) { case 'class': return isMatchingClass(linkRule, href, classes, ids) case 'id': return isMatchingId(linkRule, href, classes, ids) case 'domain': return isMatchingDomain(linkRule, href, classes, ids) case 'extension': return isMatchingExtension(linkRule, href, classes, ids) case 'subdirectory': return isMatchingSubdirectory(linkRule, href, classes, ids) case 'protocol': return isMatchingProtocol(linkRule, href, classes, ids) case 'external': return isMatchingExternal(linkRule, href, classes, ids) default: return false; } } const track = (element) => { const href = element.href ?? null const classes = Array.from(element.classList) const ids = [element.id] const linkRules = [{"type":"extension","value":"pdf"},{"type":"extension","value":"zip"},{"type":"protocol","value":"mailto"},{"type":"protocol","value":"tel"}] if(linkRules.length === 0) { return } // For link rules that target an id, we need to allow that id to appear // in any ancestor up to the 7th ancestor. This loop looks for those matches // and counts them. linkRules.forEach((linkRule) => { if(linkRule.type !== 'id') { return; } const matchingAncestor = element.closest('#' + linkRule.value) if(!matchingAncestor || matchingAncestor.matches('html, body')) { return; } const depth = calculateParentDistance(element, matchingAncestor) if(depth < 7) { ids.push(linkRule.value) } }); // For link rules that target a class, we need to allow that class to appear // in any ancestor up to the 7th ancestor. This loop looks for those matches // and counts them. linkRules.forEach((linkRule) => { if(linkRule.type !== 'class') { return; } const matchingAncestor = element.closest('.' + linkRule.value) if(!matchingAncestor || matchingAncestor.matches('html, body')) { return; } const depth = calculateParentDistance(element, matchingAncestor) if(depth < 7) { classes.push(linkRule.value) } }); const hasMatch = linkRules.some((linkRule) => { return isMatch(linkRule, href, classes, ids) }) if(!hasMatch) { return } const url = "https://thesheryar.com/wp-content/plugins/independent-analytics/iawp-click-endpoint.php"; const body = { href: href, classes: classes.join(' '), ids: ids.join(' '), ...{"payload":{"resource":"singular","singular_id":2512,"page":1},"signature":"473cc6c0878da64934d62e661abb729a"} }; sendRequest(url, body) } let hasSearched = false; function search() { if(hasSearched) { return; } hasSearched = true; if (document.hasOwnProperty("visibilityState") && document.visibilityState === "prerender") { return; } if (navigator.webdriver || /bot|crawler|spider|crawling|semrushbot|chrome-lighthouse/i.test(navigator.userAgent)) { return; } let referrer_url = null; if (typeof document.referrer === 'string' && document.referrer.length > 0) { referrer_url = document.referrer; } const params = location.search.slice(1).split('&').reduce((acc, s) => { const [k, v] = s.split('='); return Object.assign(acc, {[k]: v}); }, {}); const url = "https://thesheryar.com/wp-json/iawp/search"; const body = { referrer_url, utm_source: params.utm_source, utm_medium: params.utm_medium, utm_campaign: params.utm_campaign, utm_term: params.utm_term, utm_content: params.utm_content, gclid: params.gclid, ...{"payload":{"resource":"singular","singular_id":2512,"page":1},"signature":"473cc6c0878da64934d62e661abb729a"} }; sendRequest(url, body) } document.addEventListener('mousedown', function (event) { if (navigator.webdriver || /bot|crawler|spider|crawling|semrushbot|chrome-lighthouse/i.test(navigator.userAgent)) { return; } const element = event.target.closest('a') if(!element) { return } const isPro = false if(!isPro) { return } // Don't track left clicks with this event. The click event is used for that. if(event.button === 0) { return } track(element) }) document.addEventListener('click', function (event) { if (navigator.webdriver || /bot|crawler|spider|crawling|semrushbot|chrome-lighthouse/i.test(navigator.userAgent)) { return; } const element = event.target.closest('a, button, input[type="submit"], input[type="button"]') if(!element) { return } const isPro = false if(!isPro) { return } track(element) }) document.addEventListener('play', function (event) { if (navigator.webdriver || /bot|crawler|spider|crawling|semrushbot|chrome-lighthouse/i.test(navigator.userAgent)) { return; } const element = event.target.closest('audio, video') if(!element) { return } const isPro = false if(!isPro) { return } track(element) }, true) document.addEventListener("DOMContentLoaded", function (e) { search(); }); document.addEventListener("iawpSearch", function (e) { search(); }); })(); </script> <script id="hello-theme-frontend-js" src="https://thesheryar.com/wp-content/themes/hello-elementor/assets/js/hello-frontend.js?ver=3.4.9"></script> <script id="elementor-webpack-runtime-js" src="https://thesheryar.com/wp-content/plugins/elementor/assets/js/webpack.runtime.min.js?ver=4.1.1"></script> <script id="elementor-frontend-modules-js" src="https://thesheryar.com/wp-content/plugins/elementor/assets/js/frontend-modules.min.js?ver=4.1.1"></script> <script id="jquery-ui-core-js" src="https://thesheryar.com/wp-includes/js/jquery/ui/core.min.js?ver=1.13.3"></script> <script id="elementor-frontend-js-before"> var elementorFrontendConfig = {"environmentMode":{"edit":false,"wpPreview":false,"isScriptDebug":false},"i18n":{"shareOnFacebook":"Share on Facebook","shareOnTwitter":"Share on Twitter","pinIt":"Pin it","download":"Download","downloadImage":"Download image","fullscreen":"Fullscreen","zoom":"Zoom","share":"Share","playVideo":"Play Video","previous":"Previous","next":"Next","close":"Close","a11yCarouselPrevSlideMessage":"Previous slide","a11yCarouselNextSlideMessage":"Next slide","a11yCarouselFirstSlideMessage":"This is the first slide","a11yCarouselLastSlideMessage":"This is the last slide","a11yCarouselPaginationBulletMessage":"Go to slide"},"is_rtl":false,"breakpoints":{"xs":0,"sm":480,"md":768,"lg":1025,"xl":1440,"xxl":1600},"responsive":{"breakpoints":{"mobile":{"label":"Mobile Portrait","value":767,"default_value":767,"direction":"max","is_enabled":true},"mobile_extra":{"label":"Mobile Landscape","value":880,"default_value":880,"direction":"max","is_enabled":true},"tablet":{"label":"Tablet Portrait","value":1024,"default_value":1024,"direction":"max","is_enabled":true},"tablet_extra":{"label":"Tablet Landscape","value":1200,"default_value":1200,"direction":"max","is_enabled":true},"laptop":{"label":"Laptop","value":1366,"default_value":1366,"direction":"max","is_enabled":true},"widescreen":{"label":"Widescreen","value":2400,"default_value":2400,"direction":"min","is_enabled":true}},"hasCustomBreakpoints":true},"version":"4.1.1","is_static":false,"experimentalFeatures":{"e_font_icon_svg":true,"additional_custom_breakpoints":true,"container":true,"e_optimized_markup":true,"theme_builder_v2":true,"hello-theme-header-footer":true,"nested-elements":true,"global_classes_should_enforce_capabilities":true,"e_variables":true,"e_opt_in_v4_page":true,"e_components":true,"e_interactions":true,"e_widget_creation":true,"import-export-customization":true,"e_pro_atomic_form":true,"e_pro_variables":true,"e_pro_interactions":true},"urls":{"assets":"https:\/\/thesheryar.com\/wp-content\/plugins\/elementor\/assets\/","ajaxurl":"https:\/\/thesheryar.com\/wp-admin\/admin-ajax.php","uploadUrl":"https:\/\/thesheryar.com\/wp-content\/uploads"},"nonces":{"floatingButtonsClickTracking":"8f6d91523e","atomicFormsSendForm":"0e67942533"},"swiperClass":"swiper","settings":{"page":[],"editorPreferences":[]},"kit":{"body_background_background":"classic","active_breakpoints":["viewport_mobile","viewport_mobile_extra","viewport_tablet","viewport_tablet_extra","viewport_laptop","viewport_widescreen"],"global_image_lightbox":"yes","lightbox_enable_counter":"yes","lightbox_enable_fullscreen":"yes","lightbox_enable_zoom":"yes","lightbox_enable_share":"yes","lightbox_title_src":"title","lightbox_description_src":"description","hello_header_logo_type":"logo","hello_header_menu_layout":"horizontal","hello_footer_logo_type":"logo"},"post":{"id":2512,"title":"How%20to%20manage%20WordPress%20multisite%20networks%20entirely%20via%20WP-CLI%3F%20-%20TheSheryar","excerpt":"","featuredImage":false}}; //# sourceURL=elementor-frontend-js-before </script> <script id="elementor-frontend-js" src="https://thesheryar.com/wp-content/plugins/elementor/assets/js/frontend.min.js?ver=4.1.1"></script> <script id="smartmenus-js" src="https://thesheryar.com/wp-content/plugins/elementor-pro/assets/lib/smartmenus/jquery.smartmenus.min.js?ver=1.2.1"></script> <script id="e-sticky-js" src="https://thesheryar.com/wp-content/plugins/elementor-pro/assets/lib/sticky/jquery.sticky.min.js?ver=4.0.4"></script> <script id="elementor-pro-webpack-runtime-js" src="https://thesheryar.com/wp-content/plugins/elementor-pro/assets/js/webpack-pro.runtime.min.js?ver=4.0.4"></script> <script id="wp-hooks-js" src="https://thesheryar.com/wp-includes/js/dist/hooks.min.js?ver=7496969728ca0f95732d"></script> <script id="wp-i18n-js" src="https://thesheryar.com/wp-includes/js/dist/i18n.min.js?ver=781d11515ad3d91786ec"></script> <script id="wp-i18n-js-after"> wp.i18n.setLocaleData( { 'text direction\u0004ltr': [ 'ltr' ] } ); //# sourceURL=wp-i18n-js-after </script> <script id="elementor-pro-frontend-js-before"> var ElementorProFrontendConfig = {"ajaxurl":"https:\/\/thesheryar.com\/wp-admin\/admin-ajax.php","nonce":"9f26bb5b7b","urls":{"assets":"https:\/\/thesheryar.com\/wp-content\/plugins\/elementor-pro\/assets\/","rest":"https:\/\/thesheryar.com\/wp-json\/"},"settings":{"lazy_load_background_images":false},"popup":{"hasPopUps":false},"shareButtonsNetworks":{"facebook":{"title":"Facebook","has_counter":true},"twitter":{"title":"Twitter"},"linkedin":{"title":"LinkedIn","has_counter":true},"pinterest":{"title":"Pinterest","has_counter":true},"reddit":{"title":"Reddit","has_counter":true},"vk":{"title":"VK","has_counter":true},"odnoklassniki":{"title":"OK","has_counter":true},"tumblr":{"title":"Tumblr"},"digg":{"title":"Digg"},"skype":{"title":"Skype"},"stumbleupon":{"title":"StumbleUpon","has_counter":true},"mix":{"title":"Mix"},"telegram":{"title":"Telegram"},"pocket":{"title":"Pocket","has_counter":true},"xing":{"title":"XING","has_counter":true},"whatsapp":{"title":"WhatsApp"},"email":{"title":"Email"},"print":{"title":"Print"},"x-twitter":{"title":"X"},"threads":{"title":"Threads"}},"facebook_sdk":{"lang":"en_US","app_id":""},"lottie":{"defaultAnimationUrl":"https:\/\/thesheryar.com\/wp-content\/plugins\/elementor-pro\/modules\/lottie\/assets\/animations\/default.json"}}; //# sourceURL=elementor-pro-frontend-js-before </script> <script id="elementor-pro-frontend-js" src="https://thesheryar.com/wp-content/plugins/elementor-pro/assets/js/frontend.min.js?ver=4.0.4"></script> <script id="pro-elements-handlers-js" src="https://thesheryar.com/wp-content/plugins/elementor-pro/assets/js/elements-handlers.min.js?ver=4.0.4"></script> <script id="wp-emoji-settings" type="application/json"> {"baseUrl":"https://s.w.org/images/core/emoji/17.0.2/72x72/","ext":".png","svgUrl":"https://s.w.org/images/core/emoji/17.0.2/svg/","svgExt":".svg","source":{"concatemoji":"https://thesheryar.com/wp-includes/js/wp-emoji-release.min.js?ver=7.0"}} </script> <script type="module"> /*! This file is auto-generated */ const a=JSON.parse(document.getElementById("wp-emoji-settings").textContent),o=(window._wpemojiSettings=a,"wpEmojiSettingsSupports"),s=["flag","emoji"];function i(e){try{var t={supportTests:e,timestamp:(new Date).valueOf()};sessionStorage.setItem(o,JSON.stringify(t))}catch(e){}}function c(e,t,n){e.clearRect(0,0,e.canvas.width,e.canvas.height),e.fillText(t,0,0);t=new Uint32Array(e.getImageData(0,0,e.canvas.width,e.canvas.height).data);e.clearRect(0,0,e.canvas.width,e.canvas.height),e.fillText(n,0,0);const a=new Uint32Array(e.getImageData(0,0,e.canvas.width,e.canvas.height).data);return t.every((e,t)=>e===a[t])}function p(e,t){e.clearRect(0,0,e.canvas.width,e.canvas.height),e.fillText(t,0,0);var n=e.getImageData(16,16,1,1);for(let e=0;e<n.data.length;e++)if(0!==n.data[e])return!1;return!0}function u(e,t,n,a){switch(t){case"flag":return n(e,"\ud83c\udff3\ufe0f\u200d\u26a7\ufe0f","\ud83c\udff3\ufe0f\u200b\u26a7\ufe0f")?!1:!n(e,"\ud83c\udde8\ud83c\uddf6","\ud83c\udde8\u200b\ud83c\uddf6")&&!n(e,"\ud83c\udff4\udb40\udc67\udb40\udc62\udb40\udc65\udb40\udc6e\udb40\udc67\udb40\udc7f","\ud83c\udff4\u200b\udb40\udc67\u200b\udb40\udc62\u200b\udb40\udc65\u200b\udb40\udc6e\u200b\udb40\udc67\u200b\udb40\udc7f");case"emoji":return!a(e,"\ud83e\u1fac8")}return!1}function f(e,t,n,a){let r;const o=(r="undefined"!=typeof WorkerGlobalScope&&self instanceof WorkerGlobalScope?new OffscreenCanvas(300,150):document.createElement("canvas")).getContext("2d",{willReadFrequently:!0}),s=(o.textBaseline="top",o.font="600 32px Arial",{});return e.forEach(e=>{s[e]=t(o,e,n,a)}),s}function r(e){var t=document.createElement("script");t.src=e,t.defer=!0,document.head.appendChild(t)}a.supports={everything:!0,everythingExceptFlag:!0},new Promise(t=>{let n=function(){try{var e=JSON.parse(sessionStorage.getItem(o));if("object"==typeof e&&"number"==typeof e.timestamp&&(new Date).valueOf()<e.timestamp+604800&&"object"==typeof e.supportTests)return e.supportTests}catch(e){}return null}();if(!n){if("undefined"!=typeof Worker&&"undefined"!=typeof OffscreenCanvas&&"undefined"!=typeof URL&&URL.createObjectURL&&"undefined"!=typeof Blob)try{var e="postMessage("+f.toString()+"("+[JSON.stringify(s),u.toString(),c.toString(),p.toString()].join(",")+"));",a=new Blob([e],{type:"text/javascript"});const r=new Worker(URL.createObjectURL(a),{name:"wpTestEmojiSupports"});return void(r.onmessage=e=>{i(n=e.data),r.terminate(),t(n)})}catch(e){}i(n=f(s,u,c,p))}t(n)}).then(e=>{for(const n in e)a.supports[n]=e[n],a.supports.everything=a.supports.everything&&a.supports[n],"flag"!==n&&(a.supports.everythingExceptFlag=a.supports.everythingExceptFlag&&a.supports[n]);var t;a.supports.everythingExceptFlag=a.supports.everythingExceptFlag&&!a.supports.flag,a.supports.everything||((t=a.source||{}).concatemoji?r(t.concatemoji):t.wpemoji&&t.twemoji&&(r(t.twemoji),r(t.wpemoji)))}); //# sourceURL=https://thesheryar.com/wp-includes/js/wp-emoji-loader.min.js </script> </body> </html>