Test conditionnel (Créer un compte)

  • Statut : non résolu
15 sujets de 1 à 15 (sur un total de 15)
  • Auteur
    Messages
  • #563164
    HDCms
    Participant
    Chevalier WordPress
    149 contributions

    Bonjour,

    Ma configuration WP actuelle
    – Version de WordPress : 4.5.2
    – Version de PHP/MySQL : 5.5
    – Thème utilisé : sweetdate
    – Extensions en place : buddypress,paidmemberpro …
    – Nom de l’hebergeur : localhost
    – Adresse du site : en test

    Problème(s) rencontré(s) :

    Pour moi le problème vient de :

    if (in_array(bp_current_group_id(), $group_ids))

    pourtant je récupère bien la valeur de l’id du groupe de buddupress et un tableau des valeurs des groupes dont fait partie le membre connecté
    Merci pour votre aide

    add_action(‘get_header’,’redirect_groupe_page’);
    function redirect_groupe_page() { // 11/11/2015 – HD
    if (bp_is_group_home()) { // si page d’un groupe
    $user_id = get_current_user_id(); // Identifiant du membre connecté
    $NbrGrMembreId =bp_get_total_group_count_for_user($user_id); // Nbr de groupe du connecté
    //echo « NbrGrMembreId  » .$NbrGrMembreId;
    //global $bp;
    echo « bp_current_group_id() ». bp_current_group_id(); // a l’air de retourner le bon id
    $group_ids = groups_get_user_groups( bp_loggedin_user_id() ); // groupes dont fait partie le membre connecté
    //print_r($group_ids); // c’est bien un array ?
    if (in_array(bp_current_group_id(), $group_ids)) { // Si l’id du groupe affiché fait partie d’un groupe ou adhére le membre
    //echo « FAIT PARTIE GROUPE »;
    exit();
    }
    elseif ( …);
    exit(); }

    } // fin test si page d’un groupe

    #1055784
    Treenity
    Modérateur
    Maître WordPress
    777 contributions

    Bonjour,

    un peux plus d’info sur ce que provoque votre « problème » serais apprecié, je suppose que sois :
    – vous avez un erreur 500
    – la fonction ne se lance pas

    ?

    merci.

    #1055785
    HDCms
    Participant
    Chevalier WordPress
    149 contributions

    Bonsoir,
    désolé
    Pas d’erreur 500
    la fonction ne fonctionne pas
    Il passe automatique au elseif alors qu’il devrait passer dans le if puisque les conditions sont théoriquement requises. Ex:
    bp_current_group_id()=2
    $group_ids contient 1 & 2
    d’ou ma question sur petite type ou si je me trompe pas sur le fonctionnement de « in_array »
    n’étant pas un pro de php

    #1055786
    Treenity
    Modérateur
    Maître WordPress
    777 contributions

    Bonjour, effectivement in_array sert bien a vérifier si la valeur est presente en tant que valeur dans un array, exemple:

    $ids = array(« un », « deux », « trois »);
    if(in_array(« un », $ids)){
    echo « bien présent! »;
    }else{
    echo « pas présent »;
    }

    retournera bien « Bien présent! »
    parcontre :

    $ids = array(« un » => « ok », « deux » => « ok », « trois » => « ok »);
    if(in_array(« un », $ids)){
    echo « bien présent! »;
    }else{
    echo « pas présent »;
    }

    retournera pas présent, car in_array compare les valeures d’un array, et pas ses clefs.

    pour voir etre sur, ajoutez cette ligne apres :

    ……..
    $group_ids = groups_get_user_groups( bp_loggedin_user_id() ); // groupes dont fait partie le membre connecté
    echo « <pre>";
    print_r($group_ids);
    echo "</pre>« ;

    et vérifiez que cela vous renvoi bien un array dont les VALEURES sont des ids.

    #1055788
    HDCms
    Participant
    Chevalier WordPress
    149 contributions

    Bonjour
    Oui tu as raison

    bp_current_group_id()=2
    $group_ids= Array
    (
    [groups] => Array
    (
    [0] => 1
    [1] => 2
    )

    [total] => 2
    )

    alors comment comparer la valeur ?

    #1055787
    HDCms
    Participant
    Chevalier WordPress
    149 contributions

    Bonjour,
    Une idée pour faire cette comparaison avec ces variables !
    Merci

    #1055789
    Treenity
    Modérateur
    Maître WordPress
    777 contributions

    Bonjour,
    A la place du in_array() tu peux utiliser :

    if(isset($group_ids[« groups »]) && in_array(bp_current_group_id(), $group_ids[« groups »])){

    }

    #1055790
    HDCms
    Participant
    Chevalier WordPress
    149 contributions

    Bonjour,
    malheureusement cela ne fonctionne pas.
    J’avai testé aussi un comparatif sur les clefs mais je passe systematiquement au 2ème test elseif

    if (array_key_exists(bp_current_group_id(), $group_ids[« groups »])) { // Si l’id du groupe affiché fait partie d’un groupe ou adhére le membre
    echo « FAIT PARTIE GROUPE »;
    // exit();
    }
    /* elseif SI je l’active cela reste dans ce test

    #1055791
    Treenity
    Modérateur
    Maître WordPress
    777 contributions
    HDCms wrote:
    Bonjour,
    malheureusement cela ne fonctionne pas.
    J’avai testé aussi un comparatif sur les clefs mais je passe systematiquement au 2ème test elseif

    if (array_key_exists(bp_current_group_id(), $group_ids[« groups »])) { // Si l’id du groupe affiché fait partie d’un groupe ou adhére le membre
    echo « FAIT PARTIE GROUPE »;
    // exit();
    }
    /* elseif SI je l’active cela reste dans ce test

    C’est normal que ca ne marche pas avec ce code, et tant mieux car il serais faux.

    Parcontre je ne comprend pas pourquoi celui que je t’ai fourni ne marche pas, vérifi bien le nom des variables et des fonctions, car il devrais marcher, obligatoirement.

    Au besoin envoi moi tes identifiants FTP et fait moi un accès admin dans wordpress que je puisse tester ca en live.

    #1055792
    HDCms
    Participant
    Chevalier WordPress
    149 contributions

    Re
    ok super je t’envoi cela dès que je retrouvé les codes
    par mail ou mp ?
    si je remplace bp_current_group_id() par sa valeur, le test passe bien

    #1055794
    Treenity
    Modérateur
    Maître WordPress
    777 contributions

    Bon,

    mauvaise nouvelle, ayant l’habitude de bosser par FTP, mettre un wp_die quand on passe par l’editeur BO n’est pas une bonne idée…

    la bonne nouvelle c’est que je sais pourquoi ca ne marche pas

    #1055795
    Treenity
    Modérateur
    Maître WordPress
    777 contributions

    Donc voila le script marche, enfin pour l’instant à part écrire un message en haut de page ca ne fait pas grand chose 😉

    <?php

    add_action( 'init', 'redirect_groupe_page' );

    /**
    * redirect_groupe_page()
    * Check if user is member of the currently watched group page
    * @author Ronan Pozzi
    * @version 1.0
    */
    function redirect_groupe_page() {
    if ( is_admin() || ! function_exists( ‘bp_is_group_home’ ) || ! bp_is_group_home() ) {
    return;
    }

    /** @var int $user_id The current user id */
    $user_id = get_current_user_id();
    /** @var int $group_id The current group id(the one we currently watch)*/
    $group_id = bp_get_current_group_id();

    if ( groups_is_user_member( $user_id, $group_id ) ) {
    // If current user is a member of the current group, than…
    echo ‘<div class="alert alert-info">Vous faites partit de ce groupe</div>‘;
    }
    }

    Alors les problemes qu’il y avais :
    – le add_action(‘get_header’…), ne sachant pas ce que doit faire ce script, je l’ai mis sur un init plutot, mais il faudra penser cibler comme il faut le bon hook.(https://codex.wordpress.org/Plugin_API/Action_Reference/init)
    – Beaucoups de variables pour pas grand chose, wordpress et buddypress possede deja des fonctions pour faire ce que tu souhaitait, ca ne sert a rien de réinventer la roue 😉

    #1055793
    HDCms
    Participant
    Chevalier WordPress
    149 contributions

    Bonjour,
    SUPER 🙂 cela fonctionne
    C’est effectivement assez différent de ce que j’avai fait et cherché pendant des heures !!
    Enfin en le mettant dans bp-custom il a fallut quand même que je rebascule avec add_action(‘get_header’…)
    J’ai pas vu tellement de variables éliminées même si effectivement pas mal de test
    L’idée générale du script que je dois affiné, c’est de limiter l’adhésion à des groupes via paidmemberpro, mais je buttai sur le besoin d’afficher quand même le groupe BP si le membre en faisait déjà parti
    Encore merci
    @+

    #1055796
    Treenity
    Modérateur
    Maître WordPress
    777 contributions

    Je ne suis toujours pas convaincu de mettre cela en get_header, ce hook est prévu pour filtrer les scripts du head et pas vraiment pour faire du fonctionnel.
    Je pense plutôt que le problème vient de la façon dont vous chargez votre fichier bp-custom.

    #1055797
    HDCms
    Participant
    Chevalier WordPress
    149 contributions

    Bonjour,
    J’entends bien mais je viens de retester avec init mais cela ne fonctionne pas
    Et je ne comprends pas plus !!

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