言葉足らずで申し訳ございません。
wp-config.php内にdefine( ‘FS_METHOD’, ‘direct’ );を記載したところフォルダ・ファイルは削除されました。
丁度この時にContact Form 7の6.1.3の更新が届いたので更新しました。
しかし「Contact Form 7 の更新中にエラーが発生しました: 古いプラグインを削除できませんでした。」となり、6.1.3が入リませんでした。FTPで確認するとplugins/contact-form-7フォルダを残して中のファイル・フォルダは削除されていました。
このことからdefine( ‘FS_METHOD’, ‘direct’ );を記載すると更新できなくなると判断しました。
対策としてfunctions.phpにuploads/wpcf7_uploads内のフォルダとファイルを削除するコードを追加して対応することにしました。
WPにアクセスがあったら、作成されてから3分経過したフォルダとファイルを削除させます。
これで暫く様子を見たいと思います。
色々とお手数をお掛けいたしました。
ありがとうございました。
ご報告ありがとうございます。まずは問題がひと段落されたようで、安心しました。
define('FS_METHOD', 'direct'); の指定によってアップデートができなくなるのは少し不思議ですね。
この定数はファイル操作の方式を直接書き込みに切り替えるもので、通常設定が direct なので、ホスティングされているAWS環境でデフォルト値が変更されていた可能性があります。
本来はプラグインの更新を妨げる要因にはなりにくいため、他の環境要因(ファイル権限やサーバ設定など)が影響していた可能性もありそうです。
(トピック主様には不要かもですが、未来の検索でたどり着いた人に向けて覚書として)
functions.php に削除処理を追加されたとのことですが、
もしテーマを今後更新される場合、その記述が上書きで消えてしまうことがあります。
そのため、子テーマに記述するか、mu-pluginsなどで独自の小さなプラグインとして管理されるのが安全かと思います。
また何か機会がありましたら、ぜひ解決のお手伝いをさせていただきたいです。
問題や課題の共有から経験の糧とさせていただけたらと思います。
こういう書き込みできないとか削除できないとの問題は、大抵パーミッションと、オーナー・グルーブの不整合によって起こります。
define( ‘FS_METHOD’, ‘direct’ );を指定したら書き込めた、ということは、Webサーバーの実行者権限(wwwとか、apacheとか、システム側のユーザー)で直接書き込みできるディレクトリに書き込めたということです。
それを指定する前のPHPのエラーログを見ると、FS_METHODがftpのときの挙動が失敗しています。ftpのユーザーはWebサーバーの実行ユーザーではなくて、あなた個人のFTPアカウント、つまりあなたのユーザー名になっているのではないかと思います。Webサーバーの実行ユーザーでないと書き込めないディレクトリに、あなたのユーザー名で書き込もうとしたのでエラーになったのです。
そして、define( ‘FS_METHOD’, ‘direct’ );を設定したのち、今度は「古いプラグインを削除できませんでした。」のエラーが出たのは、古いプラグインが、あなたのFTPユーザーがオーナーになっているファイルだからです。該当ディレクトリやファイルのパーミッションが755とか644とかだとすると、持ち主があなたのファイルに対して、他人であるWebサーバーは、読み込んで使うことはできるのでプラグインは動作するが、書き込んだり削除はできないので更新ができないという状態になります。
通常、WordPressのホスティングをしているホスティング会社のサーバーの場合、こういう不整合は起こりにくいように設計されていますが、自由度が高いVPSとかでサーバーを運用していると、自由すぎるがゆえに、そういう不整合が起こりやすいです。ソースは私自身。VPS上で運用している自社サーバーで、最初この問題で躓きました。つまりこれは、WordPressの問題でなく、サーバーの運用の問題です。サーバー管理者の人と、パーミッション等について、擦り合わせてください。