Une petite aide basique svp concernant l’ajout de paramètres PHP

  • WordPress :5.0
  • Statut : non résolu
10 sujets de 1 à 10 (sur un total de 10)
  • Auteur
    Messages
  • #2242901
    Mooks
    Participant
    Padawan WordPress
    87 contributions

    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 basique

    Voilà, 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é »;

    • Ce sujet a été modifié le il y a 3 mois par  Mooks.
    • Ce sujet a été modifié le il y a 3 mois par  Mooks.
    #2242910
    ouiouiphoto
    Participant
    Maître WordPress
    1445 contributions

    Bonjour

    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);

    #2242912
    Mooks
    Participant
    Padawan WordPress
    87 contributions

    On 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).

    • Cette réponse a été modifiée le il y a 3 mois par  Mooks.
    • Cette réponse a été modifiée le il y a 3 mois par  Mooks.
    #2242916
    ouiouiphoto
    Participant
    Maître WordPress
    1445 contributions

    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é »;

    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 😉

    #2242924
    Mooks
    Participant
    Padawan WordPress
    87 contributions

    Voici 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 3 mois par  Mooks.
    #2242931
    Mooks
    Participant
    Padawan WordPress
    87 contributions

    Je 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.

    • Cette réponse a été modifiée le il y a 3 mois par  Mooks.
    • Cette réponse a été modifiée le il y a 3 mois par  Mooks.
    #2242934
    ouiouiphoto
    Participant
    Maître WordPress
    1445 contributions

    Ok 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 3 mois par  ouiouiphoto.
    • Cette réponse a été modifiée le il y a 3 mois par  ouiouiphoto.
    #2242940
    Mooks
    Participant
    Padawan WordPress
    87 contributions

    La 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 3 mois par  Mooks.
    #2242956
    ouiouiphoto
    Participant
    Maître WordPress
    1445 contributions

    je 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

    #2242962
    Mooks
    Participant
    Padawan WordPress
    87 contributions

    Oui 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.

10 sujets de 1 à 10 (sur un total de 10)
  • Vous devez être connecté pour répondre à ce sujet.