web-dev-qa-db-ja.com

プラグインフォルダにディレクトリを作成する方法

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);
1
Jassi Oberoi

新しいファイルを保存するためにプラグインディレクトリを使用しないでください。

  • 更新中にプラグインディレクトリはWordPressによって消去されます。そしてそれに含まれるすべてのファイルも。
  • プラグインディレクトリは設定によっては読み取り専用になるかもしれません(私はいつもそうします)。

そのためには 通常のアップロードディレクトリ を使用してください。

そして0777は決して良い考えではありません。全員への書き込みアクセス権は、おそらくあなたのユーザーが望むものではありません。

4
fuxia

プラグインで 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 ) );
    }
1
Butuzov

つまり、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/';
1
Ralf912