WordPressバージョン3.4.2でプラグインを作成しています。管理者がフォームを送信すると、プラグインディレクトリ内に新しいフォルダが作成され、その新しいフォルダにファイルが保存されます。
しかし、それは私に次のエラーを与えます:
error : The file has not been created
$dir = plugins_url()."/folder-name/;
上記のコードは次のパスを返します。
http://localhost/website/wp-content/plugins/abc/folder-name
mkdir($dir, 0777, true);
新しいファイルを保存するためにプラグインディレクトリを使用しないでください。
そのためには 通常のアップロードディレクトリ を使用してください。
そして0777
は決して良い考えではありません。全員への書き込みアクセス権は、おそらくあなたのユーザーが望むものではありません。
プラグインで plugin_dir_path を使用すると、ファイルシステム内の現在のパスを取得できます。
define( 'YOURPLUGIN_PATH', plugin_dir_path(__FILE__) );
機能自体のコード
/**
* Gets the filesystem directory path (with trailing slash) for the plugin __FILE__ passed in
* @package WordPress
* @subpackage Plugin
* @since 2.8
*
* @param string $file The filename of the plugin (__FILE__)
* @return string the filesystem path of the directory that contains the plugin
*/
function plugin_dir_path( $file ) {
return trailingslashit( dirname( $file ) );
}
つまり、URLではなくPATHが必要です。
つまり、プラグインフォルダにディレクトリを作成しないしない(Toschoの答えを参照)。パスにはplugins_url()
の代わりに定数WP_CONTENT_DIRを使用してください。これにより、 'wp-content'内にディレクトリが作成されます(標準インストールの場合)。たぶんあなたはあなたがディレクトリを作成するサブディレクトリを定義するでしょう。
define( 'STORING_DIRECTORY', WP_CONTENT_DIR . '/my_plugin_storing_directory/' );
$dir = STORING_DIRECTORY . '/folder-name/';
たぶんあなたはあなたのディレクトリを作成するためにアップロードディレクトリを使いたいでしょう。あなたはパスを得るためにwp_upload_dir()
を使うべきです。
$upload_dir = wp_upload_dir();
$dir = $upload_dir['basedir'] . '/folder-name/';