Benutzereingaben aus einem Formular abrufen
-
-
Hallo @William,deine Frageistetwas weitgefasst,da sienicht wirklich WordPress-spezifischist,sondern auch allgemeine PHP-Kenntnisse.Bitte überprüfen Sie zuerst die HTML- und PHP-Formularerstellung. Anschließend können Sie die Funktion `wp_update_user ($ user)` verwenden,um dies zuerreichen.Hi @William, your question is a bit broad as it is not really WordPress specific, but also general PHP knowledge. Please check the HTML & PHP formbuilding first - afterwards you can use the `wp_update_user($user)` function to achieve that.
- 0
- 2012-12-11
- fischi
-
1 Antworten
- Stimmen
-
- 2012-12-11
Verwenden Sie
wp-admin/admin-post.php
als Handlerfür Formularaktionen undbinden Sie Ihrebenutzerdefinierte Funktion als Rückruf daran.Eineinfaches Beispielfür E-Mail-Updates. Wir werden hiereinen Shortcodemit dem Namen
[Benutzerformular]
verwenden,aber Sie können aucheine Vorlage verwenden.add_shortcode ('userform','wpse_75723_userform'); add_action ('admin_post_update_user_email','wpse_75723_update'); /** * Erstellen Sie das Formular. */ Funktion wpse_75723_userform () { $ here=esc_url (home_url ($ _SERVER ['REQUEST_URI'])); if (!is_user_logged_in ()) return 'Siemüssen & lt; a href="'. wp_login_url ($ here). '" > Login & lt;/a > um diese Seite zubenutzen. '; $ action=admin_url ('admin-post.php'); $ user_id=get_current_user_id (); return "& lt;formmethod='post' action='$ action' > & lt;inputtype='hidden'name='action' value='update_user_email' > & lt;inputtype='hidden'name='redirect' value='$ here' > & lt;inputtype='hidden'name='user_id' value='$ user_id' > & lt; Eingabetyp='E-Mail' Name='E-Mail' Größe='15' > & lt;inputtype='submit' > & lt;/form > "; }} /** * Benutzer-E-Mail aktualisieren */ Funktion wpse_75723_update () { if (!isset ($ _POST ['user_id'])) sterben ('noid'); $ user_id=absint ($ _POST ['user_id']); if (! current_user_can ('edit_user',$ user_id)) sterben ('nichterlaubt'); if (!isset ($ _POST ['email'])) sterben ('keine E-Mail'); if (!is_email ($ _POST ['email'])) sterben ('ungültige E-Mail'); $ user=get_userdata ($ user_id); if (leer ($ user- > user_login)) sterben ('Benutzer verweigert'); global $ wpdb; $ wpdb- > query ( $ wpdb- > vorbereiten ( "UPDATE {$ wpdb- > Benutzer} SET user_email=% s WHERE user_login=% s", $ _POST ['email'], $ user- > user_login ) ); $ location=isset ($ _POST ['redirect']) ? urldecode ($ _POST ['redirect']) : home_url ('/'); wp_redirect ($ location,303); Ausfahrt; }}
Einfügen…
[Benutzerformular]
…in eine Seite wirdeine Grundformerzeugt:
Der Benutzer kann hier seine E-Mail-Adresse ändern.
Um zu verstehen,welche Variablen verfügbar sind und wo siegespeichert sind,sehen Sie sich diese Dateien an:
wp-admin/user-edit.php
-
wp-admin/includes/user.php
und wp-includes/user.php
Die Tabellen
Benutzer
unduser_meta code> sindebenfallseinen Blick wert,wenn Sieeinfache SQL-Abfragen sendenmöchten.
Use
wp-admin/admin-post.php
as form action handler, and bind your custom function as callback to that.A simple example for email updates. We will use a shortcode named
[userform]
here, but you can use a template too.add_shortcode( 'userform', 'wpse_75723_userform' ); add_action( 'admin_post_update_user_email', 'wpse_75723_update' ); /** * Create the form. */ function wpse_75723_userform() { $here = esc_url( home_url( $_SERVER['REQUEST_URI'] ) ); if ( ! is_user_logged_in() ) return 'You have to <a href="' . wp_login_url( $here ) . '">log in</a> to use this page.'; $action = admin_url( 'admin-post.php'); $user_id = get_current_user_id(); return "<form method='post' action='$action'> <input type='hidden' name='action' value='update_user_email'> <input type='hidden' name='redirect' value='$here'> <input type='hidden' name='user_id' value='$user_id'> <input type='email' name='email' size='15'> <input type='submit'> </form>"; } /** * Update user email */ function wpse_75723_update() { if ( ! isset ( $_POST['user_id'] ) ) die( 'no id' ); $user_id = absint( $_POST['user_id'] ); if ( ! current_user_can( 'edit_user', $user_id ) ) die( 'not allowed' ); if ( ! isset ( $_POST['email'] ) ) die( 'no email' ); if ( ! is_email( $_POST['email'] ) ) die( 'invalid email' ); $user = get_userdata( $user_id ); if ( empty ( $user->user_login ) ) die( 'user denied' ); global $wpdb; $wpdb->query( $wpdb->prepare( "UPDATE {$wpdb->users} SET user_email = %s WHERE user_login = %s", $_POST['email'], $user->user_login ) ); $location = isset ( $_POST['redirect'] ) ? urldecode( $_POST['redirect'] ) : home_url( '/' ); wp_redirect( $location, 303 ); exit; }
Inserting …
[userform]
… into a page will produce a basic form:
The user can change her/his email address here.
To understand what variables are available and where they are stored look at these files:
wp-admin/user-edit.php
wp-admin/includes/user.php
andwp-includes/user.php
The tables
users
anduser_meta
are worth a look too if you want to send plain SQL queries.-
Ich kann diesen Hook 'admin_post_update_user_email'nirgendwofinden.Woherbekommen Siees?I can't find this hook 'admin_post_update_user_email' anywhere. Where do you get it from?
- 0
- 2013-09-21
- Ari
-
@AriSusanto Diesisteine Kombination aus "admin_post_" und dem Wert von "
". @AriSusanto This is a combination of `admin_post_` and the value of ``.- 0
- 2013-09-21
- fuxia
-
Wiefügeich weiterefunktionierende Eingabefelder hinzu,z. B. die Website des Benutzers usw.?How to add another working input fields to it such as user's website etc?
- 0
- 2013-09-21
- Ari
-
Schreiben Sieeseinfachin "wpse_75723_userform ()" und lesen Sieesin "wpse_75723_update ()".Ich verstehe diese Fragenicht.Just write it into `wpse_75723_userform()` and read it in `wpse_75723_update()`. I don’t understand this question.
- 0
- 2013-09-21
- fuxia
-
Ja,esfunktionierteinfach.Ich verwende `wp_update_user`,umein zusätzliches Eingabefeldfür das Benutzerprofil zu aktualisieren.Yes, it is simply working. I use `wp_update_user` to update additional user profile input field.
- 0
- 2013-09-22
- Ari
Ich versuche,ein Formular zuerstellen,mit dem Benutzerihre Informationenim Frontend aktualisieren können. Ichfangegerade an,PHP zu lernen (ich kenne C # sehrgut). Wennich diesen Code verwende,umein Formular aufeiner WordPress-Seite zuerstellen,wieerhalteich die Informationen vom Benutzer,wenner auf die Schaltfläche "Aktualisieren" klickt und dann die Datenbank aktualisiert?