web-dev-qa-db-fra.com

Wordpress obtenir le répertoire du plugin

Existe-t-il une fonction qui renverrait le chemin complet de mon plugin dans WordPress?

Exemple est

path/wp-contents/plugins/myplugin

J'ai essayé plugin_dir_path(__FILE__) mais renvoie le répertoire en cours.

29
Cindy93

Ouais selon la description de plugin_dir_path il vous donnera le chemin actuel du fichier du plugin. Mais selon ce que vous demandez ici, vous pouvez faire quelque chose comme ci-dessous, malheureusement, pas de manière directe,

$plugin_dir = ABSPATH . 'wp-content/plugins/plugin-folder/';
25
Rikesh

Je suggérerais d'utiliser une constante interne WordPress pour résoudre ce cas:

$my_plugin = WP_PLUGIN_DIR . '/my-plugin';

if ( is_dir( $my_plugin ) ) {
    // plugin directory found!
}

Alternative

L'autre alternative valable consiste à calculer le chemin à partir de l'URL, ce qui est plus complexe/déroutant. Je n'utiliserais pas ce code:

$plugins_url = plugins_url();
$base_url = get_option( 'siteurl' );
$plugins_dir = str_replace( $base_url, ABSPATH, $plugins_url );
// Now $plugins_dir is same as the WP_PLUGIN_DIR constant.

$my_plugin = $plugins_dir . '/my-plugin';

Mon opinion dans ce cas est la suivante: Utilisez la constante WP_PLUGIN_DIR

38
Philipp

Code pour le chemin racine du plugin

$dir = plugin_dir_path( __FILE__ );
// Example: /home/user/var/www/wordpress/wp-content/plugins/my-plugin/

Code pour le chemin du plugin

echo  WP_PLUGIN_DIR.'/plugin-name';
13
Vivek Tamrakar

Ma solution a été d'utiliser à l'intérieur plugin_dir_pathDIR 

plugin_dir_path( __DIR__ ) . $path_inside_plugin_folder;

Ce qui précède devrait vous donner le chemin absolu de votre dossier de plug-ins sur le serveur. Vous pouvez ensuite charger votre variable avec n’importe quel fichier de votre dossier de plug-in.

3
Jbro

Malheureusement, la plupart des réponses semblent oublier une chose importante. 

Excepté le répertoire plugins, les plugins peuvent également figurer dans doit utiliser les plugins dir

Pour cette raison, nous devons vérifier plusieurs répertoires. Exemple de fonction 

function get_plugin_dir_path($pluginFolderName){

    if ( defined( 'WPMU_PLUGIN_DIR' ) && file_exists( trailingslashit( WPMU_PLUGIN_DIR ) . $pluginFolderName ) ) {
        return trailingslashit( WPMU_PLUGIN_DIR ) . $pluginFolderName;
    } elseif ( defined( 'WP_PLUGIN_DIR' ) && file_exists( trailingslashit( WP_PLUGIN_DIR ) . $pluginFolderName ) ) {
        return trailingslashit( WP_PLUGIN_DIR ) . $pluginFolderName;
    }
    return false;

}
2
Maciej Paprocki

Voici une solution, quand vous n'êtes pas à la racine du plugin:

A partir de maintenant avec 4.7.5, WordPress n'a pas une fonction get_plugins_root () comme il existe une fonction get_theme_root (). C'est probablement parce que vous ne devriez vraiment jamais avoir besoin de modifier les plugins à partir de votre thème, et le répertoire racine des plugins ne change jamais.

Cependant, cela peut être utile si vous devez affecter par programmation des plug-ins lors du développement de thèmes.

Simplement, comme le fait WP pour la racine du thème:

$plugin_root = WP_CONTENT_DIR . '/plugins';

Ou, si vous avez besoin d’une fonction, pourquoi ne pas la faire de la même façon que WordPress la fait pour la racine du thème?

Copiez simplement la fonction get_theme_root () à partir de wp-includes/theme.php et collez-la dans le fichier functions.php de votre thème, renommez la fonction en get_plugins_root (), simplifiez-la 'thème' à 'plugins' dans la fonction ... 

get_plugins_root() {

    $plugins_root = WP_CONTENT_DIR . '/plugins';

    /**
     * Filters the absolute path to the plugins directory.
     *
     * @since now
     *
     * @param string $plugins_root Absolute path to plugins directory.
     */
    return apply_filters( 'plugins_root', $plugins_root );
}

Avec le chemin, vous pouvez maintenant ajouter le nom du dossier des plug-ins que vous souhaitez affecter.

$the_plugin_root = get_plugins_root()."/the-plugin-name/";
1
i_a

plugin_dir_path( __FILE__ ) vous donnera le plugin chemin du fichier actuel.

cela signifie que si vous appelez cette fonction comme cela se trouve dans "your_plugin_dir/sub_dir/file.php" retournera "your_plugin_dir/sub_dir /"

si vous voulez obtenir le RACINE de votre répertoire de plugin, changez simplement __FILE__ en __DIR__

plugin_dir_path( __DIR__ )
1
Rio Adetya Rizky

Comme indiqué dans la section Common Usage de URL du plugin page de référence de la fonction, c'est ce qui a fonctionné pour moi:

Si vous utilisez la fonction plugins_url () dans un fichier imbriqué dans un sous-répertoire de votre répertoire plugin, vous devez utiliser la fonction dirname () de PHP:

echo plugins_url('', dirname(__FILE__) );

La sortie pour ceci était: 

http://domain/app/wp-content/plugins/my-plugin

Le fichier qui a appelé la fonction était mon functions.php dans includes. Le chemin d'accès complet à mon fichier était:

http://domain/app/wp-content/plugins/my-plugin/includes/functions.php
1
Brosig

Je vais suggérer le code suivant. si vous accédez à cette fonction depuis n’importe quel sous-dossier. 

plugins_url( 'images/logo.png' , dirname(__FILE__ ));
0
Lakin Mohapatra

Un peu tard pour cette soirée mais juste quelques autres trébuche sur ce point.

plugin_dir_path(__FILE__) Renverra toujours le chemin actuel (où se trouve le fichier qui l’appelle) .__ Si vous voulez que la racine l’utilise, utilisez le code ci-dessous

plugin_dir_path( dirname( __FILE__ ) )

Vous pouvez alors définir une constante 

define( 'YOUR_PLUGIN_DIR', plugin_dir_path( dirname( __FILE__ ) ) );
require_once YOUR_PLUGIN_PATH . 'includes/admin-page.php'
require_once YOUR_PLUGIN_PATH . 'admin/classes.php'
0
decoder88

Vous pouvez définir une variable dans votre fichier Php principal. Il devrait être à la racine de votre dossier de plugin . Le fichier devrait être ici: .../wp-content/plugins/plugin-folder/my-plugin.php

Vous pouvez ajouter dans le fichier cette ligne.

    define( 'MYPLUGIN__PLUGIN_URL', plugins_url('', __FILE__ ) );

Après que vous puissiez utiliser votre nouvelle variable n'importe où dans votre plugin.

    public function Test() 
    {   
            $folder2 = MYPLUGIN__PLUGIN_URL . '/folder1/folder2/';
           // $folder2 = .../wp-content/plugins/plugin-folder/folder1/folder2/
    }

J'espère que ça va aider quelqu'un.

0
M07