- WordPress :5.0
- Statut : non résolu
- Ce sujet contient 9 réponses, 2 participants et a été mis à jour pour la dernière fois par Mooks, le il y a 5 années et 7 mois.
-
AuteurMessages
-
22 janvier 2019 à 11 h 44 min #2242901
Bonjour,
Ma configuration WP actuelle
- Version de PHP/MySQL : 7.2
- Thème utilisé : custom
- Nom de l’hébergeur : Infomaniak
Problème(s) rencontré(s) :
Bonjour,
Je butte depuis 2 jours sur quelquechose de très basique concernant PHP, et plus particulièrement sur le passage de paramètres au sein d’un fonction. Je vais pas vous faire un copier coller de ma grosse fonction à base de switch et foreach, je vais à la place prendre un exemple schématique de fonction que voici :
function ma_fonction() {
$var1 = "1";
$var2 = "2";
$var3 = "3";
}Fonction basiqueVoilà, c’est de manière très schématique ce que produit ma fonction : plusieurs variables que je souhaite réutiliser en écrivant : ma_fonction($var1) pour qu’elle echo la $var1, ma_fonction($var2) pour qu’elle echo la $var2, ma_fonction($var3) pour qu’elle echo la $var3.
Ca fait 2 jours que je sèche sur un truc aussi basique, une petite aide serait la bienvenue.
Merci d’avance.
PS : pour être bien sûr que vous me compreniez, je ne connais pas à l’avance la valeur de $var1, $var2 et $var3. Mais je souhaite les passer en paramètres dans la fonction afin d’aficher la valeur (qui est dynamique). Si $var1 = « actualité », ma_fonction($var1) devra exécuter : echo « actualité »;
22 janvier 2019 à 11 h 58 min #2242910Bonjour
C’est cela que tu cherche a faire, passage par référence plutôt que par valeur ?
function ma_fonction(&$a)
{
return $a;
}
$var1 = "1";
echo ma_fonction($var1);22 janvier 2019 à 12 h 04 min #2242912On est pas loin, je viens de faire un test assez concluant. Mais c’est le scope qui me dérange ici.
Dans ton exemple, $var1 est définie à l’extérieur de la fonction. Chez moi, toutes les variables sont définies dans la fonction. Ce que j’aimerais faire, c’est que cette fonction affiche la VALEUR d’une variable directement en la passant comme paramètres.
Comme expliqué dans mon post initial, tous les noms de variables générées sont connues, mais leur VALEUR EST INCONNUE. C’est pourquoi j’aimerais les appeler via ma_fonction($var1) ou ma_fonction($var2) afin qu’elle echo le string (c’est pas des arrays, ce sera que des strings).
22 janvier 2019 à 12 h 12 min #2242916Mais je souhaite les passer en paramètres dans la fonction afin d’aficher la valeur (qui est dynamique). Si $var1 = « actualité », ma_fonction($var1) devra exécuter : echo « actualité »;
C’est ce que fait le code que je t’ai donné tu remplace le return par un echo par exemple
function ma_fonction(&$a)
{
echo $a;
}
$var1 = "actualité";
ma_fonction($var1);Chez moi, toutes les variables sont définies dans la fonction.
Donc tu veux définir une variable dans une fonction et la passer en paramètre de la même fonction ? désolé je ne comprends pas 😉
22 janvier 2019 à 12 h 20 min #2242924Voici ma fonction actuelle (pas sûr de l’emplacement du return, mais c’est pas très important):
function get_tax_terms_for_the_product() {
// Get post by post ID.
if ( ! $post = get_post() ) {
return '';
}
// Get post type by post.
$post_type = $post->post_type;
// Get the singular_name of the cpt
$post_type_obj = get_post_type_object( $post_type );
// Get post type taxonomies.
$taxonomies = get_object_taxonomies( $post_type, 'objects' );
$out = array();
$out[] .= '<ul class=cpt-ul><li class="bloc-info-elements info-cpt">'.$post_type_obj->labels->singular_name.'</li></ul>';
foreach ( $taxonomies as $taxonomy_slug => $taxonomy ){
// Get the terms related to post.
$terms = get_the_terms( $post->ID, $taxonomy_slug );
// If tax is hierarchical
if( is_taxonomy_hierarchical( $taxonomy_slug )) {
if ( ! empty( $terms ) ) {
switch ($taxonomy_slug) {
case "tax-plates-formes":
$info_plates_formes[] .= '<ul class="ul-info-platesformes">';
break;
default:
$info_categories[] .= '<ul class="ul-info-categories">';
}
foreach ( $terms as $term ) {
if( $term->parent == 0 ) {
continue;
}
// We switch the HTML output in order to give them custom CSS classes
switch ($taxonomy_slug) {
case "tax-plates-formes":
$info_plates_formes[] .= '<li class="info-plateformes">'.$term->name.'</li>';
break;
default:
$info_categories[] .= '<li class="li-info-categories">'.$term->name.'</li>';
}
}
}
}
// If tax isn't hierarchical
else {
if ( ! empty( $terms ) ) {
switch ($taxonomy_slug) {
case "tax-annees-de-sortie":
$info_annee_sortie[] .= '<ul class="ul-info-annee-sorties">';
break;
case "tax-editeurs":
$info_editeurs[] .= '<ul class="ul-info-editeurs">';
break;
case "tax-modele-economique":
$info_modele_economique[] .= '<ul class="ul-info-modele-economique">';
break;
}
foreach ( $terms as $term ) {
// We switch the HTML output in order to give them custom CSS classes
switch ($taxonomy_slug) {
case "tax-annees-de-sortie":
$info_annee_sortie[] .= '<li class="info-annees-de-sortie">'.$term->name.'</li>';
break;
case "tax-editeurs":
$info_editeurs[] .= '<li class="info-editeurs">'.$term->name.'</li>';
break;
case "tax-modele-economique":
$info_modele_economique[] .= '<li class="info-modele-economique">'.$term->name.'</li>';
break;
}
}
}
}
} return;
}Le but serait donc de pouvoir afficher la valeur de $info_plates_formes, qui est un STRING, en appelant ma fonction de la sorte : get_tax_terms_for_the_product($info_plates_formes)… puis pouvoir afficher la valeur de $info_categories de la même manière, en appelant ma fonction comme cela : get_tax_terms_for_the_product($info_categories).
Merci en tout cas de l’effort pour essayer de suivre 😉
- Cette réponse a été modifiée le il y a 5 années et 7 mois par Mooks.
22 janvier 2019 à 12 h 36 min #2242931Je complète un peu ma réponse sinon tu vas peut-être pas t’y retrouver. Cette fonction me permet :
- de créer un « taxonomies_object » avec tous les termes attribués à l’article
- de générer les codes HTML de sortie en fonction de la taxonomie, et qui sont en fait les variables que je souhaite passer en paramètres
J’ai des taxonomies hiérarchiques et non hiérarchiques, et c’est pour cela que j’utilise la condition « is_taxonomy_hierarchical », afin d’afficher les parents quand il n’y a que des parents… et afficher uniquement les enfants lorsque la taxonomie est hiérarchique.
Pour répondre finalement à ta question : « Donc tu veux définir une variable dans une fonction et la passer en paramètre de la même fonction ? « , c’est un grand OUI! 😉 Je dirais même passer DES variables en paramètres, pas seulement une.
22 janvier 2019 à 12 h 44 min #2242934Ok je crois comprendre. Tu as une fonction qui calcule deux valeur ( $info_plates_formes et $info_categories). Et tu veux que cette fonction affiche soit la valeur de $info_plates_formes soit la valeur de $info_categories en passant comme argument la référence de la variable a afficher.
Je ne suis pas assez fort en PHP. Je me suis arreté au C 🙂 et plutôt que d’appeler la fonction comme cela je l’appellerais en passant le nom de la variable en string et ensuite en fonction de la string reçue j’afficherais le bon résultat. Ou alors avec un chiffre 1 ou 2 qui affiche soit l’un soit l’autre get_tax_terms_for_the_product(1)
- Cette réponse a été modifiée le il y a 5 années et 7 mois par ouiouiphoto.
- Cette réponse a été modifiée le il y a 5 années et 7 mois par ouiouiphoto.
22 janvier 2019 à 13 h 01 min #2242940La fonction calcule plus que deux valeurs en l’état, il y en a 2 pour les taxo hiérarchiques et 3 pour les non hiérarchiques. Mais il y en aura bien plus à termes, vu que je compte travailler avec une bonne dizaine de custom post type et leurs taxonomies associées.
Tu me dis, je te cite : « plutôt que d’appeler la fonction comme cela je l’appellerais en passant le nom de la variable en string et ensuite en fonction de la string reçue j’afficherais le bon résultat. »
Ça donnerais quoi sur une fonction simplifié, genre ça :
function get_tax_terms_for_the_product() {
// Get post by post ID.
if ( ! $post = get_post() ) {
return '';
}
// Get post type by post.
$post_type = $post->post_type;
// Get the singular_name of the cpt
$post_type_obj = get_post_type_object( $post_type );
// Get post type taxonomies.
$taxonomies = get_object_taxonomies( $post_type, 'objects' );
foreach ( $taxonomies as $taxonomy_slug => $taxonomy ){
// Get the terms related to post.
$terms = get_the_terms( $post->ID, $taxonomy_slug );
if ( ! empty( $terms ) ) {
// We switch the HTML output in order to give them custom CSS classes
switch ($taxonomy_slug) {
case "tax-plates-formes":
$info_plates_formes[] .= '<li class="info-plateformes">'.$term->name.'</li>';
break;
case "tax-categories":
$info_categories[] .= '<li class="info-categories">'.$term->name.'</li>';
break;
}
}
}
}La fonction a vraiment été simplifié, pour y voir plus plus clair. Je te demande encore ça, et en fonction de ta réponse je tenterais de me débrouiller avec. Merci en tous les cas.
- Cette réponse a été modifiée le il y a 5 années et 7 mois par Mooks.
22 janvier 2019 à 13 h 18 min #2242956je ferais une fonction get_tax_terms_for_the_product($a)
Puis je ferais un switch/case sur la valeur de $a pour afficher ce que je veux
22 janvier 2019 à 13 h 42 min #2242962Oui ca peut-être une solution intermédiaire, mais ça m’obligerait à mettre le switch à l’extérieur de ma fonction, soit dans le fichier ou se trouve ma fonction (en l’occurence functions.php), soit dans le single.php (là où la fonction est appelée). Je vais voir si je peux pas mettre un « include mypage.php » afin de ne déclarer ces variables que lorsque la fonction est appelée.
Merci, je vais tenter de me débrouiller avec ça. Je ne met pas le sujet en résolu de suite, je laisse le post ouvert au cas ou qqn aurait des solutions alternatives.
-
AuteurMessages
- Vous devez être connecté pour répondre à ce sujet.