API WordPress (Créer un compte)

  • Statut : non résolu
15 sujets de 1 à 15 (sur un total de 16)
  • Auteur
    Messages
  • #494493
    cboucher
    Participant
    Initié WordPress
    9 contributions

    Bonjour,

    Ma configuration WP actuelle
    – WordPress 3.1.2 :
    – PHP 5.3 :

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

    J’utilise actuellement les fonctions de l’API WordPress pour créer des blogs.

    J’ai mis en en-tête PHP les includes suivants

    define(‘WP_USE_THEMES’, false); //Utilisation d’un thème
    define(‘WP_INSTALLING’, true); //Passage en mode installation
    require(‘/var/www/wp-load.php’); //Chargement de l’API Worpress

    Mon problème est rencontré lorsque je souhaite ajouter ou supprimer un utilisateur à ses blogs avec les méthodes
    add-user-to-blog() et remove-user-to-blog()[b/]

    Les paramètres transmises aux méthodes sont bonnes mais, bizarrement il injecte toujours mes utilisateurs dans le site principal et non dans les Blogs. Je ne comprend pas pourquoi. Y-a-t-il quelque-choses à définir avant d’utiliser ces deux méthodes. L’Id_blog utilisé est bien celui du blog et non celui du site.

    Merci

    #767653
    Guy
    Participant
    Maître WordPress
    14817 contributions

    l’exemple donné dans l’API WordPress est

    <?php
    $userid = 1;
    $blogid = 5;
    $role = ‘administrator’;
    if ( add_user_to_blog( $blogid, $userid, $role ) )
    { echo ‘Added user ‘.$userid.’ as ‘.$role.’ to blog ‘.$blogid.’.’; }
    else
    { echo ‘Failed to add user ‘.$userid.’ as ‘.$role.’ to blog ‘.$blogid.’.’; }
    ?>

    ça ne marche pas?

    #767654
    cboucher
    Participant
    Initié WordPress
    9 contributions

    Non, lorsque je fais cela il m’injecte mon utilisateur dans les utilisateurs du site principal du blog et non dans les utilisateurs du blog. C’est ce que je ne comprend pas. Je m’explique :
    $siteId = 1;
    $userId = 3;
    $blogId = 4;
    $role = ‘administrator’;

    si je fais un add_user_to_blog($blogId, $userId, $role);

    Je me retrouve avec userid attaché à $siteId(1) et non à $blogId(4)
    Dans la table wp_usermeta de ma base de donnée WordPress, il m’injecte :
    wp_capabilities au lieu de wp_4_capabilities
    wp_user_level au lieu de wp_4_user_level

    C’est ce que je ne comprend pas. J’ai exactement le même soucis lors de la suppression, il me supprime l’utilisateur dans le site et non dans le blog

    #767655
    Guy
    Participant
    Maître WordPress
    14817 contributions

    tu as vérifié les paramètres en entrée de la fonction?
    quelque chose du genre global $blogId; si l’id n’est pas passé en paramètre de la focntion appelante?

    il faut peut être switcher sur le blog pour le faire (mais je ne suis pas certain)

    <?php switch_to_blog($blogId)

    add…

    restore_current_blog();
    ?>

    sinon as tu essaye de l’ajouter « manuellement »?

    quelque chose du genre

    global $wpdb;
    $user = new WP_User($user_id);
    $cap_key = $wpdb->prefix . $blog_id. ‘_’ . ‘capabilities’;
    $user->_init_caps($cap_key);
    $user->set_role($role);

    et est ce que cela retourne une erreur?

    #767656
    cboucher
    Participant
    Initié WordPress
    9 contributions

    Merci du conseil, je vais tenter cela cet AM et je vous tiens au courant.

    #767657
    cboucher
    Participant
    Initié WordPress
    9 contributions

    quand je teste

    global $wpdb;
    $user = new WP_User($user_id);
    $cap_key = $wpdb->prefix . $blog_id. ‘_’ . ‘capabilities’;
    $user->_init_caps($cap_key);
    $user->set_role($role);

    Il ne me génère pas d’erreur mais ne me crée pas ce qu’il faut dans la table

    il me génère bien wp_20_capabilities
    il ne me génère pas wp_20_user_level mais wp_user_level

    J’ai tenté de rajouter une ligne
    $cap_key = $wpdb->prefix . $blog_id. ‘_’ . ‘user_level’;
    $user->_init_caps($cap_key);

    cela ne change rien

    Les switchs non plus, d’ailleur il est déjà intégré à la méthode add_user_to_blog()

    Pourtant dans l’API de wordpress ils font la même chose.

    Je me demande si il ne me manque pas une variable globale ou quelque-chose……

    #767658
    Guy
    Participant
    Maître WordPress
    14817 contributions

    ben….

    oui le switch est déjà intégré :(

    peut-être essayer de forcer le changement avant d’appeler la fonction

    global $wpdb;
    $wpdb->set_blog_id($blogId);
    add_user_to_blog($blogId, $userId, $role);

    c’est pas très clean, il y a forcement une explication à rechercher dans le code.

    #767659
    cboucher
    Participant
    Initié WordPress
    9 contributions

    Avec cette méthode, ça marche nickel.

    Merci du conseil Guy

    #767660
    cboucher
    Participant
    Initié WordPress
    9 contributions

    Y-a-t-il comme généralement sur les forums une action à faire pour passer le sujet en résolu. Je ne vois rien à ce sujet

    #767652
    Guy
    Participant
    Maître WordPress
    14817 contributions

    C’est seulement les admins et modérateurs qui le peuvent.

    Je ne sais pas si c’est vraiment résolu, c’est du forçage, et ce n’est pas ce qui est prévu dans l’API ou alors cela m’avait échappé.

    #767661
    cboucher
    Participant
    Initié WordPress
    9 contributions

    Ok, si tu trouves une explication j’aimerais bien comprendre également. Je cherche de mon côté car dans les méthodes utilisés dans la parties Admin de wordpress il n’y a pas cette commande, et ça marche.

    Je mettrai un message si je trouve l’explication. Merci de ton aide

    #767662
    Guy
    Participant
    Maître WordPress
    14817 contributions

    J’ai regardé la fonction switch_to_blog(), je ne trouve rien de spécial et elle fait appel également à set_blog_id().
    La seule chose qui pourrait expliquer est que tu utilises le même nom de variable ($blog_id), elle est globale dans la fonction switch_to_blog() et bien sur, si l’id du nouveau blog est égal à celui de l’ancien, la fonction ne fait rien.

    Si c’est cela, c’était bien un bug, sinon… .

    #767663
    cboucher
    Participant
    Initié WordPress
    9 contributions

    En fait, la fonction fait quelque chose, elle insert l’utilisateur en question dans le site dont dépend le blog.
    Avant d’exécuter la commande, j’affiche mes variables et elles sont bonnes.

    Si c’est un bug, comment cela peu fonctionner avec la page d’administration de WordPress ????

    Pour moi, l’erreur vient de mon programme, mais je ne trouve pas où. Peut-être une variable ou une constante qui n’est pas renseignée correctement

    #767664
    Guy
    Participant
    Maître WordPress
    14817 contributions

    Je pensais à un bug dans ton programme, pas dans WordPress 🙂
    Est ce que tu as vérifié que tu n’utilises pas la même variable que WP, la variable $blog_id, si tu la renseignes avant l’appel à add_user_to_blog… qui appelle switch_to_blog, il peut y avoir risque de confusion.
    Sinon voir du coté de quelque chose qui serait appelé avant, lockerait la base sur le blog 1 et qui demanderait un release quelquonque.

    #767665
    cboucher
    Participant
    Initié WordPress
    9 contributions

    Ta remarque sur la variable m’a bien aidé, en effet, j’utilisais la variable $blog_id pour définir l’id de mon blog, je viens de la remplacer par $blogid et là, ça marche.

    Merci de ton aide Guy. En effet, je préfère que cela fonctionne sans bidouille

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