web-dev-qa-db-fra.com

Comment créer un répertoire dans un dossier de plug-in?

Je crée un plugin dans WordPress Version 3.4.2. Lorsque l'administrateur soumet un formulaire, un nouveau dossier est créé dans le répertoire de mon plugin et un fichier est enregistré dans ce nouveau dossier.

Mais cela me donne l'erreur suivante:

error : The file has not been created 

$dir = plugins_url()."/folder-name/; 

Le code ci-dessus renvoie le chemin suivant:

http://localhost/website/wp-content/plugins/abc/folder-name

mkdir($dir, 0777, true);
1
Jassi Oberoi

N'utilisez pas le répertoire du plugin pour stocker de nouveaux fichiers.

  • Lors d’une mise à jour, le répertoire du plugin sera effacé par WordPress. Et tous les fichiers qu'il contient aussi.
  • Le répertoire du plugin peut être en lecture seule dans certaines configurations (je le fais toujours).

Utilisez le répertoire uploads régulier pour cela.

Et 0777 n'est jamais une bonne idée. L’accès en écriture pour tous n’est probablement pas ce que souhaitent vos utilisateurs.

4
fuxia

Vous pouvez utiliser plugin_dir_path dans votre plugin pour obtenir le chemin actuel dans le système de fichiers.

define( 'YOURPLUGIN_PATH', plugin_dir_path(__FILE__) );

code de la fonction elle-même

/**
 * 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

En bref: vous avez besoin d'un PATH, pas d'une URL

En long: Do not create répertoires dans votre dossier plugin (voir la réponse de Toscho). Utilisez la constante ´WP_CONTENT_DIR´ pour le chemin au lieu de plugins_url(). Cela créera le répertoire dans "wp-content" (sur une installation standrad). Peut-être définirez-vous un sous-répertoire dans lequel vous créerez les répertoires.

define( 'STORING_DIRECTORY', WP_CONTENT_DIR . '/my_plugin_storing_directory/' );
$dir = STORING_DIRECTORY . '/folder-name/';

Peut-être souhaitez-vous utiliser le répertoire de téléchargement pour créer vos répertoires. Alors vous devriez utiliser wp_upload_dir() pour obtenir le chemin.

$upload_dir = wp_upload_dir();
$dir = $upload_dir['basedir'] . '/folder-name/';
1
Ralf912