- Statut : non résolu
- Ce sujet contient 15 réponses, 2 participants et a été mis à jour pour la dernière fois par
Guy, le il y a 13 années et 11 mois.
-
AuteurMessages
-
2 mai 2011 à 7 h 04 min #494493
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 WorpressMon 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
2 mai 2011 à 9 h 35 min #767653l’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?
2 mai 2011 à 9 h 48 min #767654Non, 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_levelC’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
2 mai 2011 à 10 h 19 min #767655tu 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?
2 mai 2011 à 10 h 26 min #767656Merci du conseil, je vais tenter cela cet AM et je vous tiens au courant.
2 mai 2011 à 14 h 03 min #767657quand 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_levelJ’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……
2 mai 2011 à 16 h 25 min #767658ben….
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.
3 mai 2011 à 7 h 05 min #767659Avec cette méthode, ça marche nickel.
Merci du conseil Guy
3 mai 2011 à 7 h 17 min #767660Y-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
3 mai 2011 à 7 h 26 min #767652C’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é.
3 mai 2011 à 7 h 34 min #767661Ok, 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
3 mai 2011 à 8 h 28 min #767662J’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… .
3 mai 2011 à 8 h 36 min #767663En 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
3 mai 2011 à 10 h 09 min #767664Je 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.3 mai 2011 à 10 h 40 min #767665Ta 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
-
AuteurMessages
- Vous devez être connecté pour répondre à ce sujet.