En désespoir de cause, je demande aussi de l'aide sur ce forum - si quelqu'un (TOUJOURS!) Pouvait jeter un coup d'œil à ce billet et voir s'il pouvait m'aider, je serais éternellement reconnaissant
http://wordpress.org/support/topic/wp_update_user-not-updating?replies=11
Fondamentalement, je mets à jour le rôle et les fonctionnalités d'un utilisateur via un script, mais les modifications ne s'appliquent que (l'utilisateur peut voir des éléments de menu spécifiques) lorsque j'entre dans cet utilisateur et clique sur "enregistrer".
Merci d'avance !!
Chris
UPDATE:
Peut-être que cela aide à le résoudre?
Ceci est l'objet WP_User que j'ai répercuté à l'écran lorsque je me suis connecté en tant qu'utilisateur nouvellement modifié :
WP_User Object ( [data] => stdClass Object ( [ID] => 130 [user_login] => test [user_pass] => $P$BuHO1ABLCNQ716tktgyes4jqqkfVxG. [user_nicename] => test [user_email] => [email protected] [user_url] => [user_registered] => 2012-07-19 12:07:52 [user_activation_key] => [user_status] => 0 [display_name] => test ) [ID] => 130 [caps] => Array ( [editor] => 1 ) [cap_key] => wp_capabilities [roles] => Array ( [0] => editor ) [allcaps] => Array ( [upload_files] => 1 [unfiltered_html] => 1 [edit_posts] => 1 [edit_published_posts] => 1 [publish_posts] => 1 [edit_pages] => 1 [read] => 1 [level_7] => 1 [level_6] => 1 [level_5] => 1 [level_4] => 1 [level_3] => 1 [level_2] => 1 [level_1] => 1 [level_0] => 1 [edit_published_pages] => 1 [publish_pages] => 1 [manage_options] => 1 [view_menu] => 1 [editor] => 1 ) [filter] => )
Voici comment l’élément de menu est créé dans mon fichier de plugin (qui doit être affiché à l’utilisateur):
add_menu_page('Welcome', 'Welcome','edit_posts', 'welcome', 'welcome_page', get_bloginfo('template_url').'/images/icon.png', 0);
Il s'agit de la fonction/page à laquelle l'élément de menu renvoie:
function welcome_page()
{
global $currrent_user;
if(!current_user_can('edit_posts'))
{
print '<div class="wrap"><h2>Your account has been restricted, most likely due to an unpaid subscription.</div>';
}
else
{
include 'welcome-page.php';
}
}
Comme vous pouvez le constater, l'utilisateur n'a besoin que de la fonction edit_posts pour afficher l'élément de menu et pour que la fonction renvoie la page d'accueil. L’utilisateur a effectivement cette capacité, mais ne peut faire l’une de ces choses - à moins que je ne clique sur "enregistrer" en tant qu’administrateur dans la page de modification de l’utilisateur?
Éditer 2
Voici les différentes approches que j'ai adoptées pour changer le rôle de l'utilisateur - si cela aide!
//using this currently
$user = new WP_User($unpaid->uid);//$unpaid->uid is the users ID
$user->set_role('editor');
if(!$user->has_cap('edit_posts'))
{
$user->add_cap('edit_posts');
}
wp_cache_delete($unpaid->uid, 'users');
//another attempt
$uID = $unpaid->uid;
wp_insert_user(array('ID'=>$uID,'role'=>'editor'));
MISE À JOUR DE NOUVEAU!
Je viens d'essayer cela et encore une fois, la base de données est mise à jour, et même affiche "éditeur" dans le panneau d'administration, mais l'utilisateur ne peut toujours pas voir les éléments de menu appropriés à moins que je ne clique sur "mettre à jour" sur son profil!
$new = new WP_User($current_user->ID);
$new->set_role('editor');
wp_cache_delete( $new->ID, 'users' );
wp_cache_delete( $new->user_login, 'userlogins' );
wp_cache_delete( $new->user_email, 'useremail' );
wp_cache_delete( $new->user_nicename, 'userslugs' );
do_action('profile_update');
Des pensées?
J'utilise remove_role
puis add_role
pour mettre à niveau un utilisateur d'un rôle à un autre.
Voici une fonction qui vérifie tous les utilisateurs du rôle utilisateur subscriber et les met à niveau vers editor toutes les heures.
/**
* Add a cron job that will update
* Subscribers to editors. Runs hourly
*/
add_action('check_user_role', 'upgrade_user');
function run_check_user_role() {
if ( !wp_next_scheduled( 'check_user_role' ) ) {
wp_schedule_event( current_time( 'timestamp' ), 'hourly', 'check_user_role');
}
}
add_action( 'wp', 'run_check_user_role' );
function upgrade_user() {
// Get users in subscriber role
$args = array(
'role' => 'subscriber',
);
$users = get_users( $args );
foreach ( $users as $user ) {
$user = new WP_User( $user->ID );
// Remove current subscriber role
$user->remove_role( 'subscriber' );
// Upgrade to editor role
$user->add_role( 'editor' );
}
}
Voici un moyen pour que vous puissiez essayer de mettre à niveau les utilisateurs manuellement:
Exécuter ceci en tant que http://votredomaine.com/?upgrade_user
if ( isset( $_REQUEST['upgrade_user'] ) ) {
upgrade_user();
}
Je meilleure méthode est. Qui utilise WP_User pour basculer/définir le rôle.
$role = 'editor';
$user = new WP_User($user_id);
$user->set_role($role);