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?


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();
} 

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

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
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.