You click Install or Update and WordPress answers with a short line: "Destination folder already exists", "Could not create directory", "Another update is currently in progress", a form asking for FTP details, or "The package could not be installed". Each line points at one cause, and none of them means your site's content is in danger: posts, pages and settings live in the database, not in the plugin's folder. Below is a rebuilt example (not a real client), then what each message means and the fix for it.
wp-content/plugins/ (themes: wp-content/themes/), rename the folder named in the message, say booking-pro to booking-pro-old, then install again. Its settings come back on activation because they were in the database all along. Delete the -old folder once everything works.755 and files 644); or the files belong to a different system user than the one the site runs as, common after a move or after files were uploaded by another account. Permissions you can set in the file manager; ownership the host fixes in a minute if you ask for it in those words. The folder wp-content/upgrade must be writable too, since every update unpacks there first.define('FS_METHOD', 'direct'); to wp-config.php only hides the form; if the ownership is still wrong, the next install fails with "Could not create directory" instead.core_updater.lock, and it expires after 15 minutes. If an update was interrupted (a closed tab, a timeout) and you cannot wait, take a database backup and delete that one row in phpMyAdmin, or run wp option delete core_updater.lock if the host has WP-CLI. Then run the update once, and let it finish.| What you see | Usual cause | Usual fix |
|---|---|---|
| "Destination folder already exists." | A folder of that name is already there: a working copy, or a leftover from a failed install | "Replace current with uploaded", or rename the leftover folder and install again |
| Plugin vanished, "Plugin file does not exist" | An update stopped half-way and left a partial folder | Rename the folder, install a fresh copy, activate |
| "Could not create directory." / "Could not copy file." | Disk full, wrong permissions, or wrong file owner | Free space, 755/644, ask the host to fix ownership |
| A form asking for FTP details | WordPress cannot write files as itself | Correct ownership; FS_METHOD alone only hides it |
| "Another update is currently in progress." | Core update lock, set by a running or interrupted update | Wait 15 minutes, or delete the core_updater.lock row after a backup |
| "No valid plugins were found." / "missing the style.css stylesheet" | Uploaded a bundle zip, or a theme as a plugin | Upload the inner product zip in the right screen |
| "Download failed." cURL error 28 or 6 | Server cannot reach the download address | Retry once; repeating = host firewall or DNS |
| "exceeds the upload_max_filesize directive" | Zip larger than the host's upload limit | Raise the limit or install through the file manager |
777 to make an error go away. It lets any process on the server write into your site, which is how many sites get spam injected.Most of these take minutes once the message is read correctly; ownership needs one message to the host. If you would rather hand it over, that is what the box below is for. Related: a plugin that breaks the site after it installs, "Briefly unavailable for scheduled maintenance" and "There has been a critical error".