I’m trying to manually update my WordPress site using FTP on my Mac because the one-click update in the dashboard keeps failing with timeout errors. I’m not totally sure which core files and folders I should replace, what I need to back up first, or how to avoid breaking my theme and plugins. Can someone walk me through the correct, safe steps for updating WordPress via FTP on macOS, including any recommended FTP client settings and common mistakes to avoid?
Updating WordPress Manually With FTP on a Mac (Real-World Walkthrough)
I used to rely completely on the built‑in “Update now” button in WordPress until one of my sites froze on a white screen and refused to load. Host support told me to “update manually via FTP” like that was something everyone just does before breakfast.
If you’re on a Mac and in the same boat, here’s the cleaned‑up version of what actually works for a simple, safe manual core update.
1. Grab the newest WordPress download
- Go to https://wordpress.org.
- Download the latest WordPress ZIP file.
- Once it finishes, double‑click the ZIP so it unpacks into a folder called
wordpresson your Mac (usually in Downloads).
You should now see a folder that has stuff like:
wp-adminwp-includes- a bunch of
.phpfiles in the root - a
wp-contentfolder
That last one is the important bit for the next step.
2. Delete the local wp-content folder
Inside that new wordpress folder you just unzipped:
- Find the
wp-contentfolder. - Delete it from the local copy.
Why? Because on your server, wp-content is where your themes, plugins, and uploaded files live. Replacing it with the “empty default” from the download would be like installing a fresh WordPress on top of your existing one and wiping your customizations.
So the rule is: update core files only, leave your own stuff alone.
3. Connect to your site via FTP
You’ll need an FTP client. On Mac, common ones are:
- Cyberduck
- FileZilla
- Transmit
- Or whatever you already have installed
Open your FTP app and:
- Put in your FTP or SFTP login details (host, username, password, port).
- Connect to your server.
If you don’t know the credentials, check your hosting panel or ask support. Most shared hosts give you at least one FTP or SFTP account.
4. Find your WordPress install on the server
Once connected, browse the server’s folders. Usually your WordPress site is in one of these:
public_htmlhtdocs/var/www/(on VPS setups)- Or just the root of your user’s web directory
You’ll know you’re in the right place when you see:
wp-admin/wp-includes/wp-content/- Files like
wp-config.php,index.php, etc.
That directory is what you’re going to update.
5. Upload the new WordPress files (minus wp-content)
On the left (or local) side of your FTP client:
- Open the
wordpressfolder you unzipped earlier. - Select everything except
wp-content.
Then:
- Drag or upload those selected files and folders into your site’s main WordPress folder on the server (the one with
wp-admin,wp-includes, etc.). - When your FTP client asks what to do with files that already exist on the server, choose Overwrite (and apply to all).
This replaces the core WordPress files with fresh ones, while leaving your existing wp-content folder (themes, plugins, uploads) completely untouched.
6. Wrap it up in the dashboard
When the upload finishes:
- Go to your site’s WordPress admin URL in your browser, usually
https://yourdomain.com/wp-admin/. - If WordPress needs to tweak the database for this version, it will show a screen asking you to run the database update. Click the button and let it complete.
If that page loads fine and there are no weird errors, you’re done. The basic pattern is:
Download → remove
wp-contentlocally → upload everything else → overwrite → check dashboard
That’s literally the whole manual update process.
Updating WordPress With Commander One on a Mac
If you prefer something that feels more “Finder‑like” and less like an old‑school FTP app, Commander One on macOS is pretty comfortable, especially because of the dual‑pane layout.
Link for it:
Here’s how the update flow looks in that app.
1. Open Commander One and connect to your server
- Launch Commander One.
- Use the top toolbar to create a new FTP or SFTP connection.
- After you connect, set one pane to show your remote site. Navigate until you see your WordPress install (again, you’re looking for
wp-admin,wp-includes,wp-content, etc.).
Now one side is your server. Time to prep the local side.
2. Load the new WordPress files locally
In the other pane:
- Open the folder where you unzipped the latest WordPress download from wordpress.org.
- Just like before, delete the
wp-contentfolder from that local copy. - Double‑check it is gone locally so you don’t drag it up by habit.
So you should now have:
- Left pane: server with your live WordPress site.
- Right pane: local extracted WordPress folder with no
wp-content.
3. Drag and overwrite
On the pane that has the local WordPress folder:
- Select everything except
wp-content(which you already deleted). - Drag those selected items into the pane that shows your server’s WordPress directory (the one that has your live
wp-admin,wp-includes, etc.).
Commander One will pop up a dialog when it hits existing files.
- Choose to Overwrite matching files.
- Apply to all so you don’t have to confirm every single file.
Commander One will handle the transfers and replacements in the background.
4. Confirm via WordPress admin
Once Commander One finishes:
- Open your WordPress dashboard in a browser:
https://yourdomain.com/wp-admin/. - If there is any required database update for that version, WordPress will show you a prompt. Click through and let it run.
If the dashboard loads and you can move around normally, the update worked.
A lot of Mac users like this method because you see local and remote folders side by side and basically treat the server like another Finder window. No hunting around for “local site” vs “remote site” tabs, just drag from one pane to the other and confirm overwrites.
Short version: the idea from @mikeappsreviewer is right (replace core, skip your data), but I’d tweak the “delete wp-content” part and add some safety nets.
1. Before you touch FTP
-
Backup first
- Database: use your host’s phpMyAdmin or a plugin that still works long enough to export the DB.
- Files: at minimum download:
wp-contentwp-config.php
-
Put site in maintenance (optional but smart)
- Create a file called
.maintenancein the WordPress root with:<?php $upgrading = time(); ?> - This avoids people hitting the site mid‑update and seeing random errors.
- Create a file called
2. What to actually overwrite
This is the part you were unsure about, so here’s the exact list:
Replace with new version (overwrite):
- Entire
wp-adminfolder - Entire
wp-includesfolder - Root files like:
index.phpwp-activate.phpwp-blog-header.phpwp-comments-post.phpwp-cron.phpwp-links-opml.phpwp-load.phpwp-login.phpwp-mail.phpwp-settings.phpwp-signup.phpwp-trackback.phpxmlrpc.phplicense.txt,readme.html(not essential, but fine)
Do not overwrite:
wp-content/(this is your themes, plugins, uploads)wp-config.php- Any custom files your host added in root (things like
php.ini,.user.ini,web.config, etc.)
Where I disagree slightly with @mikeappsreviewer:
You don’t strictly need to delete the local wp-content folder. You can just be disciplined and don’t upload it. Personally I keep it and just uncheck/skip it in the FTP client, so I can compare default files later if something breaks.
3. FTP workflow on Mac (alt approach)
If you hate classic FTP windows, Commander One on macOS is a nice “dual pane” option:
- Left pane: connect via FTP/SFTP to your server, go to your WordPress root.
- Right pane: open the unzipped
wordpressfolder from wordpress.org. - In the right pane:
- Select:
wp-adminwp-includes- All core
.phpfiles in the root of that folder
- Explicitly do not select
wp-content.
- Select:
- Drag the selection from right → left.
- When asked:
- Action: Overwrite
- Apply to all
This is the same principle as what was already described, just more visual and a little harder to screw up if you’re nervous.
4. Clean up and finish
- Delete the
.maintenancefile if you created it. - Go to
/wp-admin/in your browser. - If you see a “Database Update Required” screen, click the button.
- Check:
- Front page loads
- Login works
- A couple key plugins still behave
5. If it white screens or dies
If it all goes sideways:
- Re-upload your backup of:
wp-adminwp-includes- Core root files
- Restore the DB backup.
- Confirm file permissions:
- Typically
755for folders,644for files.
- Typically
So: yes, you update via FTP by overwriting wp-admin, wp-includes, and core root PHP files, while leaving wp-content and wp-config.php alone. Use Commander One if you want a more Finder-like interface, and always have a backup before you start playing sysadmin at 2 a.m.
The other replies already nailed the how, so I’ll focus on what to replace, what not to touch, and a couple of ways to avoid bricking the site mid‑upload.
You’re on the right track: you only want to refresh WordPress core, not your content.
1. Files/folders you do replace
From the fresh WordPress download:
Upload & overwrite entirely:
wp-admin/wp-includes/
Upload & overwrite these root files if they exist in the download:
index.phpwp-activate.phpwp-blog-header.phpwp-comments-post.phpwp-cron.phpwp-links-opml.phpwp-load.phpwp-login.phpwp-mail.phpwp-settings.phpwp-signup.phpwp-trackback.phpxmlrpc.php- You can also overwrite
license.txtandreadme.html, they don’t affect functionality
That’s the core update in practice.
2. Files/folders you do not overwrite
This is where people usually panic in FTP and nuke their own site.
Do NOT overwrite:
wp-content/- Contains
themes/,plugins/,uploads/, sometimesmu-plugins/
- Contains
wp-config.php- Any host‑specific stuff in the root:
.htaccess.user.iniphp.iniweb.config- Custom backup or cache files the host dropped in there
Where I slightly disagree with @mikeappsreviewer: you don’t have to delete the local wp-content to be safe. It’s totally fine to keep it in the extracted folder and just don’t drag it during upload. That way if something goes weird later, you can compare default files to your live install.
@vrijheidsvogel is closer to how I actually do it: strict about what to copy, but I don’t bother with deleting the local stuff. I just train myself not to drag the wrong thing. Mildly risky if you’re tired, sure, but not rocket science.
3. Extra safety tricks that help when one‑click update times out
Timeouts often mean:
- Slow server or strict resource limits
- Big plugins/themes
- Old PHP version
A couple things that make manual updates less scary:
-
Backup bare minimum first
- Download
wp-content/ - Download
wp-config.php - Export DB via phpMyAdmin or a backup tool if it still loads
If something breaks, you can at least roll back.
- Download
-
Maintenance mode without plugins
- In your WordPress root, temporarily create
.maintenancewith:<?php $upgrading = time(); ?> - WordPress will show a maintenance screen instead of weird half‑updated errors.
- Remove this file when you’re done.
- In your WordPress root, temporarily create
-
Upload in this order
- Upload
wp-includes/first - Then
wp-admin/ - Then the root PHP files
It’s not absolutely required, but it tends to reduce strange partial‑update behavior.
- Upload
4. Mac‑specific angle: make your life less annoying
You can use Cyberduck or FileZilla, sure, but if you want something that feels more like Finder, Commander One is actually nice for this specific job:
- Dual‑pane view
- One pane = your Mac folder with the new WordPress files
- Other pane = your server’s WordPress directory
- Select
wp-admin,wp-includesand the core PHP files on the local side - Drag them straight over to the server side and choose “Overwrite for all”
That visual side‑by‑side makes it a lot harder to accidentally upload wp-content, which is the main way people blow up their themes and plugins.
5. After the FTP part
Once the upload is done:
- Delete
.maintenanceif you created it - Go to
https://yourdomain.com/wp-admin/ - If you see “Database update required,” click it and let it run
- Test:
- Home page
- Login
- One or two key plugins (cache, forms, ecommerce if you have it)
If anything breaks hard:
- Re‑upload your backed‑up
wp-admin,wp-includesand core root files - Restore the DB backup
- Then check with your host about why the one‑click upgrade is timing out in the first place, or consider bumping PHP / memory limits
So the short version you were asking for:
Replace
wp-admin,wp-includes, and the core PHP files in the root.
Leavewp-content,wp-config.php, and host‑specific files alone.
Use something like Commander One on your Mac to drag/overwrite cleanly.
Key thing everyone already circled: you’re updating core only, not your content. Let me just fill in a few gaps and edge cases they did not dwell on.
1. What I’d do before touching FTP
I slightly disagree with skipping backups “because it’s just core”:
- Dump the database from your host panel.
- Grab a copy of
wp-contentandwp-config.phpvia FTP. - Check PHP version vs the WP version you are installing. Old PHP is a classic silent-breaker.
This takes a few minutes and saves hours if the update exposes a shaky plugin.
2. What to do if you already half‑broke the site
If the dashboard is already stuck or you got a white screen:
- Rename the
pluginsfolder insidewp-contenttoplugins.off.
That disables everything at once without deleting. - Reupload the fresh
wp-adminandwp-includesfrom the new download. - Reupload the core root files like
wp-load.php,wp-settings.php,wp-login.phpand friends.
If it comes back, you know it was a mix of old core plus some plugin. Then rename plugins.off back to plugins and re-enable plugins one by one.
3. Files people forget that can cause weird behavior
Even when you correctly avoid overwriting wp-content and wp-config.php, check these:
.htaccess
If you ever pasted “speed” or “security” snippets from blogs, this can clash after an update. Temporarily rename it tohtaccess.offto test.- Must-use plugins in
wp-content/mu-plugins
These load before regular plugins and can break things immediately after a core update.
So if you still see HTTP 500 errors after a clean core upload, test with .htaccess disabled and mu-plugins temporarily renamed.
4. About using Commander One vs classic FTP apps
You already got detailed walkthroughs from @vrijheidsvogel, @shizuka and @mikeappsreviewer. I agree with most of that, but here’s a more opinionated comparison.
Commander One pros
- Dual pane feels like Finder, so it is easier to visually compare local “new WordPress” folder and remote site.
- Simple drag and overwrite workflow, good for seeing exactly what you are dropping on the server.
- Handles FTP / SFTP without a lot of configuration noise.
Commander One cons
- Not as feature heavy for power users as something like a dedicated FTP manager that has queue fine-tuning, sync tools and advanced bookmarks.
- If you are used to raw FTP clients (like the ones the others mentioned), Commander One can feel a bit “general file manager” rather than surgical.
I still like it for WordPress updates specifically because the side by side view makes it harder to accidentally drag wp-content, which is the number one catastrophic mistake.
5. If your transfers keep timing out too
Since your one‑click update is timing out, the same server limitations might affect FTP transfers:
- Change FTP client to use SFTP instead of FTP if available. Often more stable.
- Upload
wp-includesandwp-adminin smaller chunks instead of one giant transfer so you can retry specific folders. - If your host supports SSH, using a terminal upload (scp / rsync) is more robust than any GUI. Slightly more advanced, but far less fragile.
6. After the update: quick health check list
Once all the new files are up:
- Remove any
.maintenancefile if you created one. - Hit
/wp-admin/upgrade.phpdirectly if the dashboard does not prompt for a DB update. - Test:
- Front page
- A logged‑in page
- Admin listing for posts and plugins
- Any heavy plugin pages like ecommerce or form builders
If any specific page dies, look into its plugin first rather than assuming the core update is bad.
So in short: the others already nailed what to copy. I would just layer on strict backups, careful handling of .htaccess and mu‑plugins, and use Commander One’s dual panes to visually keep wp-content out of the drag so you do not nuke your themes and uploads.