一部の Hosting 構成では、WordPress サイトのオーナーとパーミッションが通常とは異なる設定になっています。
たとえば、ご利用の Hosting 構成では、PHP-FPM がユーザーアカウントとして動作する場合があります。その場合、PHP がファイルシステムにアクセスすると、PHP 自身の名前でファイルが作成されます。一方で WordPress には別のパーミッションが必要となることがあり、ギャラリーにアップロードされた画像がウェブサーバー名で作成されてしまいます。そのため、Staging サイトを作成した後にパーミッションエラーが発生することがあります。
WP Staging は、ファイルに対して 755、フォルダに対して 644 という WordPress 既定のパーミッションで Staging サイトを作成します。オーナーは Staging サイトを作成した PHP プロセスのユーザーです。
この問題を解消するには、以下の関数とフィルターを使い、Staging サイト作成後にそのオーナーとパーミッションを変更できます。
<?php
function changePermissionsAndOwner() {
$directory = '/path/to/your/directory';
$permissions = 0755;
$owner = 'username';
$group = 'groupname';
// Check if the path is a directory
if (is_dir($path)) {
// Create a RecursiveDirectoryIterator object
$directoryIterator = new RecursiveDirectoryIterator($path, RecursiveDirectoryIterator::SKIP_DOTS);
// Create a RecursiveIteratorIterator object
$iterator = new RecursiveIteratorIterator($directoryIterator, RecursiveIteratorIterator::SELF_FIRST);
// Iterate through each file and directory in the tree
foreach ($iterator as $item) {
// Change the permissions of the current item
chmod($item, $permissions);
// Change the owner and group of the current item
chown($item, $owner);
chgrp($item, $group);
}
// Change the permissions of the root directory
chmod($path, $permissions);
// Change the owner and group of the root directory
chown($path, $owner);
chgrp($path, $group);
} else {
echo "The path is not a directory.";
}
}
add_action('wpstg.clone_first_run', 'changePermissionsAndOwner', 10);
このコードは Staging サイトへの最初のログイン時に実行され、すべてのファイルを対応するパーミッションへ変更します。