2010-10-29 15 views
0

Donc, j'ai un thème Wordpress.Variables ne se reportant pas au fichier inclus dans un répertoire différent

Dans le fichier functions.php, j'écris une fonction qui ressemble à quelque chose comme ceci:

function my_function(){ 
    $var1 = 'apple'; 
    $var2 = 'orange'; 
    include get_bloginfo('stylesheet_directory').'/lib/fruits.php'; 
} 

Et le fichier fruits.php ressemble à ceci:

<?php 

echo "My brother's favorite fruit is an $var1, but my favorite fruit is an $var2."; 

?> 

Quand j'appelle my_function() quelque part dans mon thème, l'instruction echo dans fruits.php s'affiche à l'écran, mais les valeurs de $ var1 et $ var2 ne s'affichent pas. Ils sont simplement vides.

Maintenant, voici la partie étrange. Si je déménage fruits.php dans le même répertoire que functions.php, et changer l'instruction include my_function() à ceci:

include 'fruits.php'; 

les 2 variables affichent très bien.

Des idées sur ce qui pourrait être à l'origine de ce problème?

Pour votre information, j'ai essayé de définir le chemin d'accès fruits.php dans une variable puis essayer

include $path; 

en vain.

+0

Cela devrait fonctionner. Il y a quelques informations supplémentaires manquantes dans votre situtation. Le code sera inclus dans votre fonction afin que les variables soient accessibles. Étrange est que vous préférez le répertoire include avec wordpress 'stylesheet_directory' qui est une URL, pas un chemin de fichier donc il ne devrait pas être utilisé pour inclure des fichiers dans PHP. – webbiedave

+0

Merci webbiedave. Votre intuition était juste sur. J'ai changé le chemin d'inclusion pour utiliser la constante STYLESHEETPATH ​​à la place, et cela fonctionne maintenant parfaitement. Cela ressemble à un comportement étrange de la part de PHP. Dans mon code d'origine, il incluait le fichier, mais il ne contenait pas les variables. Pourquoi cela ne marcherait-il qu'à mi-chemin? Eh bien, peu importe, je m'en souviendrai dans le futur. Merci encore. – mjsiemer

Répondre

1

Vous ajoutez le répertoire include avec wordpress stylesheet_directory (plutôt que STYLESHEETPATH constante par exemple) qui est une URL, pas un chemin de fichier, il ne doit donc pas être utilisé pour inclure des fichiers dans PHP. Changez ceci pour inclure correctement le fichier.

1

Il y a un problème ici avec la portée des variables dans la fonction. Fondamentalement, vous avez un fichier, disons index.php dans lequel vous incluez le functions.php à partir d'un autre répertoire. En ce functions.php vous définissez deux variables dans une portée de fonction - ce qui signifie que les variables ne sont visibles que dans la fonction. De plus, cette fonction inclut le fichier fruits.php.

Depuis fruits.php est techniquement inclus par le index.php, il recherche les variables $var1 et $var2 au sein index.php et ils ont pas été là définis parce qu'ils ont été définis dans un cadre de la fonction. Fondamentalement, il cherche des variables qu'il ne peut pas voir.

Voici deux façons de résoudre ce:

Méthode 1:

Modifier la fonction de ce qui suit.

function my_function(){ 
    global $var1 = 'apple'; 
    global $var2 = 'orange'; 
    include get_bloginfo('stylesheet_directory').'/lib/fruits.php'; 
} 

De cette façon, vous obligez les variables de ne pas être visibles dans la fonction, mais d'être global, autrement dit d'être visible dans le fichier entier.

Méthode 2:

définir les variables à l'extérieur de la fonction.

$var1 = 'apple'; 
$var2 = 'orange'; 
function my_function(){ 
    include get_bloginfo('stylesheet_directory').'/lib/fruits.php'; 
} 

Pour plus d'informations sur la portée des variables, vous pouvez aller ici http://php.net/manual/en/language.variables.scope.php

Hope this helps.

+0

Votre instruction 'elle recherche les variables $ var1 et $ var2 dans index.php' est incorrecte. Puisque OP inclut le fichier dans la fonction, il hérite de la même portée que la fonction. De plus, vous ne pouvez pas effectuer d'assignations avec le mot-clé global comme vous essayez de le faire dans la méthode 1. Votre méthode 2 s'assurera que les variables ne seront pas accessibles au code inclus car elles sont déclarées en dehors de la fonction. – webbiedave

+0

Qu'est-ce que OP? En ce qui concerne la méthode 2, je ne suis pas d'accord. Si dans 'functions.php' vous déclarez deux variables' $ var1' et '$ var2' et dans' index.php' vous faites 'require_once (" dir/functions.php ")' alors les deux variables sont aussi déclarées dans ' index.php' et donc 'fruits.php' peuvent y accéder. Je vais essayer le code aujourd'hui pour les deux méthodes pour voir si PHP donne des erreurs dans les deux sens. Je vais modifier la réponse pour que les gens sachent ce qui s'est passé. – miki725

+0

Merci pour votre réponse détaillée. Webbiedave avait raison, cependant, dans son commentaire original à moi. S'il vous plaît voir ci-dessus. – mjsiemer