wp_update_user wird nicht aktualisiert

7

In meiner Verzweiflung bitte ich auch in diesem Forum um Hilfe - wenn jemand (JEMAND!) In diesem Beitrag nachsehen könnte, ob er helfen könnte, wäre ich auf ewig dankbar

http://wordpress.org/support/topic/wp_update_user-not-updating?replies=11

Grundsätzlich - Ich aktualisiere die Rolle und die Funktionen eines Benutzers per Skript, aber die Änderungen werden erst wirksam (dh der Benutzer kann bestimmte Menüelemente sehen), wenn ich in diesen Benutzer gehe und auf "Speichern" klicke.

Danke im Voraus!!

Chris

AKTUALISIEREN:

Vielleicht hilft das, es zu lösen?

Dies ist das WP_User-Objekt, das ich beim Anmelden als neu geänderter Benutzer auf dem Bildschirm wiedergegeben habe :

WP_User Object ( [data] => stdClass Object ( [ID] => 130 [user_login] => test [user_pass] => $P$BuHO1ABLCNQ716tktgyes4jqqkfVxG. [user_nicename] => test [user_email] => email@gmail.com [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] => )

So wird der Menüpunkt in meiner Plugin-Datei erstellt (die dem Benutzer angezeigt werden soll):

add_menu_page('Welcome', 'Welcome','edit_posts', 'welcome', 'welcome_page', get_bloginfo('template_url').'/images/icon.png', 0);

Dies ist die Funktion / Seite, die der Menüpunkt zurückgibt:

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';
}
 }

Wie Sie sehen können, benötigt der Benutzer nur die Funktion edit_posts, um den Menüpunkt anzuzeigen und um die Begrüßungsseite zurückzugeben. Der Benutzer hat zwar diese Fähigkeit, kann aber keines dieser Dinge tun - es sei denn, ich klicke auf "Speichern" als Administrator auf der Seite zum Bearbeiten des Benutzers?

Bearbeiten 2

Im Folgenden sind die verschiedenen Ansätze aufgeführt, mit denen ich die Benutzerrolle geändert habe - wenn es hilft!

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

UPDATE WIEDER!

Ich habe es gerade versucht und wieder, die Datenbank wird aktualisiert, zeigt sogar 'Editor' im Admin-Bereich, aber der Benutzer kann die entsprechenden Menüelemente immer noch nicht sehen, es sei denn, ich klicke in seinem Profil auf "Aktualisieren"!

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

Irgendwelche Gedanken?

Clearmedia
quelle
Ich habe alles versucht, was ich hier weiß, Leute - jede Hilfe wäre sehr dankbar!
Clearmedia
Verwenden Sie zufällig ein anderes Plugin wie den Benutzerrollen-Editor? Ich habe vor, etwas Ähnliches wie Sie zu tun, bin aber noch nicht dazu gekommen. Meine frühen Untersuchungen haben mir einen Hinweis hinterlassen, wie ich die wp_capabilities-Werte untersuchen kann. Es ist eine Weile her, also kann ich mich nicht erinnern warum, aber ich habe diesen Code zu meinen Notizen hinzugefügt, der Ihnen helfen könnte? update_user_meta($user_id, 'wp_capabilities', '');
TomC
Wenn der Benutzer den Browser-Cache leert, wird das Menü angezeigt? Auch wenn Supercache usw. deaktiviert sind oder beides, hilft dies?
Tom J Nowell
Hilft es auch, die im Menü erforderliche Funktion in die Editor-Rolle anstatt in edit_posts zu ändern?
Tom J Nowell
1
Ich habe genau das gleiche Problem mit einem normalen wp_user_update des Anzeigenamens. Ich habe meine Caching-Lösungen deaktiviert und nichts ändert sich. Wenn ich zur Profilseite des Benutzers gehe, wird der Anzeigename aktualisiert, aber die Website zeigt ihn erst an, nachdem ich auf die Schaltfläche Aktualisieren in user-edit.php geklickt habe
Stefano Tombolini

Antworten:

4

Ich benutze remove_roleund add_roleaktualisiere dann einen Benutzer von einer Rolle auf eine andere.

Hier ist eine Funktion, die prüft alle Benutzer in der Benutzerrolle Teilnehmer und aktualisieren sie auf Editor jede Stunde.

/**
* 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' );

    }
}

Hier ist eine Möglichkeit, wie Sie versuchen können, die Benutzer manuell zu aktualisieren:

Führen Sie dies als http://yourdomain.com/?upgrade_user aus

if ( isset( $_REQUEST['upgrade_user'] ) ) {
    upgrade_user();
} 
Pontus Abrahamsson
quelle
Versuchte, dass ein Pontus - keine gute, ich fürchte - mein Verstand dreht sich langsam zu Brei - dies ist die eine winzige Fliege in einem ansonsten knackenden System!
Clearmedia
Das ist komisch, ich führe dies auf einer neu erstellten WordPress 3.4-Installation aus und es funktioniert für mich. Wo fügst du es hinzu? und hast du so etwas schon?
Pontus Abrahamsson
Sie können mein Update oben sehen - ich führe den Code in meiner Plugin-Datei aus. Die Datenbank wird korrekt aktualisiert - aber der Benutzer kann die Menüelemente immer noch nicht sehen, es sei denn, ich
melde
Sie sollten global $ current_user hinzufügen, um die Funktionen des Benutzers zu überprüfen. Ich habe Ihren Code aktualisiert. Sie können stattdessen eine Rolle wie diese überprüfen:if ( $user->has_cap('edit_posts') ) {}
Pontus Abrahamsson
Entschuldigung Pontus - Sie haben meinen Code aktualisiert? Ich habe meinem ersten Beitrag eine weitere Bearbeitung hinzugefügt - ich habe has_cap ausprobiert. Bin ich falsch in der Annahme, dass ich global $ current_user nicht deklarieren muss, wenn ich bereits die Benutzer-ID habe?
Clearmedia
0

Ich bessere Methode ist. Womit WP_User zum Umschalten / Festlegen der Rolle verwendet wird.

$role = 'editor';
$user = new WP_User($user_id);
$user->set_role($role);
Barry Carlyon
quelle
1
Kann jemand raten, warum meine Lösung falsch ist, da dies -3'ed wurde?
Barry Carlyon
Vielen Dank für die Antworten. Ich habe beide Ansätze ausprobiert, aber ohne Erfolg :( Ich glaube, das System aktualisiert die Datenbank korrekt, aber der Benutzer kann immer noch nicht auf die entsprechenden Menüelemente zugreifen, bis ich in diesen Benutzer gehe und auf Speichern klicke ... ?
Clearmedia
Versuchen Sie, wp_cache_delete($user_id, 'users');nach meinem $ user-> set_role hinzuzufügen. Aber bevor ich das mache. Werden dem Benutzer die richtigen Menüpunkte angezeigt, wenn er sich abmeldet und erneut anmeldet? In diesem Fall stört der WP-temporäre Cache und wp_cache_delete löscht dies. (Nicht getestet)
Barry Carlyon
Danke Barry - sie können die Menüpunkte nach dem Abmelden immer noch nicht sehen und sich wieder anmelden. - Es ist, als ob die Aktualisierungsfunktion fehlt oder nichts tut, was beim Aktualisieren eines Benutzerprofils über das Fenster admin> users auftritt ...?
Clearmedia
1
Diese Antwort ist richtig, ich habe sie getestet, sie funktioniert einwandfrei. Ich weiß nicht, was Sie falsch machen, aber es gibt buchstäblich nichts weiter, als neue Rollen zu setzen.
Otto