Des plugins dans des répertoires symlink?

19

Lorsque je développe des plugins, je les teste sur plusieurs versions de WordPress en faisant un lien symbolique avec le répertoire de mes plugins dans les différents répertoires wp-content . C’est formidable, car je n’ai à éditer les fichiers qu’une seule fois, mais cela rompt une construction importante pour générer des références aux ressources de mon plugin: __FILE__ fait référence à l’emplacement du plugin physique, pas à celui de wp-content . Comment dois-je résoudre ce problème?

La structure de mon répertoire ressemble à ceci:

  • /path/to/wordpress/development/dir/
    • plugin-development/
      • monkeyman-rewrite-analyzer/
        • monkeyman-rewrite-analyzer.php
        • js/
          • monkeyman-rewrite-analyzer.js
    • versions/
      • 3.1/
        • wp-content/
          • plugins/
            • monkeyman-rewrite-analyzer en tant que lien symbolique vers le plugin ci-dessus
      • 3.1-multi-dir/
        • wp-content/
          • plugins/
            • monkeyman-rewrite-analyzer en tant que lien symbolique vers le plugin ci-dessus
      • 3.1-multi-domain/
        • wp-content/
          • plugins/
            • monkeyman-rewrite-analyzer en tant que lien symbolique vers le plugin ci-dessus

Si je veux mettre en file d'attente le fichier Javascript, je devrais utiliser plugins_url( 'monkeyman-rewrite-analyzer.js', [base file] ) , mais utiliser __FILE__ ici ne fonctionnera pas, car le chemin d'accès au fichier réel sera /path/to/wordpress/development/dir/plugin-development/monkeyman-rewrite-analyzer/monkeyman-rewrite-analyzer.php et non /path/to/wordpress/development/dir/versions/*/wp-content/plugins/monkeyman-rewrite-analyzer/monkeyman-rewrite-analyzer.php . Par conséquent, WordPress ne peut pas supprimer le fichier. la première partie et générer une URL relative à l’installation de WordPress.

    
posée Jan Fabry 20.04.2011 - 12:13

4 réponses

6

Le problème peut être partiellement résolu avec un plugin indispensable à utiliser dans le filtre plugins_url .

Il ne gérera pas tous les autres cas d'utilisation de plugin_basename() , tels que register_activation_hook() et co.

Plus d'infos: enlace

    
réponse donnée scribu 20.04.2011 - 12:56
3

J'utilise actuellement une astuce pour obtenir l'emplacement du fichier relatif à WordPress: wp_get_active_and_valid_plugins() renvoie les chemins d'accès aux fichiers et wp_settings.php les parcourt et inclut les fichiers . Ainsi, la variable globale $plugin fera référence à votre plugin actuel (bien sûr, uniquement lorsque le plugin est chargé, je l’enregistre donc dans une variable globale préfixée):

$monkeyman_Rewrite_Analyzer_file = $plugin;

Parce que les plugins peuvent également être chargés en tant que plugins incontournables ou réseau et ces boucles utilisent d'autres noms de variables , le code complet ressemble à ceci:

$monkeyman_Rewrite_Analyzer_file = __FILE__;
if ( isset( $mu_plugin ) ) {
    $monkeyman_Rewrite_Analyzer_file = $mu_plugin;
}
if ( isset( $network_plugin ) ) {
    $monkeyman_Rewrite_Analyzer_file = $network_plugin;
}
if ( isset( $plugin ) ) {
    $monkeyman_Rewrite_Analyzer_file = $plugin;
}

Le repli est toujours __FILE__ . Ainsi, si quelqu'un modifie le nom de la variable de boucle à l'avenir, mon code devrait toujours fonctionner pour 99% des installations, seule la configuration de mon développement échouera et je pourrai facilement publier une nouvelle version.

    
réponse donnée Jan Fabry 20.04.2011 - 12:22
0

Un commentaire dans le bogue 46260 suggère d'utiliser $_SERVER["SCRIPT_FILENAME"] au lieu de __FILE__ . Est-ce que ça marche?

    
réponse donnée fuxia 20.04.2011 - 12:22
0

$_SERVER["SCRIPT_FILENAME"] fonctionne si vous l'utilisez correctement. Vous devez simplement l'utiliser pour définir un chemin de base, puis inclure vos fichiers en utilisant un chemin relatif à ce chemin de base.

Quelque chose comme:

$plugin_dir = dirname($_SERVER["SCRIPT_FILENAME"]);
$myFile = $plugin_dir."/includes/js/myJavascriptFile.js";

Remarque, ceci est plus utile lorsque vous n'avez pas encore accès à wp-blog-header.php (c'est-à-dire lors du traitement d'une demande de formulaire basée sur ajax)

    
réponse donnée Chad Furman 24.03.2012 - 17:06

Lire d'autres questions sur les étiquettes