使用wp-admin/admin-post.php
作为窗体操作处理程序,并将自定义函数作为回调绑定到该函数。
电子邮件更新的简单示例。我们将使用名为[userform]
这里,但您也可以使用模板。
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;
}
正在插入…
[userform]
…将生成一个基本表单:
用户可以在此处更改其电子邮件地址。
要了解可用的变量及其存储位置,请查看以下文件:
wp-admin/user-edit.php
wp-admin/includes/user.php
和wp-includes/user.php
表格
users
和
user_meta
如果要发送简单的SQL查询,也值得一看。